服务器 频道

IIS vs.Apache:你选哪种WEB服务器

      【IT168专稿】Apache 和微软一直占据着Web服务器市场的最大份额。在Netcraft和Security Space的月度调查中,Apache是最大的赢家,而IIS(Internet Information Server)则在财富1000强的企业中有着巨大的影响力。

    可以说,两者都是不错的选择,但是它们也各自存在着优缺点。2002年中,Apache 2.0投入使用,而在2003年初,IIS 6.0也随即问世。下面我们逐一比较一下这两种服务器软件的性能,以便读者们更容易根据自己的需要来决定采购哪种软件。

IIS 6.0和Apache 2.0 概述

    在Windows NT 4.0 发布后不久,微软公司发布了一个含有IIS 4.0的选项包,这个选项包是IIS作为一种Web服务器平台大量被使用的开始。自此,IIS就成为Windows Server 操作系统的一个常规的可选组成部分。

    Windows 2000的服务器和桌面版本中包含了IIS 5.0,升级版本IIS 5.1则被添加到了Windows XP当中。其实,IIS 4 和IIS 5的区别并不大。

    IIS 6.0 出现在了Windows Server 2003中,与之前的版本相比,IIS 6.0的改进非常显著。它使用了一种全新的执行模式,拥有更完善的管理功能并且极大的改进了运行效率。

    我们再来看看Apache。它拥有更古老的历史,最初基于httpd代码,有些人认为它的出现掀起了整个Web行业的革命。直到2002年才投入应用的Apache 1.3.x很大程度上讲是一种针对Unix的产品,但是通过一些方法,它也可以在包括Windows在内的其它操作系统平台上运行。

    2002年,Apache 2.0横空出世。这一新的版本融入了一种崭新的执行环境,它将Apache系统的核心功能与实际支持和处理各种请求的操作系统相分离。现在很多操作系统都可以支持Apache 2.0,包括所有版本的Windows、Linux、Unix和Mac OS X,此外,还包括一些像BeOS和VMS之类的非主流操作系统。

执行环境:针对何种操作系统

    IIS和Apache的运行原理互不相同,因此它们各自都存在诸多的优势和劣势。IIS很明显是为Windows环境而设计的,也只能在Windows环境下运行。目前,可支持IIS 6.0的唯一平台就是Windows Server 2003。虽然这限制了基于IIS 的Web 服务可部署的平台数量,但它也有着诸多优势,比如能更好的与宿主操作系统进行协作,更易于管理,能够通过多种标准OS工具和设备进行控制等等。

    在IIS 6.0中,操作系统和服务器间的协作性能比以往任何一个版本都更为强大。与之前版本不同的是,IIS 6.0 中接受客户端请求和处理请求是两个相互分开的部分。作为内核模式驱动程序的HTTP .sys倾听并接受客户端的请求,并将这些请求放置在一个或者多个请求列队里。之后,IIS采用至少一个工作器(worker process)来处理这些列队中的请求,并对每个请求和应用的执行过程进行控制。

    这种分开的处理方式允许系统在IIS工作器不能正常运行的时候也能接受客户的请求,并且能够对处理请求的工作器进行更好的控制。因此,管理员(或者服务器自动)便可以将这些请求循环来恢复扩展和应用程序的错误。在之前的版本中,这一过程通常要关闭/重启IIS服务,极端的情况下,还要重启整个服务器。

    Apache 2.0相对之前的版本也进行了很大的修改,其中最重要的一个改进就是Web服务器现在可以直接支持多种操作系统平台,包括Windows。这种改进使得Apache 2.0 能够通过多种方式有效地支持广泛的平台,从而最大化地利用操作系统的资源。

    Apache 2.0的核心就是APR(Apache Portable Runtime),它可以通过一个C 编译器使Apache内核运行在几乎所有的系统上。然后由一系列多处理模块(MPM,multi-processing module)支持接受请求和处理请求。在Unix环境下,它可以是传统的“叉形”模式("forked" model)或者后来出现的线程化模式(threaded model)。而在Windows环境下,它仍然使用线程化模式,从某些方面来看,它与IIS 6.0中工作器所使用的线程化模式很相似。

