簡單講述Linux Apache系統應用操作管理
Linux Apache經過長時間的發展,很多用戶都很了解Linux Apache了,這里我發表一下個人理解,和大家討論討論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服務器后臺程序,如Linux Apache。也就是說,靜態的內容,TUX模塊,老的CGI程序,以及為TUX Web服務器編寫的特定的程序都可以在TUX這個主服務器里運行。
一句話,TUX和其他的Web服務器的區別和TUX的好處包括:
TUX是作為Linux的內核2.4.x或更高的一部分來運行的,另外一部分可以做為用戶區來運行。
TUX緩存部分的TCP校驗并用它們來加快網絡數據傳輸速度。
用一個特定的網絡卡,TUX可以從頁面緩存定向分散的DMA直接到網絡,這樣就避免了數據的拷貝。
當TUX不知道如何去處理一個請求或是接受到一個請求不能去運行的時候,它一般會把這個請求傳送到用戶區的Web服務器后臺去處理它。一個典型的用戶區Web服務器就是Linux Apache。
TUX 2.0的新功能
TUX 2.0是從TUX 1.0升級成的,仍然保守著與用戶區模塊的兼容性。
增加的功能包括:
真正的零磁盤讀拷貝,TUX1.0是放到一個臨時的緩存里的。
生成網絡寫的零拷貝。
零拷貝解析。
其他新功能:
提高用戶去功能模塊的支持。
虛擬主機的支持,它不限制虛擬主機的數量。
CGI可以綁定到特定的進程
一些BUG的修復。
系統的基本需要
TUX需要基于2.4.x內核或是更高版本的系統。
基于X86的服務器。
交替的Web服務器如Linux Apache來處理不知道的請求
當前的限制:
內核模塊只支持服務器端。
TUX只在x86的Linux平臺上測試過。
TUX能請求其他的Web服務器如Linux Apache來處理請求。在當前的版本,它對回滾不是處理的很好。lighttpd,thttpd,shttpd
國內絕大部分的web server不是IIS就是Apache,而論市場占有率,我認為Linux Apache是大贏家了,至少是占據了半壁江山。
但除了IIS/Apache外,其實我們有很多選擇,對于高負載/大并發的網站而言,高性能、輕量級的web server是一劑良藥。最近手頭一臺Server 的負載太高,居然將swap吃光導致機器非常緩慢,后來一查,原來是Linux Apache耗掉了幾乎所有資源,當時apache進程已有9XX個了。
于是用輕量級的web server替換掉Linux Apache就進入了日程表。這里順帶介紹一下這些可選的對象:
lighttpd
官方主頁:www.lighttpd.net
Lighttpd是一個德國人領導的開源軟件,其根本的目的是提供一個專門針對高性能網站,安全、快速、兼容性好并且靈活的web server環境。具有非常低的內存開銷,cpu占用率低,效能好,以及豐富的模塊等特點。
lighttpd是眾多OpenSource輕量級的web server中較為優秀的一個。支持FastCGI, CGI, Auth, 輸出壓縮(output compress), URL重寫, Alias等重要功能,而Linux 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(如Linux Apache, Zeus等)的對比圖+Benchmark,可以參考參考。此外,thttpd 也類似于lighttpd,對于并發請求不使用fork()來派生子進程處理,而是采用多路復用(Multiplex)技術來實現。因此效能很好。
Thttpd支持多種平臺,如FreeBSD, SunOS, Solaris, BSD, Linux, OSF等。對于小型web server而言,速度快似乎是一個代名詞,通過官方站提供的Benchmark,可以這樣認為:thttpd至少和主流的web server一樣快,在高負載下更快,因為其資源占用小的緣故。
Thttpd還有一個較為引人注目的特點:基于URL的文件流量限制,這對于下載的流量控制而言是非常方便的。象Linux 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都包含在這次測試中。
Linux Apache 1.3.33
Linux 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:
Linux Apache 1.3.33
Linux 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 : /100.html”>http://: /100.html
CGI 基準測試
一個簡單的c cgi腳本(echo)被用來在這里測試。它是C CGI/FCGI在fcgi 2.4包中 的例子。用來打印出所有的cgi環境變量。
CGI Test: ab -n 3000 -c : /cgi-bin/echo”>http://: /cgi-bin/echoPHP腳本基準測試: mod_php vs. FastCGI PHP
兩個簡單的php腳本被用來測試。一個是hello.php只輸出hello world。另一個是phpinfo.php,只調用phpinfo()。這里都沒有配置操作碼加速器(opcode accelerator)。因為他們對這兩個簡單的php腳本沒有太大的影響。
hello.php test: ab -n 10000 -c : /phpinfo.php”>http://: /phpinfo.php
Perl 腳本基準測試: mod_perl vs. lsperld
一個Hello World perl腳本,產生一個77 bytes的響應體。被用來測試。
Linux Apache 2.0沒有測。因為在同一個服務器上既為 1.3又為2.0安裝mod_perl太麻煩了。
Linux 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 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的穩定性還沒有一個肯定的說法。
以后再對這個文檔進行補充。翻譯的不正確的地方歡迎指出,可以參看原文。
【編輯推薦】