BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 田乐 关注 0 他的粉丝 发布于 2007年8月2日. 估计阅读时间: 11 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

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服务器类型,是设计部署方案的一个很好参考。

    评价本文

    专业度
    风格

    您好,朋友!

    您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

    获得来自InfoQ的更多体验。

    告诉我们您的想法

    允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

    当有人回复此评论时请E-mail通知我

    想收藏,但是找不到地方 by Alex wang

    不支持么?

    Re: 想收藏,但是找不到地方 by 霍 泰稳

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

    IBM的链接已经失效 by Zhao jeason

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

    允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

    当有人回复此评论时请E-mail通知我

    允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

    当有人回复此评论时请E-mail通知我

    3 讨论

    登陆InfoQ,与你最关心的话题互动。


    找回密码....

    Follow

    关注你最喜爱的话题和作者

    快速浏览网站内你所感兴趣话题的精选内容。

    Like

    内容自由定制

    选择想要阅读的主题和喜爱的作者定制自己的新闻源。

    Notifications

    获取更新

    设置通知机制以获取内容更新对您而言是否重要

    BT