随着Internet技术的飞速发展,网络带宽瓶颈的限制被排除之后,另一个亟待解决的就是web站点响应能力低下的问题。影响web站点响应速度的因素有很多,其中最主要的两点就是Web站点的处理能力和吞吐能力。单纯考虑靠提高服务器的性能来解决问题是不切合实际的,因为客户请求的增长速度总是远远超过服务器性价比提高的速度,较常见的解决方案是在一个网站中用大量的服务器来同时实现Web、FTP、DNS、E-mail和SSL等应用。如何让这些服务器能够平滑地提供服务?这就是负载均衡技术出现的主要原因。
一、解析负载均衡
---- 最早实现负载均衡功能的可能是DNS机制。DNS在Internet上就像一个电话号码本,它把域名映射成IP地址。当客户端向本地DNS发出一个查询域名地址的请求时,本地DNS就去Internet上找有权解释该域名的域名服务器,找到后,该域名授权域名服务器向本地DNS发回正确的IP地址,本地DNS再把IP地址告诉客户端。当有多台服务器的IP地址对应同一个域名时,授权域名服务器就用下面介绍的Round Robin算法把某一个IP地址发给本地DNS,从而在一定程度实现了负载均衡。
---- 一般说来,真正提供负载均衡技术的产品主要可以分为3类。
---- 第一类为负载均衡交换机,就是常说的4~7层的交换机,像Alteon、Arrowpoint和Foundry等。简单说来,有负载均衡功能的交换机是把传统的2~3层交换的功能扩展到更高层(其实就是既分析IP包头,又看包里的内容)。通常,因为基于交换的产品没有什么代码,又是基于ASIC的,所以交换机会提供较好的性能和较高的可靠性。
---- 第二类为基于PC服务器的产品,像F5、Radware和Intel等,这类产品在吞吐量和并发上会有性能的瓶颈。
---- 第三类为基于服务器端的代理性产品,这类产品是运行在每台服务器上的特殊软件,如IBM基于Unix和Windows NT上的负载均衡软件。由于软件是依赖于平台的,当服务器上装有别的软件时,可能会在可靠性及其他性能上有所下降。
---- 下面以交换产品为例分析负载均衡技术(如图1所示)。
上面这个图显示了负载均衡的基本工作原理: 给负载均衡设备设一个虚IP(VIP,Virtual IP),把它放在服务器群的前面。这个VIP就是向外界公布的地址,或者说是域名解析的地址。
---- 在这个例子中,我们希望负载均衡设备把所有的HTTP请求“均匀”地发给A、B和D服务器,把FTP请求发给A、C和E服务器,把DNS请求发给B服务器。当一个客户请求到达VIP的HTTP端口时,交换机把请求包的目的IP和MAC换成A、B和D服务器的IP和MAC(改换的依据是我们所选择的平衡算法)。当服务器的应答通过交换机时,交换机再把A 、B或D服务器的真实地址换成VIP,然后再转发出去。这样,管理人员可以随意的在服务器上增加服务,甚至随意地增加服务器。比较常用的负载均衡算法有4种,如附表所示。
一般负载均衡交换机还有一些锦上添花的功能。
管理员可以在交换机上给每个服务器设置一个最大链接数。这样当有大量请求涌入时,可以保证不会由于请求过多使得服务器一台一台地倒下。
负载均衡交换机可以做服务器级和应用级的健康检查。有的产品可以做到当一台服务器返回错误时,交换机可以根据错误代码把客户请求重新定向到另一台服务器上。
做负载均衡的服务器可以全部用内部IP地址,而负载均衡交换机做地址转换。显然,这样既提高了安全性,又方便了地址管理。
负载均衡交换机支持访问列表,并能根据TCP和UDP的端口过滤流量。例如我们可以限制只允许某些地址或子网的客户访问某些服务。
二、简单而典型的应用
---- 负载均衡技术有着广泛的应用。最常见的是Web的应用,其次有SSL、Firewall、FTP、DNS和E-mail等。
---- 1.Web的应用
---- 从图2所示的Web应用发展过程中我们可以看出,实现负载均衡最早使用的是单个服务器,到了中间阶段,开始引入数据库(物理上数据库与Web服务器连在一起),现在是负载均衡设备、Web服务器、数据库系统各自独立。
最初,一个网站配备一台服务器,内容全是静态的。经过发展,有了动态内容,出现了数据库,此时数据库和Web还在同一台机器上。随着数据量的增大,访问量的增大,Web服务器多了,数据库也成为一个服务器群。因此,依靠数据库技术可以做到大量数据的可靠存储,依靠负载均衡技术做到大量用户的并发访问。
---- 2. SSL的应用
---- 现在网络安全越来越受重视,传输敏感信息时大多用SSL加密。这样做的直接后果是,在电子交易时,服务器被SSL解密进程占用了大量的资源。据Intel公司提供的资料,当测试站点没有用SSL加密传输时,每秒并发支持357个链接,而当使用SSL加密传输时,每秒支持的并发链接数下降到3个。有些公司目前推出了SSL的加速器,把几个加速器串联起来放在服务器的前面,可以显著提高Web服务器的响应能力。
---- 与此同时,也有人用负载均衡交换机解决SSL的问题(如图3所示)。同样,VIP是设定在交换机上的,交换机在接到客户的请求时,把SSL加密的部分定向到专用的SSL服务器上解密。当解密完成后传给Web服务器处理。Web服务器的响应如需加密,交换机把响应传到SSL服务器加密,再发回客户端。
---- 3.Firewall的应用
---- 为了网站的安全,一般都要站点前放一个防火墙。但放置防火墙的同时也带来了一些问题,如单点故障、效率等。虽然许多防火墙也提供Failover的功能,但如果防火墙一坏就可以直接通过,那防火墙的意义何在呢?现有的许多防火墙都宣传能处理百兆、千兆的流量,但是当防火墙上的策略增加时,它实际处理的流量远远低于它的宣传值。
---- 负载均衡交换机提供这样一种应用——并列用多个防火墙,在防火墙的外面加一个负载均衡交换机,把从Internet上来的流量均分给多个防火墙,使多个防火墙同时工作(如图4所示),从而提高总的吞吐能力。大多数防火墙的策略是针对从外面进来的流量,所以防火墙内部可以不用负载均衡交换机。
三、最新趋势
---- 前面介绍的全是在本地如何做到负载均衡。现在明显的趋势是:比较大的站点都是由跨网络、跨地域的许多服务器组成的。形成这种局面的主要原因有2个,一个是高可靠性。当我们在一个地点采用负载均衡等技术后,在该地的工作我们已经做得很好了,但问题是如果这个地方的访问量大到超过设计容量、托管数据中心的Internet接入慢了或断了,那我们的站点就会受到影响。另一个是使客户能更快地访问到信息。我们在服务器端做了许多工作,响应能力很强。但由于Internet的延时,对客户的响应时间还有可能太长。
---- 如何做到跨网络、跨地域的服务器之间负载均衡呢?使用全球负载均衡Global Server Load Balance,GSLB)技术就可以做到。前面,我们曾介绍了用DNS做负载均衡,但采用DNS的缺陷在于它不能让用户去访问最近、最快的服务器。GSLB如何做到这一点呢?全球平衡设备就充当授权域名服务器的角色。它们互相通讯,根据各种参数智能地选择某个站点,答复本地DNS,而不是机械地给出列表上的下一个IP地址。
---- 用DNS框架解决GSLB有2个问题。首先,DNS解析会占用较长的时间,使对最终用户的响应时间变长。因为DNS的体系就是层次的,一般请求都要经过几个域名服务器后才会到达授权域名服务器,从而得到应答。其次,不同的GSLB产品使用不同的准则来确定客户端最终访问的服务器。通常,全球平衡设备是根据本地DNS的信息确定该选中哪个服务器。实际上,全球平衡设备见不到真正的客户端,只能见到转发解析请求的本地DNS。
---- 用DNS框架解决GSLB的一个好处是可以平衡各种类型的流量。如果是HTTP应用,GSLB产品可以用HTTP的重定向来确定提供服务的服务器,加速响应。客户端的请求发到全球负载均衡设备上,由全球负载均衡设备再把请求用HTTP重定向发到恰当的服务器上。这种方式的优点在于:首先,负载均衡设备直接与客户端链接,这样在重定向时可以有准确的信息来判断。其次,HTTP的重定向会节省时间。因为在这种方式下,只需要建立2个TCP链接,一个是从客户端到负载均衡设备,另一个是从负载均衡设备到真正提供内容的服务器。而DNS方式需要建立3个链接,一个是从本地DNS到平衡设备,一个是从平衡设备到客户端,还有一个是从客户端到真正提供内容的服务器。HTTP重定向的缺陷是很明显的:它只能平衡HTTP包,不能平衡FTP等流量,更别说音频、视频了。
---- 无论用哪种方法解决GSLB,都要确定到底是由哪个服务器最终响应客户请求。一般说来有5个准则:接近程度、响应时间/延时、丢包情况、本地服务器的负载和本地服务器的健康情况。前3个衡量网络链路的性能,剩下的2个表示单个服务器的性能和状态。
---- 大多数情况下,平衡设备都用客户本地的DNS服务器与应用服务器之间路由器的跳数表示接近程度。由于Cisco独特的技术,它可以根据BGP、IGP和OSPF等协议获得网络拓扑信息和路由信息,从而得知哪个应用服务器离客户端的本地DNS最近。另外一些产品允许手动设定接近程度。这个手段使得人们可以设定策略来限制某些流量流入到特定的网络上,比如由于国际链路很贵,能在国内访问的请求就可以限定在国内。
---- 对于响应时间/网络延时,大家一般是用Ping的方法测量从Web服务器到本地DNS之间的延时。由于不少产品需要等待Ping的应答,这在有些情况下等于增加了响应时间。Radware使用了一种比较好的方法,在首次测量一个Web站点的响应时间后,便把这个