为了建立一个高负载的Web站点,必须使用多服务器的分布式结构。上面提到的使用代理服务器和Web服务器相结合,或者两个Web服务器相互协作的方式也属于多服务器的结构,但在这些多服务器的结构中,每个服务器所起到的作用是不同的,属于非对称的体系结构。非对称的服务器结构中每个服务器起到的作用是不同的,例如一个服务器用于提供静态网页,而另一个用于提供动态网页等等,这样就使得网页设计时就需要考虑不同服务器之间的关系,一旦要改变服务器之间的关系,就会使得某些网页出现连接错误,不利于维护,可扩展性也差。
另外一种多服务器的设计结构为对称结构,在对称结构中每台服务器都具备等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。然后,可以通过某种技术,将外部发送来的请求均匀分配到对称结构中的每台服务器上,接收到连接请求的服务器都独立回应客户的请求。在这种结构中,将外部请求均匀分配到服务器上的技术称为负载均衡技术,由于建立内容完全一致的Web服务器并不困难,因此负载均衡技术就成为建立一个高负载Web站点的关键性技术。
基于DNS的负载均衡
最早的负载均衡技术是通过DNS服务中的随机名字解析来实现的。在DNS服务器中,可以为多个不同的地址配置同一个名字,这个数据被发送给其他名字服务器,而最终查询这个名字的客户机将在解析这个名字时随机使用其中一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,因此不同的客户访问的也就是不同地址的Web服务器,从而达到负载均衡的目的。
例如如果希望使用三个Web服务器来回应对www.exampleorg.org.cn的HTTP请求,就可以设置该域的DNS服务器中关于该域的数据包括与下面例子类似的结果:
www1 IN A 192.168.1.1
www2 IN A 192.168.1.2
www3 IN A 192.168.1.3
www IN CNAME www1
www IN CNAME www2
www IN CNAME www3
这里先为每个计算机定义一个真实名字,然后再为它们定义同一个别名。直接针对不同地址设置同一个真实名字(A记录)也是可行的,但使用别名的方法易于管理一些。
由于此时反向解析只能针对一台计算机,那么每个Web服务器都需要使用ServerName重新定义同一个名字,或者设置名字解析的顺序为hosts文件优先,并在hosts文件中定义本身为www,以保证每个服务器的名字设置保持一致。
此后外部的客户机就可能随机的得到对应www的不同地址,那么随后的HTTP请求也就会发送给不同地址了。
当使用DNS负载均衡的时候,必须尽量保证不同的客户计算机能均匀获得不同的地址。由于DNS数据是具备一个刷新时间的标志的,一旦超过这个时间限制过期,其他DNS服务器就需要和这个服务器交谈以重新获得地址数据,就有可能获得不同IP地址。因此为了使得地址能随机分配,就应该使得刷新时间尽量短,不同地方的DNS服务器能更新对应的地址,使得地址获得能随机一些。然而将过期时间设置的过低将使得DNS流量大增,而造成额外的网络问题。出于折衷的考虑,一般将刷新时间设置为1个小时。
DNS负载均衡的一个问题是一旦某个服务器出现故障,即使及时修改了DNS设置,还是要等待足够的时间(刷新时间)才能发挥作用,在此期间保存了故障服务器地址的客户计算机将不能正常访问服务器。
尽管存在多种问题,然而它还是一种非常有效的做法,当前使用在包括Yahoo在内的很多Web站点上。
标签: