簡單講述Linux Apache系統(tǒng)應(yīng)用操作管理
Linux Apache經(jīng)過長時(shí)間的發(fā)展,很多用戶都很了解Linux Apache了,這里我發(fā)表一下個(gè)人理解,和大家討論討論tux是一種有GPL(GNU General Public License )許可的基于內(nèi)核的Web服務(wù)器。目前它還只能提供靜態(tài)的網(wǎng)頁服務(wù),只有和內(nèi)核區(qū)模塊,用戶區(qū)模塊,以及一般的用戶區(qū)Web服務(wù)器后臺(tái)一起應(yīng)用的時(shí)候才提供動(dòng)態(tài)的內(nèi)容服務(wù)。
一般用戶區(qū)的Web服務(wù)器不需要為了適應(yīng)TUX而改變很多地方。然而,用戶區(qū)數(shù)據(jù)段代碼必須要有一個(gè)通向TUX的系統(tǒng)調(diào)用的接口。
雖然動(dòng)態(tài)的內(nèi)容服務(wù)現(xiàn)在增長的很迅速,但是也必須要提供靜態(tài)的內(nèi)容服務(wù)。如,所有的圖片文件就都是靜態(tài)的。TUX能給在Linux的內(nèi)核里提供非常高效率的靜態(tài)內(nèi)容服務(wù),就象在內(nèi)核里運(yùn)行的NFS網(wǎng)絡(luò)文件系統(tǒng)服務(wù)一樣。
TUX也有處理動(dòng)態(tài)內(nèi)容的功能。TUX模塊用網(wǎng)頁緩沖存儲(chǔ)動(dòng)態(tài)內(nèi)容的對(duì)象。當(dāng)一個(gè)動(dòng)態(tài)的請(qǐng)求到達(dá)的時(shí)候,一個(gè)TUX的模塊就發(fā)送會(huì)一個(gè)聯(lián)合的動(dòng)態(tài)請(qǐng)求并緩沖這個(gè)請(qǐng)求。這就是TUX的零拷貝緩存校驗(yàn)的結(jié)構(gòu)。(建議TUX模塊不許運(yùn)行在用戶區(qū),雖然他們也可以運(yùn)行在內(nèi)核區(qū)。)
這個(gè)新的動(dòng)態(tài)內(nèi)容的處理需要一個(gè)新的API接口。當(dāng)前的CGI的API接口不能充分的用在TUX的API上。因此,當(dāng)前的CGI程序?yàn)榱耸褂肨UX就要修改當(dāng)前的程序。如果CGI程序不需要增加TUX的速度的話,TUX也可以把它安一般的CGI來處理。要實(shí)現(xiàn)這個(gè)功能就要用TUX的CGI模塊。TUX也可以處理復(fù)雜的CGI或是其他的請(qǐng)求,這要通過它把請(qǐng)求重定向到另外一個(gè)web服務(wù)器后臺(tái)程序,如Linux Apache。也就是說,靜態(tài)的內(nèi)容,TUX模塊,老的CGI程序,以及為TUX Web服務(wù)器編寫的特定的程序都可以在TUX這個(gè)主服務(wù)器里運(yùn)行。
一句話,TUX和其他的Web服務(wù)器的區(qū)別和TUX的好處包括:
TUX是作為Linux的內(nèi)核2.4.x或更高的一部分來運(yùn)行的,另外一部分可以做為用戶區(qū)來運(yùn)行。
TUX緩存部分的TCP校驗(yàn)并用它們來加快網(wǎng)絡(luò)數(shù)據(jù)傳輸速度。
用一個(gè)特定的網(wǎng)絡(luò)卡,TUX可以從頁面緩存定向分散的DMA直接到網(wǎng)絡(luò),這樣就避免了數(shù)據(jù)的拷貝。
當(dāng)TUX不知道如何去處理一個(gè)請(qǐng)求或是接受到一個(gè)請(qǐng)求不能去運(yùn)行的時(shí)候,它一般會(huì)把這個(gè)請(qǐng)求傳送到用戶區(qū)的Web服務(wù)器后臺(tái)去處理它。一個(gè)典型的用戶區(qū)Web服務(wù)器就是Linux Apache。
TUX 2.0的新功能
TUX 2.0是從TUX 1.0升級(jí)成的,仍然保守著與用戶區(qū)模塊的兼容性。
增加的功能包括:
真正的零磁盤讀拷貝,TUX1.0是放到一個(gè)臨時(shí)的緩存里的。
生成網(wǎng)絡(luò)寫的零拷貝。
零拷貝解析。
其他新功能:
提高用戶去功能模塊的支持。
虛擬主機(jī)的支持,它不限制虛擬主機(jī)的數(shù)量。
CGI可以綁定到特定的進(jìn)程
一些BUG的修復(fù)。
系統(tǒng)的基本需要
TUX需要基于2.4.x內(nèi)核或是更高版本的系統(tǒng)。
基于X86的服務(wù)器。
交替的Web服務(wù)器如Linux Apache來處理不知道的請(qǐng)求
當(dāng)前的限制:
內(nèi)核模塊只支持服務(wù)器端。
TUX只在x86的Linux平臺(tái)上測(cè)試過。
TUX能請(qǐng)求其他的Web服務(wù)器如Linux Apache來處理請(qǐng)求。在當(dāng)前的版本,它對(duì)回滾不是處理的很好。lighttpd,thttpd,shttpd
國內(nèi)絕大部分的web server不是IIS就是Apache,而論市場(chǎng)占有率,我認(rèn)為Linux Apache是大贏家了,至少是占據(jù)了半壁江山。
但除了IIS/Apache外,其實(shí)我們有很多選擇,對(duì)于高負(fù)載/大并發(fā)的網(wǎng)站而言,高性能、輕量級(jí)的web server是一劑良藥。最近手頭一臺(tái)Server 的負(fù)載太高,居然將swap吃光導(dǎo)致機(jī)器非常緩慢,后來一查,原來是Linux Apache耗掉了幾乎所有資源,當(dāng)時(shí)apache進(jìn)程已有9XX個(gè)了。
于是用輕量級(jí)的web server替換掉Linux Apache就進(jìn)入了日程表。這里順帶介紹一下這些可選的對(duì)象:
lighttpd
官方主頁:www.lighttpd.net
Lighttpd是一個(gè)德國人領(lǐng)導(dǎo)的開源軟件,其根本的目的是提供一個(gè)專門針對(duì)高性能網(wǎng)站,安全、快速、兼容性好并且靈活的web server環(huán)境。具有非常低的內(nèi)存開銷,cpu占用率低,效能好,以及豐富的模塊等特點(diǎn)。
lighttpd是眾多OpenSource輕量級(jí)的web server中較為優(yōu)秀的一個(gè)。支持FastCGI, CGI, Auth, 輸出壓縮(output compress), URL重寫, Alias等重要功能,而Linux Apache之所以流行,很大程度也是因?yàn)楣δ茇S富,在lighttpd上很多功能都有相應(yīng)的實(shí)現(xiàn)了,這點(diǎn)對(duì)于apache的用戶是非常重要的,因?yàn)檫w移到lighttpd就必須面對(duì)這些問題。
實(shí)用起來lighttpd確實(shí)非常不錯(cuò),上文提到的apache overload的問題,用lighttpd就完全解決了。apache主要的問題是密集并發(fā)下,不斷的fork()和切換,以及較高(相對(duì)于lighttpd而言)的內(nèi)存占用,使系統(tǒng)的資源幾盡枯竭。而lighttpd采用了Multiplex技術(shù),代碼經(jīng)過優(yōu)化,體積非常小,資源占用很低,而且反應(yīng)速度相當(dāng)快。
利用apache的rewrite技術(shù),將繁重的cgi/fastcgi任務(wù)交給lighttpd來完成,充分利用兩者的優(yōu)點(diǎn),現(xiàn)在那臺(tái)服務(wù)器的負(fù)載下降了一個(gè)數(shù)量級(jí),而且反應(yīng)速度也提高了一個(gè)甚至是2個(gè)數(shù)量級(jí)!
下面是他們官方站點(diǎn)上的一段話:
“l(fā)ightTPD 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
官方網(wǎng)站:http://www.acme.com/software/thttpd/
thttpd是一個(gè)非常小巧的輕量級(jí)web server,它非常非常簡單,僅僅提供了HTTP/1.1和簡單的CGI支持,在其官方網(wǎng)站上有一個(gè)與其他web server(如Linux Apache, Zeus等)的對(duì)比圖+Benchmark,可以參考參考。此外,thttpd 也類似于lighttpd,對(duì)于并發(fā)請(qǐng)求不使用fork()來派生子進(jìn)程處理,而是采用多路復(fù)用(Multiplex)技術(shù)來實(shí)現(xiàn)。因此效能很好。
Thttpd支持多種平臺(tái),如FreeBSD, SunOS, Solaris, BSD, Linux, OSF等。對(duì)于小型web server而言,速度快似乎是一個(gè)代名詞,通過官方站提供的Benchmark,可以這樣認(rèn)為:thttpd至少和主流的web server一樣快,在高負(fù)載下更快,因?yàn)槠滟Y源占用小的緣故。
Thttpd還有一個(gè)較為引人注目的特點(diǎn):基于URL的文件流量限制,這對(duì)于下載的流量控制而言是非常方便的。象Linux Apache就必須使用插件實(shí)現(xiàn),效率較thttpd低。
shttpd
官方網(wǎng)站:http://shttpd.sourceforge.net/ Shttpd是另一個(gè)輕量級(jí)的web server,具有比thttpd更豐富的功能特性,支持CGI, SSL, cookie, MD5認(rèn)證, 還能嵌入(embedded)到現(xiàn)有的軟件里。最有意思的是不需要配置文件!
由于shttpd可以嵌入其他軟件,因此可以非常容易的開發(fā)嵌入式系統(tǒng)的web server,官方網(wǎng)站上稱shttpd如果使用uclibc/dielibc(libc的簡化子集)則開銷將非常非常低。以下是其特點(diǎn):
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開發(fā)原形,開發(fā)人員可以基于shttpd開發(fā)出自己的webserver!
下面是我翻譯的LiteSpeed Web Server官方的一篇文章。
圖片請(qǐng)參見……
http://www.litespeedtech.com/benchmark.html
幾種web server表現(xiàn)的對(duì)比:
被測(cè)試的web server 軟件
測(cè)試環(huán)境
測(cè)試結(jié)果
以小的靜態(tài)文件為測(cè)試基準(zhǔn)
以CGI為基準(zhǔn)
以FAST CGI為基準(zhǔn)
以PHP腳本為基準(zhǔn):mod_php vs. FastCGI PHP
以Perl腳本為基準(zhǔn):mod_perl vs. lsperld結(jié)論。
被測(cè)試的web server 軟件
下面幾種web server都包含在這次測(cè)試中。
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也放到這次基準(zhǔn)測(cè)試中來,但是那些軟件的聲明不允許對(duì)對(duì)它們的測(cè)試結(jié)果進(jìn)行公布。
測(cè)試環(huán)境
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
如果想知道他們當(dāng)時(shí)的具體配置可以去原文中查看,Web Server Configurations: http://www.litespeedtech.com/benchmark.html。
注意:LiteSpeed 和 lighttpd都支持在2.6內(nèi)核中新的i/o 事件發(fā)送器sys_epoll()。但是有意思的是。我們發(fā)現(xiàn)這兩種server基準(zhǔn)測(cè)試的結(jié)果還沒以前的標(biāo)準(zhǔn)時(shí)間發(fā)送器poll(),表現(xiàn)的好。
至少當(dāng)我們通過網(wǎng)絡(luò)測(cè)試并發(fā)等級(jí)< =1000的時(shí)候,我們僅僅用poll()來做我們所有的測(cè)試。
結(jié)果可能會(huì)和在本地機(jī)上通過回路測(cè)試完全不同。
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
測(cè)試結(jié)果:
每種情況運(yùn)行3次,最好的結(jié)果被采納。服務(wù)器被重新啟動(dòng),當(dāng)每次測(cè)試完一種web server軟件。
以小的靜態(tài)文件為測(cè)試基準(zhǔn)
小的靜態(tài)頁面大小只有100 bytes。用小文件測(cè)試的原因是為了避免網(wǎng)絡(luò)帶寬瓶頸。我們只為了展示web server的表現(xiàn),而不是內(nèi)核。
Non-KeepAlive test: ab -n 100000 -c : /100.html”>http://: /100.html
CGI 基準(zhǔn)測(cè)試
一個(gè)簡單的c cgi腳本(echo)被用來在這里測(cè)試。它是C CGI/FCGI在fcgi 2.4包中 的例子。用來打印出所有的cgi環(huán)境變量。
CGI Test: ab -n 3000 -c : /cgi-bin/echo”>http://: /cgi-bin/echoPHP腳本基準(zhǔn)測(cè)試: mod_php vs. FastCGI PHP
兩個(gè)簡單的php腳本被用來測(cè)試。一個(gè)是hello.php只輸出hello world。另一個(gè)是phpinfo.php,只調(diào)用phpinfo()。這里都沒有配置操作碼加速器(opcode accelerator)。因?yàn)樗麄儗?duì)這兩個(gè)簡單的php腳本沒有太大的影響。
hello.php test: ab -n 10000 -c : /phpinfo.php”>http://: /phpinfo.php
Perl 腳本基準(zhǔn)測(cè)試: mod_perl vs. lsperld
一個(gè)Hello World perl腳本,產(chǎn)生一個(gè)77 bytes的響應(yīng)體。被用來測(cè)試。
Linux Apache 2.0沒有測(cè)。因?yàn)樵谕粋€(gè)服務(wù)器上既為 1.3又為2.0安裝mod_perl太麻煩了。
Linux Apache 1.3 被配置成用 Apache::Registry去處理perl 腳本.
Lsperld 是一個(gè)Perl Fast CGI 腳本它可以運(yùn)行CGI perl 腳本在一個(gè) persistent Perl interpreter中, 就像 Apache mod_perl’s Apache::Registry, 編譯perl 腳本,cached 到內(nèi)存中。
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的穩(wěn)定性還沒有一個(gè)肯定的說法。
以后再對(duì)這個(gè)文檔進(jìn)行補(bǔ)充。翻譯的不正確的地方歡迎指出,可以參看原文。
【編輯推薦】