网络协议趣谈DNS协议域名解析和负载均衡

Posted sysu_lluozh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络协议趣谈DNS协议域名解析和负载均衡相关的知识,希望对你有一定的参考价值。

现在网站的数目非常多,如果全部用IP地址进行访问,恐怕很难记住。于是,需要一个地址簿,根据名称就可以查看具体的地址

例如,要去西湖边的"外婆家饭店",这就是名称,然后通过地址簿查看到底是哪条路多少号

一、DNS服务器

在网络世界也是这样的,肯定记得住网站的名称,但是很难记住网站的IP地址,因而也需要一个地址簿,就是DNS服务器

由此可见,DNS在日常生活中多么重要。每个人上网都需要访问它,但是同时,这对它来讲也是非常大的挑战,一旦它出了故障整个互联网都将瘫痪。另外,上网的人分布在全世界各地,如果大家都去同一个地方访问某一台服务器,时延将会非常大。因而,DNS服务器一定要设置成高可用、高并发和分布式

于是,就有了这样树状的层次结构

  • 根DNS服务器 :返回顶级域DNS服务器的IP地址
  • 顶级域DNS服务器:返回权威DNS服务器的IP地址
  • 权威DNS服务器 :返回相应主机的IP地址

二、DNS解析流程

为了提高DNS的解析性能,很多网络都会就近部署DNS缓存服务器。于是,就有了以下的DNS解析流程

  1. 电脑向本地DNS发起解析请求

电脑客户端会发出一个DNS请求,问www.163.com的IP是啥啊,并发给本地域名服务器(本地DNS)
那本地域名服务器(本地DNS)是什么呢?如果是通过DHCP配置,本地DNS由网络服务商(ISP,如电信、移动等)自动分配,它通常就在网络服务商的某个机房

  1. 本地DNS向根DNS发起解析请求

本地DNS收到来自客户端的请求。可以想象这台服务器上缓存了一张域名与之对应IP地址的大表格
如果能找到www.163.com就直接就返回IP地址
如果没有,本地DNS会去问它的根域名服务器:“老大,能告诉我www.163.com的IP地址吗?”,根域名服务器是最高层次的,全球共有13套。它不直接用于域名解析,但能指明一条道路

  1. 根DNS告知本地DNS顶级DNS服务器的地址

根DNS收到来自本地DNS的请求,发现后缀是 .com,说:“哦,www.163.com啊,这个域名是由.com区域管理,给你它的顶级域名服务器的地址,你去问问它吧”

  1. 本地DNS向顶级DNS发起解析请求

本地DNS转向问顶级域名服务器:“老二,能告诉我www.163.com的IP地址吗?”,顶级域名服务器就是大名鼎鼎的比如 .com、.net、 .org这些一级域名,它负责管理二级域名,比如163.com,所以它能提供一条更清晰的方向

  1. 顶级DNS告知本地DNS权威DNS服务器的地址

顶级域名服务器说:“我给你负责www.163.com区域的权威DNS服务器的地址,你去问它应该能问到”

  1. 本地DNS向权威DNS发起解析请求

本地DNS转向问权威DNS服务器:“您好,www.163.com对应的IP是啥呀?”,163.com的权威DNS服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主

  1. 权威DNS告知本地DNS服务对应的IP地址

权威DNS服务器查询后将对应的IP地址x.x.x.x告诉本地DNS

  1. 本地DNS返回给客户端IP地址

本地DNS再将IP地址返回客户端,客户端和目标建立连接

至此,完成了DNS的解析过程。现在总结一下并将整个过程画成了一个图

三、负载均衡

站在客户端角度,这是一次DNS递归查询过程。因为本地DNS全权为它效劳,它只要坐等结果即可。在这个过程中,DNS除了可以通过名称映射为IP地址,它还可以做另外一件事,就是负载均衡

还是以访问“外婆家饭店”为例,“外婆家饭店"可能有很多地址,因为它在杭州都可以有很多家。所以,如果一个人想去"外婆家饭店”,他可以就近找一家店,而不用大家都去同一家,这就是负载均衡

3.1 内部负载均衡

DNS首先可以做内部负载均衡

例如,一个应用要访问数据库,在这个应用里面应该配置这个数据库的IP地址,还是应该配置 这个数据库的域名呢?显然应该配置域名,因为一旦这个数据库因为某种原因,换到了另外一台机器上,而如果有多个应用都配置了这台数据库的话,一换IP地址就需要将这些应用全部修改一遍。但是如果配置了域名,则只要在DNS服务器里将域名映射为新的IP地址,这个工作就完成了,大大简化了运维

在这个基础上,可以再进一步。例如,某个应用要访问另外一个应用,如果配置另外一个应用的IP地址,那么这个访问就是一对一的。但是当被访问的应用撑不住的时候,其实可以部署多个。但是,访问它的应用如何在多个之间进行负载均衡?只要配置成为域名即可,在域名解析时只要配置策略,这次返回第一个IP,下次返回第二个IP,就可以实现负载均衡

