InfoQ

新闻

与时俱进的轻量级Web服务器

作者 田乐 发布于 2007年7月31日 下午10时21分

社区
Ruby,
Java
主题
应用服务器
标签
Mongrel,
IIS,
Apache Tomcat,
developerWorks

IBM developerWorks网站上最近发布了一则Cameron Laird的关于轻量级Web服务器的文章,里面列举了很多的轻型的Web服务器实现和它们的特点,Cameron还从自己的经验出发总结了评价Web服务器的一些指标。这篇文章目的在于扩展我们在Web应用部署时的思路,让我们重新思考Web应用的架构和部署方案。众多的轻量级Web服务器其实见证了动态脚本语言实现Web应用的火爆,给实现Web应用提供了更多解决方案。

轻量Web服务器这个概念关注“轻巧性”,这意味着简单、易于安装、流线化、要求低和健壮。这种“轻巧”主要是相对于目前市场占有率占优的Apache和IIS而言的,轻量Web服务器应该更小更简单,并且它们至少要有一些性能/特性超过这两个产品(这样它们才可能分得市场份额)。Cameron这样对比了“轻量”相比“重量”的一些优势

轻量级Web服务器可以适用于市场领头产品和其他“重量级”服务器无法胜任的情况。例如,整个服务器可以打包在一个文件中。这意味着开发人员可以方便地携带生产环境所需的所有工具。即使在生产服务器上运行的是 Apache,也仍然可以在宾馆的房间里,借助只需数秒钟就可以安装完毕的轻量级Web服务器以尝试新想法。而且,由于轻量级Web服务器要求很低,因此可以在那些无法负担IIS的主机上顺畅地运行。

我们关注一下目前的Web服务器占有率情况,Netcraft在它2007年7月的Web服务器调查中的服务器占有率数据如下:

开发者 2007年6月 百分比 2007年7月 百分比 变更率
Apache 65588298 53.76 66144734 52.65 -1.11
Microsoft 38836030 31.83 41257913 32.84 1.01
Google 4872765 3.99 5465538 4.35 0.36
Sun 2273173 1.86 2245493 1.79 -0.07
lighttpd 1470930 1.21 1471779 1.17 -0.04
Zeus 480698 0.39 463449 0.37 -0.02

其中Apache占有率最高,它是公认的稳定、性能优良、开发者活跃的开源软件产品。而Microsoft则受益于Windows平台内置的PWS和IIS的优势及.NET平台的市场占优率,占有第二的位置。Sun则是由于历史问题,它的iPlanet、SunONE和一并计算的Netscape-Communications产品还能跻身前4。后面的lighttpd则是轻量型Web容器的代表,已经超过了老牌的商业Web服务器Zeus(ServerWatch给出了一个lighttpd市场占有率上升的分析),主要因为一些AJAX项目和Ruby on Rails(以下简称RoR)的流行对它的广泛部署起了推波助澜的作用。

轻量Web服务器除了lighttpd还有mongrel也经常被提及,主要因为它们是RoR项目的两种主要部署方案。JavaEye的创始人Robbin Fan曾经在它的blog中对比过RoR的这两种部署方案

(RoR项目)用fcgi方式还是http方式,我个人觉得区别不大,关键还是看应用的场合,一般而言,推荐的搭配是lighttpd+fcgi 或者nginx+mongrel,而Apache因为性能差距,而不被推荐。

lighttpd+fcgi是大量使用脚本语言编写的网站的首选部署方案,Robbin Fan在同一篇文章中阐述了他选择lighttp部署JavaEye的理由:

JavaEye为什么用lighttpd+fcgi呢?原因如下:

1) lighttpd发展了好几年了,市场占有率也相当高,是一个经过实践检验的server,它的文档也很全;

2) JavaEye的Ruby进程和Web Server在一台机器上面跑,通过unix socket使用fcgi协议通讯可以避免tcp的网络开销,其通讯速度比使用tcp socket使用http协议通讯要快一些。

