微型机与应用
MICROCOMPUTER & ITS APPLICATIONS
2000 Vol.19 No.2 P.31-33




Internet服务器簇技术
何丽天
摘 要： 对当前在Internet网络上实现的各种服务器簇技术进行了概述和一定剖析，并根据其各自的特点进行了比较，为以后的研究和应用工作提供了依据。
关键词： 容错 服务器簇 流量分配 负载平衡
　　随着网络使用的日益广泛和Internet技术的日益成熟，通过Internet获取信息已经成为人们的日常工作和生活中的一部分，许多站点都需要负载沉重的客户访问量，某些热门的Web站点甚至可以达到每秒上千次的点击次数。单网络服务器已远远不能满足客户的需求，经常的网络断线和服务器崩溃造成不能容忍的等待时间和数据重传，占据了大量的网络带宽。因此，网络服务器的存取速度和容错性能越来越受到人们的关注。为了解决上述的问题，人们开始采用多Internet服务器，通过服务器簇技术使它们对外采用同一个服务器名字和IP地址，从而保持对客户端应用的统一。
　　本文概述了当前在Internet上采用的各种服务器簇技术的特点，并对其优缺点进行了分析。
1 Internet服务器簇
　　从本质上说，服务器簇是1组通过网络连接起来的服务器，每1台服务器都存储相同的信息用于客户访问，所有的服务器对簇内使用不同的IP地址和服务器名，对外界的客户则采用单一的IP地址和服务器名。簇内的服务器可以位于同一个局域网内，也可以位于物理上分布于不同地区的广域网中。服务器簇中包含1个负载平衡器，即1台专用的计算机或1个专用的软件，用于将外界客户对服务器提出的服务请求均衡地分配到每1台有效的服务器上。如果发现某1台服务器失效，将会自动从服务器簇中切除。这样，就可以屏蔽服务器簇的内部结构和簇中的服务器故障，保持对外界客户的一致性和稳定性，从而达到快速反应和容错的目的。
　　服务器簇的特点： 
　　（1）服务器负载平均分配在不同的多台机器上；
　　（2）如果任意1台服务器失效，服务器簇将屏蔽其错误，并将客户请求分配到另1台有效的服务器上完成；
　　（3）服务器簇能够在不影响网络服务的情况下增加或减少服务器的个数； 
　　（4）除了Web访问之外，服务器簇应该能够提供其它的应用级服务。根据系统结构和负载分配方式的不同，服务器簇有多种解决方案。
　　根据其负载平衡器的位置不同，可以将它们分为二大类，一类是服务器端的负载平衡，另一类是客户端的流量分配。
1．1 服务器端的负载平衡
　　服务器端的负载平衡是使用专用的服务器端的负载平衡器，通过一定的规则，将客户请求均衡地分配到服务器簇中，并通过某些手段保持对客户端的透明和统一。
　　1．采用Round－Robin DNS算法
　　服务器可以通过DNS方式完成从域名到IP地址的转换。采用Round－Robin DNS，是按照Round－Robin DNS算法，动态地将各个服务器与不同的客户相匹配。当1个DNS服务器接收到某个客户的域名服务请求时，它将从簇内选择1个相匹配的服务器IP来响应。这样，所有的客户机就可以通过同1个服务器名来访问簇中的所有服务器，从而将负载均衡地分配到服务器中。但是，由于DNS服务器的层次结构，并且域名到IP的映射缓存在中间DNS服务器上，因此这种方法很容易导致流量分配的不平衡。其中，最难选择的是动态匹配的生存时间。如果生存时间太长，则分配的不平衡现象将会加剧，如果太短，则R－R DNS将可能成为瓶颈。另外，由于各类客户的访问方式不同，一部分客户可能需要下载大量的页面，而另一部分客户仅需浏览少量页面，也会造成分配的不平衡。当某个服务器失效时，还将造成客户反复访问它，不仅占据了大量网络带宽，而且最终将导致连接失败。
　　2．采用IP层调度算法
　　IP层调度是通过在IP层修改数据包的IP地址来实现客户机与服务器簇之间的通信。由于采用此方法的系统结构简单、易于实现，且对服务器簇外部网络的影响较小，所以人们在此领域进行了大量、细致的研究。

