从浏览器输入域名开始分析DNS解析过程( 五 )


9. 权威域名服务器中的循环DNS为了提高服务的可靠性和可用性,通常会部署多台相同配置的 DNS 服务器,提供相同的 DNS 解析服务,通过将这些服务器添加到一个逻辑组中,可以实现循环 DNS 技术,从而实现负载均衡和高可用性(所以这个负载均衡并不是靠专门的硬件,有缺点) 。
通过将多个相同的 DNS 权威服务器添加到一个逻辑组中,以均衡 DNS 解析请求的负载 。假设有六台服务器(A、B、C、D、E、F),它们都在循环 DNS 配置中 。当客户端发起 DNS 查询请求时,循环 DNS 服务器会从该组中选择一个服务器,并将请求发送到该服务器 。循环 DNS 服务器选择服务器 A 处理该请求 。如果服务器 A 无法响应请求,则循环 DNS 服务器会将请求发送到 B 服务器 。如果 B 服务器也无法响应请求,则循环 DNS 服务器会将请求发送到 C 服务器,以此类推 。每次查询 DNS 服务器时,它都会以循环方式将最近响应的 IP 地址发送到队列后面 。
但是缺点很明显,越往后因为拒绝服务导致重试的次数越多,请求变慢 。
超过了设定的超时时间,客户端就会认为该DNS服务器未能响应 。超时时间的长度是可以设置的,通常在几秒钟到几十秒钟之间 。如果在超时时间内未能获得响应,客户端就会尝试向下一个DNS服务器发起请求 。如果所有的DNS服务器都未能响应,就会返回一个错误信息给用户 。
在这种情况下,如果客户端的 DNS 解析超时并向另一个 DNS 服务器发出请求,则浏览器的 network 中可能会出现两个 HTTP 请求记录 。第一个记录是 DNS 解析无响应的请求,第二个记录是重试能成功的 HTTP 请求 。如果 DNS 解析超时并且没有重试,则只会显示一个请求记录,即 DNS 解析请求 。
10. 解决循环DNS的缺点——DNS负载均衡技术DNS负载均衡技术可以用负载均衡来分配 DNS 查询请求到不同的 DNS 服务器上,以实现负载均衡 。这些 DNS 服务器可以根据请求的源 IP 地址、地理位置或者其他特定条件来分配权重,进行筛选最优的服务器,从而避免单个权威 DNS 服务器承受过多的请求压力 。如果其中一台DNS服务器出现问题,系统会自动将它从轮询列表中删除,从而确保之后客户端的请求不会被发送到不可用的DNS服务器上 。
Anycast DNS技术可以根据地理位置将 DNS 查询发送到最近的 DNS 服务器,是因为它利用了网络路由中的机制 。在互联网中,路由器将数据包转发到下一跳时,通常会选择距离最短的路径 。这个距离可以通过测量网络的物理距离、延迟等指标来计算 。Anycast DNS 利用了这个机制,在不同的地理位置部署多个 DNS 权威服务器,从而实现了就近访问 。
假设有一个名为 www.example.com 的域名,该域名有三个 DNS 权威服务器,分别位于深圳、上海和北京 。这三个 DNS 服务器根据域名能解析出同一个 IP 地址 。现在,一个位于深圳的客户端发起 DNS 查询请求 。路由器会将该请求发送到距离最近的 DNS 服务器,也就是深圳的那个 DNS 服务器 。如果这个 DNS 服务器无法响应,那么路由器会将请求发送到次近的 DNS 服务器,也就是上海的那个 DNS 服务器 。以此类推,直到找到可响应请求的 DNS 服务器为止 。
上面说的是DNS权威服务器之间的的负载均衡,应用基于DNS的负载均衡又是怎样的呢?
假设有一个域名 example.com,它对应着多个应用服务器的 IP地址,为了实现负载均衡,可以在同一个权威域名服务器的 DNS 记录中配置多个 A 记录,每个 A记录对应一个应用服务器的 IP地址,权威域名服务器会将A记录中的多个IP地址返回给DNS递归服务器,由递归服务器根据一定的负载均衡策略选择其中一个IP地址返回给客户端 。这样就实现了应用基于DNS的负载均衡 。

推荐阅读