一,Lighttpd簡介

Netcraft做的數據調查曾顯示,今年一月份全球使用Lighttpd的網址為170,000,二月份這個數字達到了7000,000,在短短的一個月內驚人地增長了400%!在這些網址中,包括YouTube、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性能更好。