　　图1 网络地址转换
　　网络地址转换（NAT）就是一种IP层的调度方法，见图1。它通过对数据包IP地址的转换来实现对不同服务器的并行访问，并使它们对外表现为使用同1个IP地址的虚拟设备。其中，由负载平衡器负责将发向虚拟服务器的请求包的目的地址改为适当的服务器地址，并转发给此服务器，之后，再将该服务器返回的应答包的源地址改为原先的虚拟服务器的地址。
　　加州大学伯克立分校开发了“魔法路由器”。它使用专用的协议进行流量分配，能为1组等同的服务器提供1个容错的前端平台，不仅使服务器对外成为1个单机，而且可以屏蔽服务器簇内部的故障。当客户请求建立TCP连接时，“魔法路由器”采用3种算法选择服务器：Round－Robin、随机选择、增量负载。其中，前2种算法可以支持自行扩展，第3种算法则要求额外的服务器信息，包括对服务器当前负载的估计值和每1个TCP连接的负载调度。一旦为当前的客户请求选定了服务器，“魔法路由器”将在地址转换表中增加此匹配方式，直至客户的TCP连接终止才删除匹配。对服务器的故障检测有2种方法：一种方法是由“魔法路由器”定时向所有的服务器发出ARP请求，看服务器的响应是否超时；另一种方法是当发现服务器使用服务端口返回了TCP复位信息时，认为该服务器失效。“魔法路由器”将自动屏蔽簇内的服务器故障并保持对客户的透明。 
　　Cisco公司则使用自行开发的“本地导向器”来进行服务器间的流量平衡分配。“本地导向器”基于TCP／IP协议，选择服务器簇中的合适服务器响应客户请求，可以屏蔽服务器的数量增减和服务器的故障。另外，“本地导向器”在物理上实现冗余，从而保证了整个服务器端的容错。
　　IBM公司开发的“TCP路由器”是一种改进的NAT。客户是通过对服务器簇端的路由器的地址的访问来实现对簇内服务器的访问。当客户数据包到达路由器时，它在考虑负载平衡的基础上将客户请求分配给1台合适的服务器，并将客户数据包的目的地址改为该服务器的地址，然后，为了实现无缝的TCP连接，选中的服务器将使用路由器的地址进行应答。“TCP路由器”的缺点是，必须修改每台服务器上TCP／IP层的核心代码，以使它们使用路由器地址而不是本机地址应答。
　　得克萨斯大学的研究者们在NAT的基础上使用了另一类IP调度算法，统称为“单IP簇技术”。服务器簇通过1台路由器连接到Internet上，簇内所有的服务器都拥有自己的IP地址，并通过Unix操作系统的别名机制共享1个IP地址作为它们的第2地址，称为簇地址，并作为公共的DNS地址。所有的外部客户的访问都将发送到簇地址上，并由所选定的1台服务器通过它的第2地址来处理。对于每1个TCP连接，都通过一定的hash算法将客户IP映射到某1台服务器上，以使它处理本次客户连接的所有服务。当客户发送的服务请求到达路由器时，将采用2种机制进行流量分配。一种方法是基于路由的，即服务器簇使用1个“虚幻 IP”作为簇地址，路由器上的路由表将“虚幻 IP”与分配器相匹配，则路由器根据路由表将接收到的数据包发送到分配器，分配器通过hash算法选定1台服务器，之后该服务器将使用自己的第2地址，即簇地址进行应答。另一种方法是基于广播的，路由器将到达的数据包广播给每1台服务器，同时，每1台服务器都拥有1个唯一的ID号，并运行1个小的过滤程序。所有服务器都将接收到的广播包中的客户源地址提取出来，对它进行过滤后将结果与本机的ID号相比较，如果相同则交由上层处理并使用“虚幻 IP”应答客户，否则丢弃，从而保证了只有1台服务器处理了该数据包。簇中的服务器将由1个后台运行的监测器进行监测，发现故障时监测器将修改位于路由器上的分配器的hash算法或位于每1台服务器上的过滤算法，以屏蔽故障。“单IP簇技术”的1个优点是它不需要修改应答数据包的源地址，从而简化了占据大量网络带宽的应答包的处理过程，不影响系统的效率。
　　我国国防科大的并行与分布式国家实验室也在此领域进行了自己的研究与探索，提出了基于NAT的虚拟服务器和基于IP隧道的虚拟服务器2种方案。这2种方案都是在客户与服务器簇之间增加1台机器作为负载平衡器，再通过交换机或路由器与服务器簇相连。其中，基于IP隧道的技术是负载平衡器将接收到的客户数据包重新封装在1个新的IP包中，并以选中的服务器地址作为新IP包的目的地址发出。选中的服务器接收后进行解包，去除新IP包头和原IP包头，并直接应答客户，见图2。负载平衡器可以使用4种方法选择服务器：Round－Robin算法、加权Round－Robin算法、最小连接数和加权最小连接数。系统的高效性由对节点和后台程序的鼓掌检测来完成。其中，运行于负载平衡器上的后台“mon”程序用于监视系统资源的有效性，如fping．monitor每隔t秒钟检测1次服务器节点是否正常，http．monitor检测http服务是否正常。另外，为了不使负载平衡器成为单点，可以使用1台服务器作为它的备份，由“mon”监视负载平衡器的状态，并在它失效时，由“fake”程序通过IP欺诈的方法，完成备份负载平衡器对原IP地址的接管。采用IP隧道技术的好处是负载平衡器只处理客户请求，因此不会成为瓶颈，而具体的响应由服务器完成，并不需要修改服务器的核心代码。其缺点是服务器端的软件系统必须支持IP隧道技术，如Linux可以支持，而NT则不支持。

