天天看點

webserver/CGI

來自:http://blog.sina.com.cn/s/blog_466c6640010000nj.html

1. TUX

2. lighttpd,thttpd,shttpd 

3. 幾種web server表現的對比

4. 我的總結

TUX  

  

tux是一種有GPL(GNU General Public License )許可的基于核心的Web伺服器。

  目前它還隻能提供靜态的網頁服務,隻有和核心區子產品,使用者區子產品,以及一般的使用者區Web伺服器背景一起應用的時候才提供動态的内容服務。一般使用者區的Web伺服器不需要為了适應TUX而改變很多地方。然而,使用者區資料段代碼必須要有一個通向TUX的系統調用的接口。

  雖然動态的内容服務現在增長的很迅速,但是也必須要提供靜态的内容服務。如,所有的圖檔檔案就都是靜态的。TUX能給在Linux的核心裡提供非常高效率的靜态内容服務,就象在核心裡運作的NFS網絡檔案系統服務一樣。

  TUX也有處理動态内容的功能。TUX子產品用網頁緩沖存儲動态内容的對象。當一個動态的請求到達的時候,一個TUX的子產品就發送會一個聯合 的動态請求并緩沖這個請求。這就是TUX的零拷貝緩存校驗的結構。(建議TUX子產品不許運作在使用者區,雖然他們也可以運作在核心區。)

  這個新的動态内容的處理需要一個新的API接口。目前的CGI的API接口不能充分的用在TUX的API上。是以,目前的CGI程式為了使 用TUX就要修改目前的程式。如果CGI程式不需要增加TUX的速度的話,TUX也可以把它安一般的CGI來處理。要實作這個功能就要用TUX的CGI模 塊。TUX也可以處理複雜的CGI或是其他的請求,這要通過它把請求重定向到另外一個web伺服器背景程式,如Apache。也就是說,靜态的内 容,TUX子產品,老的CGI程式,以及為TUX Web伺服器編寫的特定的程式都可以在TUX這個主伺服器裡運作。

  一句話,TUX和其他的Web伺服器的差別和TUX的好處包括:

TUX是作為Linux的核心2.4.x或更高的一部分來運作的,另外一部分可以做為使用者區來運作。

TUX緩存部分的TCP校驗并用它們來加快網絡資料傳輸速度。

用一個特定的網絡卡,TUX可以從頁面緩存定向分散的DMA直接到網絡,這樣就避免了資料的拷貝。

當TUX不知道如何去處理一個請求或是接受到一個請求不能去運作的時候,它一般會把這個請求傳送到使用者區的Web伺服器背景去處理它。一個典型的使用者區Web伺服器就是Apache。

2.TUX 2.0的新功能

  TUX 2.0是從TUX 1.0更新成的,仍然保守着與使用者區子產品的相容性。

  增加的功能包括:

     真正的零磁盤讀拷貝,TUX1.0是放到一個臨時的緩存裡的。

     生成網絡寫的零拷貝。

     零拷貝解析。

 

  其他新功能:

     提高使用者去功能子產品的支援。

     虛拟主機的支援,它不限制虛拟主機的數量。

     CGI可以綁定到特定的程序

     一些BUG的修複。

3.系統的基本需要

     TUX需要基于2.4.x核心或是更高版本的系統。

     基于X86的伺服器。

     交替的Web伺服器如Apache來處理不知道的請求

 目前的限制:

     核心子產品隻支援伺服器端。

     TUX隻在x86的Linux平台上測試過。

     TUX能請求其他的Web伺服器如Apache來處理請求。在目前的版本,它對復原不是處理的很好。

lighttpd,thttpd,shttpd

國内絕大部分的web server不是IIS就是Apache,而論市場占有率,我認為Apache是大赢家了,至少是占據了半壁江山。

但 除了IIS/Apache外,其實我們有很多選擇,對于高負載/大并發的網站而言,高性能、輕量級的web server是一劑良藥。最近手頭一台Server 的負載太高,居然将swap吃光導緻機器非常緩慢,後來一查,原來是Apache耗掉了幾乎所有資源,當時apache程序已有9XX個了。

于是用輕量級的web server替換掉apache就進入了日程表。這裡順帶介紹一下這些可選的對象:

lighttpd

Lighttpd是一個德國人上司的開源軟體,其根本的目的是提供一個專門針對高性能網站,安全、快速、相容性好并且靈活的web server環境。具有非常低的記憶體開銷,cpu占用率低,效能好,以及豐富的子產品等特點。

lighttpd 是衆多OpenSource輕量級的web server中較為優秀的一個。支援FastCGI, CGI, Auth, 輸出壓縮(output compress), URL重寫, Alias等重要功能,而Apache之是以流行,很大程度也是因為功能豐富,在lighttpd上很多功能都有相應的實作了,這點對于apache的用 戶是非常重要的,因為遷移到lighttpd就必須面對這些問題。

