大型门户网站的web代理服务器解决方案
有一家中国著名的门户网站,每天为数以百万计的用户提供新闻,生活,娱乐等使用信息。他们的web基础架构由许多不同的“频道”组成,提供基于web和手机短信的交流服务;每个“频道”包含数个“子频道”,涵盖内容丰富。
有一家中国著名的门户网站,每天为数以百万计的用户提供新闻,生活,娱乐等使用信息。他们的web基础架构由许多不同的“频道”组成,提供基于web和手机短信的交流服务;每个“频道”包含数个“子频道”,涵盖内容丰富的新闻,商业,娱乐和体育信息。
该网站原先的web代理结构如下图所示:

图1:WebProxy架构
每个“频道”由一个或多个运行Apachewebserver的服务器组成,并且由前端的多台运行Squid软件的服务器提供gateway服务。这些服务器都基于x86芯片,运行Linux操作系统。
一台独立的RoundRobinDNS服务器用来记录和统计Squid代理服务器的系统状态统计信息,这些统计信息同时作为实施Squid服务器之间负载均衡(loadbalancing)的依据。
该方案的主要问题在于系统的可靠性(reliability)和可扩展性(scalability)。网站规模的日益壮大对单个系统的可扩展性和吞吐性能提出了更高的要求。同时,降低总体拥有成本(Total CostofOwnership),维护成本,功耗和机房占地也成为了重要的考量因素。概括而言,新的系统方案必须达到实现以下目标:
●系统可用性和可靠性得到提升
●能满足未来网络流量的高可扩展性
●低总体拥有成本
●系统性能状态信息的可管理性
Sun的方案
基于UltraSPARCT1处理器的CoolThreads服务器,Solaris10操作系统,SunJavaSystem WebProxyServer软件将组成一个极具竞争力的Web代理方案。相比较Squid软件而言,Sun JavaSystemWebProxyServer是多线程的设计,可以充分利用UltraSPARCT1处理器的芯片级多线程(CMT)能力,从而提供给系统更高的吞吐,服务更多的并发用户请求。
SunCoolThreads™服务器
基于UltraSPARCT1处理器CoolThreads技术的服务器系列,比如SunSPARCEnterprise
T1000和T2000,统称为CoolThreads服务器。这款UltraSPARCT1处理器在一个CPU当中集成6-8个4线程的核,使得单个CPU在相对很少的功耗下可以同时运行24-32个线程。这样的设计特别适合Web环境下高并发的应用,提供高性能的同时降低了功耗,节省了机架空间。(如下图)

Solaris™10操作系统
Solaris10操作系统本身就是Sun公司为芯片级多线程(ChipMultithreading)技术所设计的。除了众所周知的健壮性和出色的性能之外,Solaris10现在能够充分利用UltraSPARCT1处理器的CMT能力,为高并发多用户的应用提供更加出色可扩展能力。
Solaris10在高级别安全性,大规模扩展性,高性能网络,数据管理,互操作性,高可用性等领域集成了丰富的功能。和前一版本相比,Solaris10在多线程处理,内存分配,文件系统,TCP/IP协议栈上作了巨大的提升。随着SolarisContainer功能的推出,将多台服务器上的应用整合到一台机器上变得更加安全。Solaris可预测性自愈能力则大大提升了系统的可靠性,降低了维护成本。另外,Solaris10还加入了功能强大的动态跟踪工具DTrace。对任何在线的生产环境进行调试和优化将从此变得安全,高效。
值得一提的是,随着Solaris的开源,将会有更多领域的软件爱好者一起来研究Solaris,提高它在各种崭新领域的可用性。
SunJava™SystemWebProxyServer软件
和其他web代理服务器一样,这款软件主要对web内容做缓存和过滤。通过对经常被访问内容的缓存,减少了网络带宽使用和目标web服务器的CPU时间,从而用户响应时间显著地缩短。另外,通过访问控制和内容过滤,这款软件能够加强网络的安全性。
SunJavaSystemWebProxyServer采用了高度模块化的设计。这使得它在运行于对称多处理器(SMP)或者芯片多线程(CMT)服务器上的时候能够充分体现出多线程和高可扩展性的优势。
在单个进程内部同时处理大量并发请求的能力帮助web应用从容应对高峰时候的网络负载。
这款软件的架构包含三大类线程,各自处理专门的任务。

图2:可扩展的软件架构
●Acceptor线程
●Worker线程
●Poll线程
Proxy服务器为每个进程(proxy实例)管理两套队列:Connection队列和Poll队列。Acceptor线程接受访问请求,并将它们放入Connection队列;Worker从Connection队列里取得待处理请求,借助HTTP引擎进行处理;Poll线程将那些需要保持更新(Keep-alive)的任务重新放入Connection队列排队,等待被在一次处理。
这些不同种类的线程数量可以被配置文件定义,满足不同网络流量下的可扩展要求。
评测
我们在实验室和真实网络两种环境下,考察了SunSPARCEnterpriseT1000服务器上跑Sun JavaSystemWebProxyServer的性能情况。实验室环境下,我们使用了WebPolygraph评测工具。真实环境的测试基于客户生产环境下的概念验证(ProofofConcept)测试。
实验室模拟环境评测
WebPolygraph是一个开源的基准测试工具,被广泛地用来测试代理服务器,网络加速器,L4/7交换,内容过滤等Web应用软件的性能。

