基于内容的请求分发

附件大小
Image icon layer-7-app.jpg12.35 KB
Image icon cbrd-advantage.jpg25.99 KB

根据应用层(Layer-7)的信息调度TCP负载不是很容易实现,对于所有的TCP服务,应用层信息必须等到TCP连接建立(三次握手协议)以后才能获得。这就说明连接不能用Layer-4交换机收到一个SYN报文时进行调度。来自客户的TCP连接必须在交换机上被接受,建立在客户与交换机之间 TCP连接,来获得应用的请求信息。一旦获得请求信息,分析其内容来决定哪一个后端服务器来处理,再将请求调度到该服务器。

现有两种方法实现基于内容的调度。一种是TCP网关(TCP Gateway),交换机建立一个到后端服务器的TCP连接,将客户请求通过这个连接发到服务器,服务器将响应结果通过该连接返回到交换机,交换机再将结果通过客户到交换机的连接返回给客户。另一种是TCP迁移(TCP Migration),将客户到交换机TCP连接的交换机端迁移到服务器,这样客户与服务器就可以建立直接的TCP连接,但请求报文还需要经过交换机调度到服务器,响应报文直接返回给客户。

就我们所知,Resonate实现了TCP迁移方法,他们称之为TCP连接跳动(TCP Connection Hop),他们的软件是专有的。TCP迁移需要修改交换机的TCP/IP协议栈,同时需要修改所有后端服务器的TCP/IP协议栈,才能实现将TCP连接的一端从一台机器及其迁移到另一台上。Rice大学和IBM的研究人员简要地描述了它们的TCP Handoff Protocol,在交换机和后端服务器上安装TCP Handoff协议,交换机获得客户请求后,通过TCP Handoff协议将TCP连接的交换机端转给后端服务器。但是,他们没有提供任何其他文档或研究报告描述他们的TCP Handoff协议和实现。他们提出的提高局部性调度算法LARD只考虑静态文档。虽然在交换机获得客户请求后,TCP迁移方法比较高效,但是该方法实现工作量大,要修改交换机和后端服务器的操作系统,不具有一般性。

因此,TCP网关方法被绝大部分Layer-7交换的商业产品和自由软件所使用,如ArrowPoint的CS-100和CS-800 Web交换机(Web Switch)、Zeus负载调度器、爱立信实验室的EDDIE、自由软件Apache和Squid等。TCP网关方法不需要更改服务器的操作系统,服务器只要支持TCP/IP即可,它具有很好的通用性。但是,TCP网关一般都是在用户空间实现的,其处理开销比较大,如图6.1所示。



图6.1:用户空间的TCP Gateway

从图中我们可以看出,对于任一TCP请求,客户将请求发到交换机,计算机将请求报文从内核传给用户空间的Layer-7交换程序,Layer-7交换程序根据请求选出服务器,再建一个TCP连接将请求发给服务器,返回的响应报文必须先由内核传给用户空间的Layer-7交换程序,再由Layer-7交换程序通过内核将结果返回给客户。对于一个请求报文和对应的响应报文,都需要四次内核与用户空间的切换,切换和内存复制的开销是非常高的,所以用户空间TCP Gateway的伸缩能力很有限,一般来说一个用户空间TCP Gateway只能调度三、四台服务器,当连接的速率到达每秒1000个连接时,TCP Gateway本身会成为瓶颈。所以,在ArrowPoint的CS-800 Web交换机中集成了多个TCP Gateway。

虽然Layer-7交换比Layer-4交换处理复杂,但Layer-7交换带来以下好处:

  • 相同页面的请求被发送到同一台的服务器,所请求的页面很有可能会被服务器缓存,可以提高单台服务器的主存Cache使用效率。
  • 一些研究[94]表明WEB访问流中存在空间的局部性。Layer-7交换可以充分利用访问的局部性,将相同类型的请求发送到同一台服务器,使得每个后端服务器收到的请求相似性好,有利于进一步提高单台服务器的主存Cache使用效率,从而在有限的硬件配置下提高系统的整体性能。
  • 后端的服务器可运行不同类型的服务,如文档服务,图片服务,CGI服务和数据库服务等。


图6.2:基于内容的请求分发

图6.2举例说明了基于内容请求分发可以提高后端服务器的Cache命中率。在例子中,一个有两台后端服务器的集群来处理进来的请求序列AACBAACABC。在基于内容的请求分发中,调度器将所有请求A发到后端服务器1,将请求B和C序列发到后端服务器2。这样,有很大的可能性请求所要的对象会在后端服务器的Cache中找到。相反在轮叫请求分发中,后端服务器都收到请求A、B和C,这增加了Cache不命中的可能性。因为分散的请求序列会增大工作集,当工作集的大小大于后端服务器的主存Cache时,导致Cache不命中。

在基于内容的请求分发中,不同的请求被发送到不同的服务器,当然这有可能导致后端服务器的负载不平衡,也有可能导致更差的性能。所以,在设计基于内容请求分发的服务器集群中,我们不仅要考虑如何高效地进行基于内容的请求分发,而且要设计有效的算法来保证后端服务器间的负载平衡和提高单个服务器的Cache命中率。

Comments

I'm imesesrpd you should think of something like that

Going to put this arclite to good use now. http://xnfaqyzzeta.com [url=http://rguleompp.com]rguleompp[/url] [link=http://ihwogaixade.com]ihwogaixade[/link]

I'm so glad that the inerentt allows free info like this!