webserver/CGI

來自:http://blog.sina.com.cn/s/blog_466c6640010000nj.html
 
1. TUX
2. lighttpd,thttpd,shttpd 
3. 幾種web server表現的對比
4. 個人總結
 
TUX  
http://www.chinadesign.com.cn/NewsContents1.asp?id=3386 
  
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
官方主頁: www.lighttpd.net
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
官方網站: http://www.acme.com/software/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
官方網站: http://shttpd.sourceforge.net/ Shttpd是另外一個輕量級的web server,具備比thttpd更豐富的功能特性,支持CGI, SSL, cookie, MD5認證, 還能嵌入(embedded)到現有的軟件裏。最有意思的是不須要配置文件! 
因爲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官方的一篇文章。
圖片請參見......
http://www.litespeedtech.com/benchmark.html
幾種web server表現的對比:
被測試的web server 軟件
測試環境
測試結果
 以小的靜態文件爲測試基準
 以CGI爲基準
 以FAST CGI爲基準
 以PHP腳本爲基準:mod_php vs. FastCGI PHP
 以Perl腳本爲基準:mod_perl vs. lsperld
結論。
被測試的web server 軟件
下面幾種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 1.3.33 
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 
若是想知道他們當時的具體配置能夠去原文中查看,Web Server Configurations:  http://www.litespeedtech.com/benchmark.html  。
注意:LiteSpeed 和 lighttpd都支持在2.6內核中新的i/o 事件發送器sys_epoll()。可是有意思的是。咱們發現這兩種server基準測試的結果還沒之前的標準時間發送器poll(),表現的好。
至少當咱們經過網絡測試併發等級<=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的表現,而不是內核。
Non-KeepAlive test: ab -n 100000 -c <concurrent level>  http://<ip>:<port>/100.html

 
這兒必然有某種Anti-DoS特性在IIS 6.0中,當併發等級大於10(小於100)的時候它丟棄了全部的鏈接。
KeepAlive test: ab -n 100000 -c <concurrent level> -k  http://<ip>:<port>/100.html
 
CGI 基準測試
一個簡單的c cgi腳本(echo)被用來在這裏測試。它是C CGI/FCGI在fcgi 2.4包中 的例子。用來打印出全部的cgi環境變量。
CGI Test: ab -n 3000 -c <concurrent level>  http://<ip>:<port>/cgi-bin/echo
 
不知道爲何什麼緣由使thttpd's CGI在這表現如此差。
Fast CGI 基準測試
一個簡單的c++ cgi腳本(echocpp) 被用來這裏測試。它是一個fcgi 2.4包中修改版本的c++ FCGI例子。它被修改爲只產生一個恆定的響應。這個響應是162 byte在響應體中(response body)。從請求到請求發生改變的部分被去掉了,由於ab(ApacheBench)不喜歡變長響應體的響應。
Fast CGI Test: ab -n 10000 -c <concurrent level>  http://<ip>:<port>/cgi-bin/echo
 
PHP腳本基準測試: mod_php vs. FastCGI PHP
兩個簡單的php腳本被用來測試。一個是hello.php只 輸出hello world。另外一個是phpinfo.php,只調用phpinfo()。這裏都沒有配置操做碼加速器(opcode accelerator)。由於他們對這兩個簡單的php腳本沒有太大的影響。
hello.php test: ab -n 10000 -c <concurrent level>  http://<ip>:<port>/hello.php
 
phpinfo.php test: ab -n 10000 -c <concurrent level>  http://<ip>:<port>/phpinfo.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 到內存中。
hello.pl test: AB -n 10000 -c <concurrent level>  http://<ip>:<port>/hello.pl
 
 
總結:
在以上的基準測試結果中咱們獲得瞭如下的結論。
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的介紹我在這裏沒有列出,從比較來看,他的綜合性能是不錯的。我能夠給出一段他的描述: http://www.litespeedtech.com/
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的穩定性尚未一個確定的說法。 之後再對這個文檔進行補充。翻譯的不正確的地方歡迎指出,能夠參看原文。
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息