一、Lighttpd简介
据Netcraft做的数据调查显示,今年一月份全球使用LightTPD的网址为170,000,二月份这个数字达到了7000,000,在短短的一个 月内惊人地增长了400%!在这些网址中,包括YouTub
e、Wikipedia和Meebo等。而且目前为止,使用LightTPD的网址仍在以极高 的比例增长,尤其是欧美等地的网址,许多新兴网站也纷纷选用LightTPD,而且LightTPD在Ruby on Rails社区中尤其受欢迎。
以Meebo为例。它是一个内置在浏览器内的信息工具,它支持多种信息工具,如Yahoo! Messenger, Windows Live Messenger, ICQ, AIM和Jabber等,每天Meebo要处理至少七千万条信息。这样的一个网站是用的便是LightTPD。
值得一提的是,Meebo使用的却是Linux服务器,然而它抛弃Apache以及LAMP(Linux+ Apache+ Mysql+ Perl/PHP/Python)的网络构建方式,选择了LightTPD。
下图为使用Lighttp的网址增长率
很多人也许会问具有如此“魔力”的LightTPD到底是什么?简单说一下:LightTPD是一个轻量级的Web 服务器,支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。它具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。其静态文件的响应能力远高于Apache,可谓Web服 务器的后期之秀。
许多技术专家认为,在Web 服务器中LightTPD比Apache更小更轻量,却拥有比后者更高的性能。虽然LightTPD在Web服务器方面只占很小的市场份额,“但它正极速增长,日后必将是Web服务器领域的有力竞争者。”
二、下面是部署应用时LightTPD在前端相对其他web server的比较:
前端目前已知的可以选择apache, LightTPD, litespeed, nginx, haproxy
1、apache2.2
apache是全球市场占有率最高的web server,超过全球互联网网站50%的网站都用apache。apache2.2 + mod_proxy_balancer是一个非常流行,非常稳定的方案。
使用apache2.2唯一的问题就是apache的性能和后面那些轻量级web server相比,差太远了。一方面在处理静态请求方面apache要比LightTPD慢3-5倍,内存消耗和CPU消耗也高出一个数量级,另一方面 mod_proxy_balancer的分发性能也不高,比haproxy差很远。
2、LightTPD
LightTPD是一个轻量级高性能web server,一个在MySQL Inc工作的德国人写的。性能很好,内存和CPU资源消耗很低,支持绝大多数apache的功能,是apache的绝好替代者。目前LightTPD已经 上升到全球互联网第四大web server,市场占有率仅此于apache,IIS和Sun。
LightTPD唯一的问题是proxy功能不完善,因此不适合搭配mongrel来使用。LightTPD下一个版本1.5.0的proxy模块重写过了,将会解决这个问题。
3、litespeed
和LightTPD差不多,商业产品,收费的。比LightTPD来说,多一个web管理界面,不用写配置文件了。litespeed专门为单机运行的 RoR开发了一个lsapi协议,号称性能最好,比httpd和fcgi都要好。他的proxy功能比LightTPD完善。
litespeed的缺点我却认为恰恰是这个lsapi。因为lsapi不是web server启动的时候启动固定数目的ruby进程,而是根据请求繁忙程度,动态创建和销毁ruby进程,貌似节省资源,实则和apache2.2进程模 型一样,留下很大的黑客攻击漏洞。只要黑客瞬时发起大量动态请求,就会让服务器忙于创建ruby进程而导致CPU资源耗尽,失去响应。
当然,litespeed也支持httpd和fcgi,这个和LightTPD用法一样的,到没有这种问题。
4、nginx
一个俄国人开发的轻量级高性能web server,特点是做proxy性能很好,因此被推荐取代apache2.2的mod_proxy_balancer,来和mongrel cluster搭配。其他方面和LightTPD到差不多。
要说缺点,可能就是发展的时间比较短,至今没有正式版本,还是beta版。没有经过足够网站的验证。
5、haproxy
就是一个纯粹的高性能proxy,不处理静态资源的,所有请求统统分发到后端。
三、如何选择:
JavaEye为什么用LightTPD + fcgi呢?原因如下:
1) LightTPD发展了好几年了,市场占有率也相当高,是一个经过实践检验的server,它的文档也很全;而nginx还没有经过足够的市场检验,文档也很缺乏
2) JavaEye的ruby进程和web server在一台机器上面跑,通过unix socket使用fcgi协议通讯可以避免tcp的网络开销,其通讯速度比使用tcp socket使用http协议通讯要快一些。
什么场合使用haproxy?
大规模部署,例如你的RoR应用到十几台服务器上面去,你用haproxy会更好,可以方便的添加删除应用服务器节点,proxy性能更好。
这些也是我为什么在LAMPR中加入LightTPD的原因。