[教学]服务器性能大比拼
服务器性能大比拼
作者: Larry Seltzer (TechUpdate)
Thursday, August 1 2002 3:25 PM
系统性能一直都是个复杂的话题,而牵涉到互联网了之后,情况就变得更加复杂。
当我第一次读Zeus关于它工作在HP的新的Itanium 2 Web servers上的网络服务器(Zeus Web Server)的技术文件时,我的第一感觉是CPU的运算能力只是网络服务器性能中的一个很小的影响因素。大多数的网络服务器在性能上都受到I/O能力的制约,也就是说,无论CPU数据处理速度有多快,数据都要排队等待在互联网上进行输入或者输出。
但是CPU也是非常重要的,至少对于SSL服务器是这样,这从Zeus的测试中可以看出来。 CPU处理一个SSL页的工作量要比一个普通未加密的静态页大得多。Itanium 2的基础设计非常适合整合SSL 中RSA加密/解密的数学代码,Itanium测试中使用的网络服务器使用了手工优化加密代码。这个测试是用来显示对CPU处理能力的影响的。 这个测试显示出Zeus和Itanium 2在和其他系统对比,在性能上有巨大优势。在测试中,使用的是经HP优化的Itanium,版本为Apache 2.0;Zeus运行在红帽子7.2(CPU为奔腾III 1.3GHz)上,Solaris 8运行在Sun Fire 280R(CPU为UltraSparc III 900MHz)上。它们是否象Zeus和HP所宣称的那样是同等平台呢?很难说,但是不同是非常明显的:HP rx2600仅用一个Itanium CPU每秒能完成751个SSL操作,而Sun 280R每秒仅完成了60次。所以如果你已经有了一个SSL站点(尤其是一个电子商务网站),使用这样的CPU来运行Zeus将会大大加快你的运行速度。(当然,Zeus只针对Unix,这些测试也没有包括微软的IIS--所以我们知道,一个IIS的版本的Itanium运行在Itanium上时,将会超过Zeus)有一天我们会看到这点。
上述的数据是由一个非常简单的HP开发的评测工具SSLPerf生成的。这个评测工具是开放源代码的,但是这个评测工具远远不是它所公布出来的源代码那么简单。它的测试程序里对与这个工具进行了更好的定义。(顺便提一句,这个工具中,客户在找回文件的操作时,使用到了一个开放源代码的程序--CURL工具)
但是我认为这个测试工具最有趣之处还不在于SSL,而是在操作系统程序设计方面。由于Zeus是只针对Unix的,人们经常把它和Apache,这个具有绝对垄断地位的Unix网络服务器相比。而Zeus却总是能技高一筹。
Apache的设计
Apache的设计,直到最近为止,对于获得高性能并没有什么帮助。Apache 1.x模式--在Apache 2.0仍然是默认模式--给每一个新的客户连接提供一个新的过程。这些过程规划起来非常清晰和容易,但是它需要耗占比较多的资源(CPU必须管理的数据)。
Apache 2.0增加一一种新的多线程模式,但是采用了一种比较简单的方式。它为每一个连接提供一个现成而不是一个过程。(如果想详细了解不同的Apache配置对性能的影响,请点击这里 )
Zeus采用了一种不同的方式,这种方式使得在同样的操作系统、同样的硬件条件下,能够获得与HP手工优化的Apache不同的性能。每个版本中SSL的部分--程序的关键路径--都是同样的。但当SSL被从图片中提出出来时,Zeus提供的吞吐量比在同样系统的Apache 2.0多出超过一倍。
这个区别在于Zeus采用了他们称之为“非模块化I/O多路复用器”,它包括一个机器和一个小的线程池,它的作用是在尽可能少地占用CPU资源的情况下,尽可能快地进行处理数据。
具有讽刺意味的是,“非模块化I/O多路复用器”基本上和“I/O完成端口(I/O completion ports)”是一样的,而“I/O完成端口”已经在Windows NT 和Windows 2000 Server上使用了差不多5年了。它们是微软互联网信息服务器的基础,也是为什么IIS经常成为性能测试中的杀手的原因。从我在Apache的网站上看到的情况来说,Apache 2.0在Windows上的处理模式没有采用“I/O完成端口”,但是我对此却不那么肯定。
Zeus/IIS模式能够胜过笨重的大型网络服务器的原因之一是在这个世界里有太多慢的客户和慢的连接。对于拨号上网的用户,一个对服务器的HTTP请求可能会非常缓慢,可能平均需要10秒钟。如果每一个请求都生成一个过程甚至一个线程,这种分配方式就使连接的速度变得很慢,服务器将很快在这么大的通信量下达到负荷的峰值。非模块化I/O多路复用器在服务器上减少了每个连接产生的通信量。这点在你看评测结果的时候一定要记住。他们在测试中是按照现实中的条件搭建的环境吗?他们的测试中是否包含了速度很慢的连接和低端的客户,还是只在局域网内用速度很快的客户机进行测试?
这些真的那么重要吗?重申一遍:如果网络服务器受到I/O能力的制约,那么上述的性能差别在真实世界里就会非常小。你自己的系统管理员可能已经意识到他们服务器的问题。但是如果你因为你的网络客户关心性能,那么你需要了解的不仅仅是Apache。