3.2 全局负载均衡

另外一个更加重要的是,DNS还可以做全局负载均衡

为了保证应用高可用,往往会部署在多个机房,每个地方都会有自己的IP地址。当用户访问某个域名的时候,这个IP地址可以轮询访问多个数据中心。如果一个数据中心因为某种原因挂了,只要在DNS服务器里面,将这个数据中心对应的IP地址删除,就可以实现一定的高可用

另外,肯定希望北京的用户访问北京的数据中心,上海的用户访问上海的数据中心,这样客户体验就会非常好,访问速度就会超快,这就是全局负载均衡的概念

四、示例:DNS访问数据中心中对象存储上的静态资源

通过DNS访问数据中心中对象存储上的静态资源为例,看一看整个过程

4.1 多数据中心数据部署

假设全国有多个数据中心,托管在多个运营商,每个数据中心三个可用区(Available
Zone)。对象存储通过跨可用区部署,实现高可用性。在每个数据中心中都至少部署两个
内部负载均衡器,内部负载均衡器后面对接多个对象存储的前置服务器(Proxy-server)

4.2 客户端域名解析的过程

  1. 当一个客户端要访问object.yourcompany.com的时候,需要将域名转换为IP地址进行访问,所以它要请求本地DNS解析器

  2. 本地DNS解析器先查看看本地的缓存是否有这个记录,如果有则直接使用,因为上面的过程太复杂,如果每次都要递归解析则非常麻烦

  3. 如果本地无缓存,则需要请求本地的DNS服务器

  4. 本地的DNS服务器一般部署在你的数据中心或者你所在的运营商的网络中,本地DNS服务器也需要看本地是否有缓存,如果有则返回,因为它也不想把上面的递归过程再走一遍

  5. 至7.如果本地没有,本地DNS才需要递归地从根DNS服务器,查到.com的顶级域名服务 器,最终查到yourcompany.com的权威DNS服务器给本地DNS服务器,权威DNS服务器按说会返回真实要访问的IP地址

4.3 简单负载均衡

对于不需要做全局负载均衡的简单应用来讲,yourcompany.com的权威DNS服务器可以直接将 object.yourcompany.com这个域名解析为一个或者多个IP地址,然后客户端可以通过多个IP地址进行简单的轮询,实现简单的负载均衡

4.4 全局负载均衡器

但是对于复杂的应用,尤其是跨地域跨运营商的大型应用,则需要更加复杂的全局负载均衡机制,因而需要专门的设备或者服务器来做这件事情,这就是全局负载均衡器(GSLB, Global Server Load Balance)

yourcompany.com的DNS服务器中,一般是通过配置CNAME的方式,给object.yourcompany.com起一个别名,例如object.vip.yourcomany.com,然后告诉本地DNS服务器,让它请求GSLB解析这个域名,GSLB就可以在解析这个域名的过程中,通过自己的策略实现负载均衡

图中画了两层的GSLB,是因为分运营商和地域。因此希望不同运营商的客户,可以访问相同 运营商机房中的资源,这样不跨运营商访问有利于提高吞吐量,减少时延

4.5 GSLB的处理流程

  1. 第一层GSLB,通过查看请求它的本地DNS服务器所在的运营商,就知道用户所在的运营 商。假设是移动,通过CNAME的方式,通过另一个别名object.yd.yourcompany.com告诉本地DNS服务器去请求第二层的GSLB

  2. 第二层GSLB,通过查看请求它的本地DNS服务器所在的地址,就知道用户所在的地理位 置,然后将距离用户位置比较近的Region里面,六个内部负载均衡(SLB,Server Load Balancer)的地址返回给本地DNS服务器

  3. 本地DNS服务器将结果返回给本地DNS解析器

  4. 本地DNS解析器将结果缓存后,返回给客户端

  5. 客户端开始访问属于相同运营商的距离较近的Region 1中的对象存储,当然客户端得到了六个IP地址,它可以通过负载均衡的方式,随机或者轮询选择一个可用区进行访问。对象存储一般会有三个备份,从而可以实现对存储读写的负载均衡

五、小结

关于DNS协议的内容总结一下:

  • DNS是网络世界的地址簿,可以通过域名查地址,因为域名服务器是按照树状结构组织的,因此域名查找是使用递归的方法,并通过缓存的方式增强性能
  • 在域名和IP的映射过程中,给了应用基于域名做负载均衡的机会,可以是简单的负载均衡, 也可以根据地址和运营商做全局的负载均衡

以上是关于网络协议趣谈DNS协议域名解析和负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

网络协议趣谈CDN静态和动态数据缓存

网络协议趣谈CDN静态和动态数据缓存

这6种实现负载均衡技术的方式不容错过

网络协议趣谈DNS协议

负载均衡学习之DNS域名解析负载均衡

图解 DNS 域名解析与负载均衡