實用起來lighttpd确實非常不錯,上文提到的apache overload的問題,用lighttpd就完全解決了。apache主要的問題是密集并發下,不斷的fork()和切換,以及較高(相對于 lighttpd而言)的記憶體占用,使系統的資源幾盡枯竭。而lighttpd采用了Multiplex技術,代碼經過優化,體積非常小,資源占用很低, 而且反應速度相當快。

利用apache的rewrite技術,将繁重的cgi/fastcgi任務交給lighttpd來完成,充分利用兩者的優點,現在那台伺服器的負載下降了一個數量級,而且反應速度也提高了一個甚至是2個數量級!

下面是他們官方站點上的一段話:

"lightTPD is the BEST webserver out there, much faster than apache and much much much more flexible/configurable/secure than tux, and its fcgi php support is simply unbeatable."

thttpd

thttpd 是一個非常小巧的輕量級web server,它非常非常簡單,僅僅提供了HTTP/1.1和簡單的CGI支援,在其官方網站上有一個與其他web server(如Apache, Zeus等)的對比圖+Benchmark,可以參考參考。此外,thttpd 也類似于lighttpd,對于并發請求不使用fork()來派生子程序處理,而是采用多路複用(Multiplex)技術來實作。是以效能很好。

Thttpd 支援多種平台,如FreeBSD, SunOS, Solaris, BSD, Linux, OSF等。對于小型web server而言,速度快似乎是一個代名詞,通過官方站提供的Benchmark,可以這樣認為:thttpd至少和主流的web server一樣快,在高負載下更快,因為其資源占用小的緣故。

Thttpd還有一個較為引人注目的特點:基于URL的檔案流量限制,這對于下載下傳的流量控制而言是非常友善的。象Apache就必須使用插件實作,效率較thttpd低。

shttpd

由于shttpd可以嵌入其他軟體,是以可以非常容易的開發嵌入式系統的web server,官方網站上稱shttpd如果使用uclibc/dielibc(libc的簡化子集)則開銷将非常非常低。以下是其特點:

Stand-alone server, or embeddable into existing C/C++ program 

GET, POST, PUT, DELETE methods 

CGI 

SSL 

Digest (MD5) authorization 

Multiple (and user defineable) index files 

Directory listing 

Standard logging 

Cookies 

inetd mode 

User-defineable mime types 

No configuration files 

No external dependencies

由于shttpd可以輕松嵌入其他程式裡,是以shttpd是較為理想的web server開發原形,開發人員可以基于shttpd開發出自己的webserver!

下面是我翻譯的LiteSpeed Web Server官方的一篇文章。

圖檔請參見......

<a href="http://www.litespeedtech.com/benchmark.html">http://www.litespeedtech.com/benchmark.html</a>

幾種web server表現的對比:

被測試的web server 軟體

測試環境

測試結果

 以小的靜态檔案為測試基準

 以CGI為基準

 以FAST CGI為基準

 以PHP腳本為基準:mod_php vs. FastCGI PHP

 以Perl腳本為基準:mod_perl vs. lsperld

結論。

下面幾種web server都包含在這次測試中。

Apache 1.3.33 

Apache 2.0.52 (prefork mpm) 

IIS 6.0 

LiteSpeed 2.0 Standard 

LiteSpeed 2.0 Professional 

thttpd 2.25b 

TUX 3.2 

boa 0.94.14rc20 

lighttpd 1.3.12 

Aolserver 4.0.7 

Mathopd 1.5p3 

說明一下LSWS 是LiteSpeed Web Server的縮寫。

本來也很想把zeus和 sunone也放到這次基準測試中來,但是那些軟體的聲明不允許對對它們的測試結果進行公布。

Network Switch: D-Link Gigabit Eight Ports Switch DGS-1008D

Server Hardware: Dell PowerEdge SC1600

CPU: Single Intel Xeon 2.4GHz/533FSB/512KB L2 Cache 

memory: 256MB ECC PC2700 

Hard Drive: 36GB 10K RPM SCSI drive Seagate ST336607LW 

NIC: on board Intel PRO/1000 Gigabit Adapter 

Server Software: 

Fedora Core 3 with stock kernel 2.6.10-1.760 

IIS 6.0 on Windows 2003 Enterprise 

Web Server Configurations: 

Apache 2.0.52 

IIS 6.0 - default 

LiteSpeed 2.0 Standard - default 

LiteSpeed 2.0 Professional - default 

thttpd 

TUX 3.2 - default 

boa 

lighttpd 

Aolserver 

Mathopd 

注意:LiteSpeed 和 lighttpd都支援在2.6核心中新的i/o 事件發送器sys_epoll()。但是有意思的是。我們發現這兩種server基準測試的結果還沒以前的标準時間發送器poll(),表現的好。

至少當我們通過網絡測試并發等級&lt;=1000的時候,我們僅僅用poll()來做我們所有的測試。

結果可能會和在本地機上通過回路測試完全不同。

Client Hardware: MSI K7D 