图3:模拟测试环境
测试环境如上图所示,一台SunSPARCEnterpriseT1000服务器上运行Solaris10操作系统和SunJavaSystemProxyServer4.0.4软件。这台服务器配置了8核的UltraSPARCT1处理器,可以支持32个并发线程。内存配置为8GB,其中4GB被Proxy软件保留作为缓存。
有4台机器用来向被测代理服务器发送模拟的网络负载。它们通过一个千兆以太网交换机和被测机器组成一个单独的子网。每一台测试机通过运行Polygraph的客户端程序PolyClt,来向被测机发送web访问请求;其中一台测试机同时运行服务器端程序PolySrv来模拟后端Web服务器。
网络负荷被模拟成尽量接近真实环境下所观察到的模式:每个访问内容对象以13K为平均大小,呈指数化分布;所有的对象都可以被缓存,生命(更新)周期为2分钟。测试没有激活保持更新(keep-alive)的功能,所有的访问请求会产生一个新的TCP连接。这样的设计保证了和真实环境最大限度的吻合,proxy服务器得到足够的压力,为性能测试提供准确的数据。

图4:SunJavaSystemWebProxy测试结果
SunJavaSystemWebProxy的测试结果如上图所示,性能差不多到达了每秒钟处理8000个请求。由于千兆以太网交换机达到了满负荷,我们没有进一步加大测试负载。然而通过我们进一步的考察发现,在交换机满负荷情况下,被测代理服务器仍有30%的CPU空闲时间。可以设想,如果网络瓶颈不存在,被测服务器的性能数据应该有更高的提升空间。

图5:SquidWebProxy测试结果
Squidwebproxy软件的测试跑在一台基于IntelXeon双CPU,8G内存,运行RedHatLinux操作系统的服务器上。除此以外,所有测试环境的设备和前面测试相同。Squid2.5和Squid 2.6两个版本都进行了测试。
Squid软件只有一个单线程用来处理HTTP请求,一次只能处理一个请求。新的Squid2.6版本增加了新的事件处理机制,力图在占用更少的CPU开销的情况下处理更多的并发请求。
考虑到Squid在并发处理上的不足,我们甚至还做了进一步的尝试:同时开启两个Squid2.6的进程(实例)。初步的结果显示,每秒钟6000个请求处理可以达到。但是,多个独立的Squid进程带来了明显的缺点:缓存内容在多个Squid实例之间不能被共享。也就是说,某些内容请求潜在地被多个Squid实例重复缓存,浪费了内存和宝贵的CPU处理时间。相比较而言,SunJavaSystemWebProxy在单个实例中可以线性地扩展。这完全得益于软件本身多线程的设计和对UltraSPARCT1处理器的CMT能力。
相比较两者而言,SunJavaSystemWebProxyServer在达到更大吞吐能力的情况下,提供了更快的响应时间:前者在达到每秒钟7500个处理请求的同时,响应时间为15.65毫秒;后者在达到每秒钟4500个处理请求的时候,响应时间为600毫秒以上。
真实环境评测
用户真实环境下的测试使用SunSPARCEnterpriseT2000服务器跑单个SunJavaSystemWeb ProxyServer实例。该服务器配置了8核UltraSPARCT1处理器,8GB内存,运行Solaris10操作系统。
测试过程中,这台T2000服务器负担了大约4倍的其他运行Squid2.5的x86服务器的网络负载。峰值情况下,T2000服务器的CPU占用率也仅为35%。在三个多月的概念验证(POC)测试过程中,T2000经受了相当于平均负载2-5倍的峰值负载考验,没有发生任何宕机。而同样环境下的其他x86服务器却必须保持10-20%的CPU空闲,以防峰值负载下系统发生崩溃(crash)。
此次POC清楚地显示出SunSPARCEnterprise服务器,Solaris10操作系统,SunJavaSystem WebProxyServer软件所组成的解决方案在性能和可靠性方面体现出的巨大优势。
结论
实验室模拟环境和真实生产环境下的评测都显示,Sun的解决方案相比基于x86,Linux和Squid的流行方案在性能和可靠性以及可扩展性方面的优点。从硬件到操作系统到上层软件的高度多线程设计,使其成为一个不折不扣的领先的网络代理服务器解决方案。
Sun的方案相比Squid方案提供了高得多的吞吐能力以及更快速的响应时间;Sun的硬件和软件栈(softwarestack)显示出一如既往的稳定,三个月的测试过程没有一次宕机。
在满足苛刻的性能需求的同时,Sun的方案仍然为未来的潜在需求提高了提升的空间。生产环境下把多台x86服务器的负载倒换到一台SunT2000服务器上,体现了整合的优势。因为通常来讲,单台系统要比多台系统更易于管理;能耗和占地也将显著降低。体现了Sun公司在更低的能源消耗和空间占用情况下,提供更高性能更高可扩展性计算能力的一贯承诺。
文章作者:杨云
集成系统网络情报信息数据库
CIO频道人物视窗
CIO频道方案案例库
大数据建设方案案例库
电子政务建设方案案例库
互联集成系统构建方案案例库
商务智能建设方案案例库
系统集成类软件信息研发企业名录