Robbin选择lighttpd的主要原因是性能好于Apache。并且Apache目前的fastcgi模块有些bug,而对于像RoR这样的项目fastcgi是一种很好的部署方式,所以Apache就因此失去了这块份额。最近InfoQ报道过的RubyWorks提供的RoR工作栈中选择了Haproxy+mongrel的方式,这也是前面引用的Robbin所说的另外一种部署方案。mongrel本身可以跑Ruby进程,同时也是一个http服务器,它可以兼顾动态和静态Web服务,配合Haproxy做负载均衡就可以支持大并发量的Web应用,所以它越来越流行了。

可见轻量级Web服务器由于性能/特性上的一些优势,开始逐渐瓜分Apache、IIS所没有照顾到的一些新兴的市场分额。那么如何去评价一个Web服务器呢?Cameron给出了如下的一些重要指标
  • 性能:对请求作出响应的速度有多快?
  • 可伸缩性:当很多用户同时访问它时,服务器还能继续可靠地运行吗?
  • 安全性:服务器是否只执行它应该执行的操作。它在认证用户和加密传输方面提供了怎样的支持?它的使用是否使附近的应用程序或主机变得更易受攻击?
  • 可靠性:服务器的失效模式和故障发生率如何?
  • 标准遵从性:服务器遵从相关的 RFC 吗?
  • 灵活性:是否可以对服务器进行调优,以支持较重的请求负载、需要计算的动态页面或者代价不菲的认证等等?
  • 平台需求:该服务器可用于哪些平台?它是否有特定的硬件需求?
  • 易管理性:服务器是否易于设置和维护?它是否与日志记录、审计、成本计算等组织标准兼容?
  • 目前越来越多的轻型Web服务器开始在上面的一个或着多个方面向Apache和IIS提出了挑战,因为很难有一个Web服务器可以做到面面俱到。我们可以从Cameron提供的一份列表里面看到一些选用轻量级Web服务器的成功案例
  • YouTube依靠lighttpd快速交付归档的内容,例如视频;
  • cdServe运行 “German Woodworking Machinery and Tools” CD;
  • LiteSpeed宣扬它在 twitter、www.funnyoride.com、www.airliners.com、WordPress.com、 fanfiction.com、SlashGear、www.forumactif.com 和其他著名Web 站点上担任的角色;
  • OpenSUSE、RubyOnRails、MarkaBoo和其他一些著名站点依赖于Mongrel;
  • demon.net、bluelight.com、mtv.com、The Drudge Report、garfield.com等站点则使用thttpd;
  • 上面的例子中有一些使用RoR的网站的例子,Cameron指出不仅是网站可以使用常规以外的其他编程语言。“不常见”语言还可以被用来实现轻量Web服务器,例如Erlang、Java、Lisp、Lua、Perl、Python和Tcl。用这些语言实现的轻量级Web服务器不一定只是在性能/特性上超过Apache和IIS,它们可以提供例如容易嵌入、体积轻小这样的特性来吸引开发者的使用。Cameron给出了使用“不常见”语言编写轻量级Web服务器的原因:

  • 教学:使用轻量级Web服务器来制定一个重要、但是并不太大的目标。这是获得使用某种语言的经验的好方法。
  • 虽然用C编写的轻量级Web服务器大小为10-50KB,更高级的语言有100KB到数MB的运行时,但整个 Web 服务器的源文件可能只占几千个字节。这种Web服务器占用的空间很小,因此比Apache更易于与技术伙伴共享。
  • 更高级的语言可以使实验更吸引人 —— 例如,添加一个新的HTTP/1.1特性可能只需几行源代码。这些轻量级服务器是非常方便的实验材料。
  • 将HTTP服务器添加到已有的、用高级语言编写的应用程序中只需增加几行源代码。
  • 如前所述,不同的轻量级Web服务器有着不同的优点,它们或多或少独立于编程语言。所有轻量级Web服务器都比Apache更小、更易于配置。与Apache相比,有些轻量级 Web 服务器更快,有些则快得多。有些则强调安全性、重负载下的从容性、可扩展性或者内存占有量。在任何情况下,都可以以一种不适用于 Apache 的方式彻底地理解这些服务器。

    这些理由从另外一个方面说明了轻量级Web服务器的优势,Cameron还提供了一长串的轻量级Web服务器的列表和简介,感兴趣的读者可以认真阅读,从中寻找到您感兴趣的实现。轻量级Web服务器不只是Apache、IIS的竞争者,也是很好的合作者(例如我们经常可以见到关于mongrel与Apache配合使用的文章),现在我们还可以看到很多服务器协作部署的例子,各取所长应该是最佳的选择,所以我们更应该从现在就开始拓宽眼界,寻找我们所需要的。

    最后,推荐对Web服务器感兴趣的读者可以使用Netcraft提供的Webserver Search的服务器查询功能来探索你感兴趣的网站的服务器,Webserver Search可以报告搜索的url对应的服务器的操作系统和Web服务器类型,是设计部署方案的一个很好参考。

    3 条回复

    回复

    想收藏,但是找不到地方 发表人 wang Alex 发表于 2007年8月1日 上午1时7分
    Re: 想收藏,但是找不到地方 发表人 霍 泰稳 发表于 2007年8月1日 下午9时59分
    IBM的链接已经失效 发表人 jeason Zhao 发表于 2008年6月17日 下午8时42分
    1. 返回顶部

      想收藏,但是找不到地方

      2007年8月1日 上午1时7分 发表人 wang Alex

      不支持么?

    2. 返回顶部

      Re: 想收藏,但是找不到地方

      2007年8月1日 下午9时59分 发表人 霍 泰稳

      收藏的功能正在构建中,现在还不支持,抱歉。替代的方式是在你的浏览器中保存为书签,呵呵。

    3. 返回顶部

      IBM的链接已经失效

      2008年6月17日 下午8时42分 发表人 jeason Zhao

      IBM的链接已经失效,请修正

    独家内容

    专访开源项目Amoeba架构师陈思儒

    DBA notes站长冯大辉(Fenng)代表InfoQ中文站采访了分布式数据库Proxy开源项目Amoeba的架构师和主要开发者陈思儒,内容包括Amoeba项目的起因、功能及其愿景等。

    使用JSF、Ajax和Seam开发Portlets(2/3)

    作为三期系列文章的第二部分,本文延续了上一期内容,介绍了RichFaces,包括如何把RichFaces集成到之前提到的示例应用中、如何部署RichFaces porlet和RichFaces的多种特性和功能。

    Jeff Barr谈论Amazon Web服务

    Amazon Web Services(AWS)的传道者Jeff Barr讨论了SimpleDB、S3、EC2、SQS、云计算、Amazon的不同服务如何与应用交互、AWS的起源、SimpleDB和微软SQL Server Data Services、AWS cloud的全球化、三月份的AWS停机。

    用Erlang实现领域特定语言

    Erlang的并发模型很有名,它的健壮性也很有名。但其他方面呢?在这篇文章里,Dennis Byrne演示了如何用Erlang建立内部DSL。

    基于Rails的企业级应用剖析

    本视频主要以FreeWheel为例,对一个基于Rails的企业级应用进行了剖析。其中包括:FreeWheel的架构、部署、数据库的问题、REST API、敏捷开发过程、如何去写测试以及持续集成等等。

    JavaFX技术预览

    JavaFX显示了Sun的Java系列产品市场方向的一个重大转变。随着1.0版的即将发布,InfoQ以JavaFX预览版为参考,与Sun高级工程师Joshua Marinacci探讨了即将发布的1.0正式版。

    剖析短迭代

    敏捷教练Dave Nicolette提出:我们应该如何设定迭代长度?是要根据发布周期的时间么?使用短迭代又有哪些好处?

    应用JSF、Ajax和Seam开发Portlets(1/3)

    本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。