CPU: Dual Athlon MP 2000+/266FSB/256KB L2 Cache 

memory: 1GB PC2100 

Hard Drive: 36GB 1000RPM SCSI drive 

NIC: Intel PRO/1000 Gigabit Adapater 

Client Software: 

OS: RedHat 8.0 with kernel 2.4.22smp 

Test Tool: ApacheBench (ab) 1.3.33 

測試結果:

每種情況運作3次,最好的結果被采納。伺服器被重新啟動,當每次測試完一種web server軟體。

以小的靜态檔案為測試基準

小的靜态頁面大小隻有100 bytes。用小檔案測試的原因是為了避免網絡帶寬瓶頸。我們隻為了展示web server的表現,而不是核心。

這兒必然有某種Anti-DoS特性在IIS 6.0中,當并發等級大于10(小于100)的時候它丢棄了所有的連接配接。

CGI 基準測試

一個簡單的c cgi腳本(echo)被用來在這裡測試。它是C CGI/FCGI在fcgi 2.4包中 的例子。用來列印出所有的cgi環境變量。

不知道為什麼什麼原因使thttpd's CGI在這表現如此差。

Fast CGI 基準測試

一個簡單的c++ cgi腳本(echocpp) 被用來這裡測試。它是一個fcgi 2.4包中修改版本的c++ FCGI例子。它被修改成隻産生一個恒定的響應。這個響應是162 byte在響應體中(response body)。從請求到請求發生改變的部分被去掉了,因為ab(ApacheBench)不喜歡變長響應體的響應。

PHP腳本基準測試: mod_php vs. FastCGI PHP

兩個簡單的php腳本被用來測試。一個是hello.php隻 輸出hello world。另一個是phpinfo.php,隻調用phpinfo()。這裡都沒有配置操作碼加速器(opcode accelerator)。因為他們對這兩個簡單的php腳本沒有太大的影響。

Perl 腳本基準測試: mod_perl vs. lsperld

一個Hello World perl腳本,産生一個77 bytes的響應體。被用來測試。

Apache 2.0沒有測。因為在同一個伺服器上既為 1.3又為2.0安裝mod_perl太麻煩了。

Apache 1.3 被配置成用 Apache::Registry去處理perl 腳本.

Lsperld 是一個Perl Fast CGI 腳本它可以運作CGI perl 腳本在一個 persistent Perl interpreter中, 就像 Apache mod_perl's Apache::Registry, 編譯perl 腳本,cached 到記憶體中。

總結:

在以上的基準測試結果中我們得到了以下的結論。

Apache 1.3和 2.0的表現非常相近。2.0沒有什麼優勢。我們沒有測試Apache 2.0的worker MPM。因為prefork MPM更有可能被用于Unix/Linux系統的應用。跟Apache比起來, LiteSpeed Web Server能快3-7倍當它處理靜态内容的時候。當處理動态内容的是時候能快50-100%,包括CGI, FastCGI, PHP and Perl.方式。

我們早期的測試表明,Apache的性能下降非常大,當distributed configuration override (.htaccess) 被設定為enabled。然而LiteSpeed web server幾乎不受影響。是以我們将能看到更大的差距在一個共享的主機環境中。

跟這些純粹的使用者區(land) 内容加速器像thttpd, boa 和mathopd比較起來, LiteSpeed Web Server 在處理靜态内容上有更好的表現。跟kernel核心内容加速器比較起來,TUX,由于在核心中的快捷和簡單的特性設定。LiteSpeed Web Server Pro在non-keep-alive測試中表現有點遜色。

這全部的LiteSpeed web server的表現,包括Standard 和 Professional版本,比其他所有被測試的web server軟體都好。

LiteSpeed Web Server 是一個多元(one-stop) 解決方案在高性能web服務環境中. 

如果你真的想你的網站停止遭受各種各樣性能表現上的問題和在你現有的硬體上表現出最好的web服務的産出。你應該認真的考慮切換到LiteSpeed.。它将省去你所有在優化你的web各部分的時候所有頭疼的事情。因為我們已經為你做完了所有艱難的工作。

我的總結:

如果隻有靜态頁面和圖檔的話,可以用Zeus或者TUX,效率比apche高很多,尤其是TUX因為是和核心心結合的有較高的效率我認為是靜态内容server的最佳選擇,但他的限制是必須使用linux2.4以上的核心。我們的freebsd系統可能無法使用。

至于apache1.3和apache2.0對于理靜态内容的比較,和worker MPM 與 prefork MPM性能方面的比較,我還沒有一個權威的資料來說明。對于負載不是很高的站點,需要較高的穩定性的話,apache還是很好的選擇。

LiteSpeed web server is an Apache interchangeable, full-featured high performance, secure HTTP server specifically engineered from the ground up with security and scalability in mind.

lighttpd,thttpd,shttpd的穩定性還沒有一個肯定的說法。

以後再對這個文檔進行補充。翻譯的不正确的地方歡迎指出,可以參看原文。