开发环境和语言

    在IIS中,开发所使用的主要动态环境是ASP (Active Server Pages),它允许开发人员将代码嵌入HTML页面。这些ASP页面在以HTML形式提供给客户端之前先由WEB服务器解析。ASP系统允许开发人员用诸多不同的语言进行工作,其中包括Visual Basic、 VBScript、 JavaScript、 Java、 以及 C/C++,还包括其它开源的语言,比如Perl 和 Python。除此之外,IIS继续支持传统的CGI模式以及其自身具有的一套过滤和执行系统。

    Apache同样也支持多种工作语言,不仅包括CGI模式,还包括使用动态模块,这种动态模块能够直接在Apache 环境内植入语言翻译器,从而极大地提高了应用多种语言的执行速度,比如:PHP, Perl, 以及 Python。

    另外,这两种系统均可以支持Java服务器页面模式,也可以在不做大的改变的情况下在两个平台间迁移大多数的JSP应用程序。通过ChilliSoft ASP (www.chillisoft.com)、Apache::ASP 模块或者Apache modmono 模块 (http://apacheworld.org/modmono/),甚至ASP也可以在Unix环境下运行。

    目前在Unix下还不能效仿的一项就是Microsoft.NET环境。而IIS 6.0 和Windows Server 2003应用广泛且能够与.NET架构实现完美的集成。

安全

    IIS的优势在于能够与操作系统实现紧密地集成。相同的用户和组配置系统在Windows内支持验证系统的运作,它们同时也为主IIS系统提供安全和验证服务。由于它只支持一个系统,所以能够降低管理成本,此外,系统管理员也可以通过企业内部网络,让用户自动登录,系统将假定这些用户在Windows环境下已经通过验证。

    由于整个OS都采用相同的操作系统,因此它也可被用来定义安全标准以及访问网络所依赖的不同的文件系统。比如说,当一名用户登录了一个网站,他在该网站内浏览目录的权限是由一套用户和组结构确定的。

    Apache的安全和管理系统在与它所支持的操作系统之间的集成性能就没有这么好了。虽然它具有支持多种不同验证和安全源的模块和编译器,比如:动态目录(Active Directory)、Unix 密码文件, 以及LDAP服务器,但resulting server与它支持的系统之间还是相对分离的。举个例子,当一位用户通过了Unix 密码文件验证,Apache仍然会在底层文件系统上忽略该文件许可。

    从安全处理角度来看,两种系统都支持SSL中的加密技术,而且都可以与IPSec和IPv6一同使用。

性能

    测量一个系统的运行性能通常都是很困难的,这是因为无论被测试的系统是多么相似,细小的配置改变都可能会极大地影响运行性能。在相同的硬件条件下,我们对两个系统进行标准安装,然后从中挑选一个性能较佳者是可能的。公平起见,我们应该分别配置一个Apache系统和一个IIS系统,使它们以高效率或者低效率来运行,然后再对比两者之间的性能差异。

    此外,我们还要看看两种系统的潜在性能。IIS融入了多种特性来改进其性能。工作器程序执行模式能够显著的改进运行质量,尤其是对多处理机。而ASP和ISAPI扩展使应用程序能够直接从处理请求的过程开始运作。内核模式驱动器、HTTP.sys也可以帮助静态以及动态的应用程序直接从存储器(内存或者磁盘)为页面提供服务,这样就减少了发送请求到工作器程序的需要。IIS自动隐藏了从动态程序产生的页面来加快反应速度。

    再来看Apahce,它同样提供了多种工具,许多信息都能进行隐藏,而且像mod_perl 和 mod_php这样的工具帮助动态的模版页面执行速度和静态页面几乎一样快。与IIS中的ASP和ISAPI过滤器一样,该模块有效的将解释程序直接配置在Apache内,从而减少了多运行一个外部应用程序的需要,极大地改进了运行效率。

管理

    在管理方面,两种系统的区别就相对明显得多。管理Apache的唯一方法就是要使用一种简单的文本配置文件。虽然有很多的命令行、Web和GUI界面工具可用,但是它们均需要依赖中央的文本文件来更新配置信息。比如Comanche,它为Apahce系统提供了完善的界面。你可以访问gui.apache.org来查看可选GUI列表,其中包括独立的以及基于网络的。

    使用这种文本文件自有其优势。用户很容易在不同机器之间共享配置信息,只需要在文本文件中复制相关的内容即可。主要的缺点是,文件很容易被损坏,进而扰乱配置。必须进行“软”重启,否则Apache就不能升级这些配置,因此,在重启Apache 之前,管理员必须确保配置文件的正常运行,这个过程可以通过使用一种嵌入测试装置来完成。

    IIS则提供了一些不同的界面来修改系统的配置。虽然基础配置主要存储在一个基于XML的文本文件中,但是IIS 系统能够帮助管理员在保持系统运行的情况下改变该配置和基础文件。文件是XML格式,具有更加刚性的结构,但是它还是能够灵活的支持不同的配置选项。Windows Server 2003添加了一个远程连接服务器来实现远程支持。远程连接服务器能够保持XML Metabase处于可更改状态,而且允许使用各种命令行工具进行远程服务器管理。

    可使用的编辑界面包括:采用Microsoft管理控制台的GUI界面,基于Web的管理系统以及一套能够添加、升级和配置不同应用组件的命令行。管理员也可以实时编辑XML文件并且在IIS系统内自动保存更改。XML格式使设备间输出和输入配置信息变得更简单,进而帮助设备之间共享配置信息。

可靠性

    最后关于可靠性的比较可能是最具争议的。根据笔者的经验来看,两者最新的版本之间区别甚微。在实验室,一台Windows Server 2003从2003年1月起就一直运行IIS,8个月内没有发生故障。不需重启服务器便能完成所有必要的升级。而Apache/Solaris 8 也保持了335天无故障运行。

    除了工作器处理程序来控制大部分的请求之外,IIS 6.0现在提供了更广泛的管理和控制工具。为了提高可靠性,IIS也能够对应用程序进行划分,给每个应用程序自己的内存和执行空间,或者让它们共享一个空间。这就意味着,当一个应用程序出现问题,它不会影响其他应用程序或者请求处理内核。

    Apahce能够自动处理许多程序和线程管理方面的问题,但是内存和应用程序隔离仍然是一个还没有被有效解决的问题。Apahce 通过自动的循环各种要素来避免这样的问题,即时其中一个要素出现了严重的故障,内核仍然继续运行,严重的情况,Apache可能需要重启。

    其中一个例子就是Apache系统本身的配置。如果是基于IIS的服务器运行一个网站,那么大部分的升级和改进都不会影响用户的访问,这是因为配置的修改是在系统正常运行的情况下完成的。然而,Apache则需要一次理论上的重启。

结论

    尽管两种系统间存在一系列的区别,但是选择使用哪一种还是取决于你所在单位的需求,甚至取决于个人的需要和喜好。比如,许多开发人员更喜欢在基于Unix的Apache环境下运行Perl,即使Perl和Apache在Windows下也可以使用,而且IIS也支持Perl。

    如果对服务器进行管理是您的主要顾虑,那么IIS所具有的多种管理功能则会是个不错的选择。此外,选择IIS还有其他的好处,比如安全性能、与Active Directory的集成以及其他安全机制。

    尽管如此,我们也不能忽略部署这两种系统的成本。Apache是不收费的,而且也能被安装在像Linux这样同样是免费的操作系统上。IIS仅能作为Windows Server 2003的一部分才能使用。虽然新的Windows Server 2003的Web版本已经比标准版便宜很多,但是仍然要比Apache贵。

0
相关文章