图2 IP隧道技术
　　3．采用应用层调度算法
　　应用层位于网络结构的最高层，基于应用层的调度算法一般是对客户的HTTP请求进行分配，交由合适的服务器处理。当1台被请求的服务器忙时，它将通过HTTP协议的重定向信息交由另1台服务器完成。
　　瑞典爱立信公司的Eddies系列产品中包括负责负载平衡的DNS服务器、通用服务器结构、IP地址转向机制和内容复制机制。其中，DNS服务器通过一定的方法获取每1个与之相连的LAN的当前状态，如是否正常工作、负载情况如何等等，在将请求服务的客户与1台服务器相匹配之前，DNS服务器使用这些信息进行衡量，并选择1台响应时间最小的服务器。
　　SWEB是一种多处理器Web服务器。它是基于Web的网络信息，通过采样和预测等方法获取相关节点的效率，以最好地满足客户请求。另一种改进是采用2层的主／从调度结构来构建Web服务器簇，通过将静态和动态内容的处理过程分离开（如将一些低负载的请求送到远程服务器执行），来保证客户请求的实时性，并实现动态资源配置和失效节点的管理。同时，为了更好地提高系统效率，SWEB＋＋软件工具还对Web应用的内容进行分类，在考虑客户机能力的基础上进行适当的调度和负载平衡，从而优化了客户和服务器两端的资源。另外，通过缓存动态内容的访问结果，还可以大大优化Web服务器的平均响应时间。
1．2 客户端流量分配
　　客户端流量分配要求每1台客户机清楚地知道服务器簇的系统结构，并能够以1种负载平衡的方式将服务请求发送到不同的服务器上。 
　　Netscape浏览器就使用了客户端分配技术，在访问其公司主页时，能够随机地选取1个从1～32的整数N，并将服务请求发送到wwwN．netscape．com。但是，大多数公司是不能采用这种方式的，因为他们不可能专门为本公司站点的负载平衡而修改通用的浏览器。
　　加州大学伯克立分校在内部网中开发了1种称为“智能终端”的技术。当用户访问服务器时，他们的终端将自动发送出2个相互合作的Java小程序，1个是用于提供用户接口的客户端接口程序，另1个是导向程序，用于屏蔽具体完成响应任务的服务器的细节。客户端接口程序包括用户的输入信息和发向导向程序的任务请求，导向程序中包含服务器簇的详细信息，它将根据簇内的各个服务器的当前状态和负载情况自行选择1个负载最小的服务器来响应请求。导向程序中的信息随着用户应用程序的不同而变化，例如，当用户发出FTP请求时，从FTP服务器镜像站点中选择1个提供FTP服务。这种“智能终端”的实现关键是用户终端上的导向程序必须清楚地知道可以提供相应服务的服务器簇的内部结构。
　　波士顿大学也开发了1种运行于客户端的通过探测带宽来动态地选择服务器的技术。实现这种技术的前提是客户端预先知道可以提供所需服务的所有服务器的地址列表，而不需要预先知道服务器的位置或网络连接方式。客户机通过“跳”数或回环延迟时间的比较，来选择最适合的服务器响应服务。
2 总 结
　　当前，在Internet上为了给用户提供更多、更可靠的资源，增加网络带宽，提高访问的效率，减小响应时间，已大量采用了服务器簇技术。其中，由于客户端的流量分配方案需要预先知道包含相同资源的站点镜像，并必须修改客户机上的浏览器，所以应用得不太广泛。大多数服务器簇是在服务器端进行负载平衡，其中，由于采用IP层调度的软件系统结构清晰，实现较为方便，且能够直接被如Unix、Linux这样的操作系统所支持，以广泛地成为各种服务器簇技术的应用趋势。
何丽天（武汉数字工程研究所430074）
参考文献
1，Anderson E，Patterson D，Brewer E．The Magicrouter：an Application of Fast Packet Interposing．http／／www．cs． berkeley．edu／eanders／magicrouter／，1996；（5）
2，Damani Om P，Emerald Chung P，Huang Y．ONE－IP： Techniques for Hosting a Service on a Cluster of Machines．http／／www．cs．utexas．edu／users／damani／，1997；（8）
3，Zhang Wensong，Jin Shiyao，Wu Quanyuan．Creating Linux Virtual Servers．http／／proxy．iichina．net／wensong／，1999；（2）
4，Yoshikawa C，Chun B，Eastharn P，Vahdat A，Anderson T．Culler D．Using Smart Clients to Build Scalable Services．USENIX＇97，http／／now．cs．berkeley．edu／，1997
收稿日期：1999－10－25
