2014年7月14日星期一

Architect_011:使用DNS实现负载均衡的利与弊 (摘录+整理)

在《大型网站架构设计方案》一文中谈到,DNS是实现负载均衡的最简单有效的一种方式。
实际上,DNS是实现负载均衡最早的技术,现在的一些域名注册商仍然在使用这项技术。

本文探讨使用DNS实现负载均衡的好的一面和不好的一面。

1. 实现原理
在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。
从原理上,可知DNS实现负载均衡是在链路层上的。

我们知道,中国北方使用的是网通机房,南方使用的是电信机房。
一般来说,一个网站为了保证南北互通,会分别在网通机房和电信机房各有一台机器,这两台机器之间做内容同步。

问题1:访问某个网站时,是如何让北方的用户访问网通的机房,让南方的用户访问电信的机房?
比如,当你访问www.B.com后,后面发生的事情是这样的:
(1)首先要去你的LocalDNS做解析。LocalDNS就是你本机网卡所设置的DNS服务器。
(2)如果LocalDNS没有www.B.com的记录,则LocalDNS会询问上级DNS服务器,DNS的查询结构是树状的,最后查询的DNS为rootDNS,即根DNS。全世界只有13台根DNS,中国境内没有。
(3)通过DNS查询获得的结果会告知我们B.com这个所在的DNS解析服务器是哪个,比如:为.ns1.c2.com。
(4)接下来去询问ns1.c2.com去做解析,会得到www.B.com对应的IP地址。ns1.c2.com是哪里来的? 当然是你申请注册域名的机构自己的DNS服务器,比如万网的DNS服务器。
(5)得到www.B.com的IP地址后,返回给客户端(比如浏览器)。
重点是在第4步,一些DNS注册商会根据客户端的IP地址,来智能的返回www.B.com对应的电信或者网通的IP地址。

问题2:如何判断这个请求DNS域名解析的机器是电信线路还是网通线路呢?
(1)“笨”方法,在IT领域,某种程度上,“笨”意味着可靠、稳定。
在DNS中保存一张庞大的IP地址分配表,表里面有所有的电信IP地址段和所有的网通地址段,则可以通过查询这个IP地址表来判断请求的PC是属于哪个线路上的。
基本上银行、证券、金融这些重要部门都是使用的这种笨方法。
(2)“聪明”方法,智能的动态检测方法
在智能DNS解析设备接受到PC的DNS请求的时候,将分别使用电信和网通的各自线路向发送请求的PC的IP地址或LocalDNS发送一个探测包,这个包可能是ICMP的PING包,也可能是反向DNS查询的DNS包(TCP53)。比较电信和网通的回应包的的时间戳,延迟小的则判定为优先解析的,即离用户近的。

2. 优点
(1)技术实现比较灵活、方便,简单易行,成本低,适用于大多数TCP/IP应用。不需要网络专家来对之进行设定,或在出现问题时对之进行维护。
(2)对于Web应用来说,不需要对代码作任何的修改。事实上,Web应用本身并不会意识到DNS负载均衡的存在。
(3)Web服务器可以位于互联网的任意位置上。

3. 缺点
(1)不能够按照Web服务器的处理能力分配负载。DNS负载均衡采用的是简单的轮循负载算法,不能区分服务器之间的差异,不能反映服务器的当前运行状态。所以DNS服务器将Http请求平均地分配到后台的Web服务器上,而不考虑每个Web服务器当前的负载情况。如果后台的Web服务器的配置和处理能力不同,最慢的 Web服务器将成为系统的瓶颈,处理能力强的服务器不能充分发挥作用。不能做到为性能较好的服务器多分配请求,甚至会出现客户请求集中在某一台服务器上的情况。
(2)不支持高可靠性,DNS负载均衡技术没有考虑容错。如果后台的某台Web服务器出现故障,DNS服务器仍然会把DNS 请求分配到这台故障服务器上,导致不能响应客户端。
(3)可能会造成额外的网络问题。为了使本DNS服务器和其他DNS服务器及时交互,保证DNS数据及时更新,使地址能随机分配,一般都要将DNS的刷新时间设置的较小,但太小将会使DNS流量大增造成额外的网络问题。
(4)一旦某个服务器出现故障,即使及时修改了DNS设置,还是要等待足够的时间(刷新时间)才能发挥作用,在此期间,保存了故障服务器地址的客户计算机将不能正常访问服务器。

结论:DNS实现的负载均衡是链路层的,有其简单方便的一面,可以与其它负载均衡方式一起使用(比如反向代理方式),不能只靠它实现负载均衡。

参考文献:
1. http://www.qicaispace.com/gonggao/server/page02/info33.asp
2. http://network.51cto.com/art/201004/196772.htm
3. http://baike.baidu.com/view/486963.htm
4. http://network.51cto.com/art/201004/196719.htm

没有评论: