Apache具有很優(yōu)秀的性能,而且通過模塊可以提供各種豐富的功能。
1)首先Apache對客戶端的響應(yīng)是支持并發(fā)的 ,運行httpd這個daemon進(jìn)程之后,它會同時產(chǎn)生多個孩子進(jìn)程/線程,每個孩子進(jìn)程/線程分別對客戶端的請求進(jìn)行響應(yīng);
2)另外,Apache可以提供靜態(tài)和動態(tài)的服務(wù) ,例如對于PHP的解析不是通過性能較差的CGI實現(xiàn)的而是通過支持PHP的模塊來實現(xiàn)的(通常為mod_php5,或者叫做apxs2)。
3)缺點: 因此通常稱為Apache的這種Server為
process-based server ,也就是基于多進(jìn)程的HTTPServer,因為它需要對每個用戶請求創(chuàng)建一個孩子進(jìn)程/線程進(jìn)行響應(yīng);
這樣的缺點是,如果并發(fā)的請求非常多(這在大型門戶網(wǎng)站是很常見的)就會需要非常多的線程,從而占用極多的系統(tǒng)資源CPU和內(nèi)存。
因此對于并發(fā)處理不是Apache的強項。 4)解決方法: 目前來說出現(xiàn)了另一種WebServer,
在并發(fā)方面表現(xiàn)更加優(yōu)越,叫做asynchronous servers異步服務(wù)器。最有名的為Nginx和Lighttpd。 所謂的異步服務(wù)器是事件驅(qū)動程序模式的event-driven,除了用戶的并發(fā)請求通常只需要一個單一的或者幾個線程。因此占用系統(tǒng)資源就非常少。這幾種又被稱為lightweight web server。
舉例,對于10,000的并發(fā)連接請求,nginx可能僅僅使用幾M的內(nèi)存;而Apache可能需要使用幾百M的內(nèi)存資源。
2. 實際中單一的使用: 1)關(guān)于單一使用Apache來作為HTTPServer的情況我們不用再多做介紹,非常常見的應(yīng)用; 上面我們介紹到Apache對于PHP等服務(wù)器端腳本的支持是通過自己的模塊來實現(xiàn)的,而且性能優(yōu)越。
2)我們同樣可以單單使用nginx或者lighttpd來作為HTTPServer來使用。 nginx和lighttpd和Apache類似都通過各種模塊可以對服務(wù)器的功能進(jìn)行豐富的擴展,同樣都是通過conf配置文件對各種選項進(jìn)行配置。
對于PHP等,nginx和lighttpd都沒有內(nèi)置的模塊來對PHP進(jìn)行支持,而是通過FastCGI來支持的。 Lighttpd通過模塊可以提供CGI, FastCGI和SCGI等服務(wù),Lighttpd is capable of automaticallyspawning FastCGI backends as well as using externally spawnedprocesses.
nginx則沒有自己提供處理PHP的功能,需要通過第三方的模塊來提供對PHP進(jìn)行FastCGI方式的集成。
nginxhas module support for FastCGI via a built-in module, SCGI and WSGI via3rd Party module. The user must be able to spawn the processesseparately because nginx is not able to automatically spawn them [9].nginx does not support normal CGI applications [10], which is actuallya security benefit.
詳細(xì)可以參看:
http://www.wikivs.com/wiki/Lighttpd_vs_nginx 3.反向代理Reverse Proxy: 0) 代理服務(wù)器的概念proxy server:
代理服務(wù)器 的概念很容易理解,就是通常作為兩臺機器中間的機器,需要提供的功能往往有:
緩存caching,安全, 負(fù)載均衡load banlancing。
所謂的負(fù)載均衡就是,很多機器使用一個代理的時候,代理服務(wù)器需要對各個服務(wù)器進(jìn)行均衡。
我們常見的代理是正向的代理,例如我們機房有20臺電腦要上網(wǎng),現(xiàn)在只有一個電腦可以上網(wǎng),那么可以使用這臺電腦作為代理服務(wù)器,所有通過網(wǎng)絡(luò)的數(shù)據(jù)傳輸都要經(jīng)過該代理服務(wù)器。
而反向代理,是和正向代理相反的 ,正向代理針對服務(wù)接收方用戶來說,反向代理或者叫做服務(wù)器端代理是針對服務(wù)器端的,意思是有多臺服務(wù)器,反向代理服務(wù)器對用戶的請求代理發(fā)送給其中的一臺服務(wù)器進(jìn)行處理。
更多可以參看:
http://en.wikipedia.org/wiki/Proxy_server 1) 實際中對于一個大型網(wǎng)站,我們通常使用很多臺sever來構(gòu)成一個cluster來對用戶的各種請求進(jìn)行響應(yīng)。
因此
通常需要一臺或者多臺反向代理服務(wù)器來對多臺Server進(jìn)行服務(wù)。 這個反向代理服務(wù)器需要提供的功能一般都包括:
安全方面;緩存壓縮功能;負(fù)載均衡功能; 具體可以參看:
http://en.wikipedia.org/wiki/Reverse_proxy (需要注意反向代理服務(wù)器和防火墻優(yōu)點類似,但是防火墻一般只有安全方面的考慮,沒有緩存和負(fù)載均衡方面的功能。)
3) 綜上,實際中Web服務(wù)器端的架構(gòu) 通常是多臺Web服務(wù)器運行并行地提供服務(wù);同時還需要在Web服務(wù)器前段部署一臺或者多臺反向代理服務(wù)器,一方面緩存一些靜態(tài)數(shù)據(jù),或者將Web服務(wù)器動態(tài)產(chǎn)生的一些內(nèi)容緩存,另一方面通過負(fù)載均衡功能,可以均勻地將用戶的并發(fā)請求傳遞給多臺Web服務(wù)器進(jìn)行處理。 這樣一方面可以大大降低后面每臺Web服務(wù)器的負(fù)擔(dān);另一方面可以實現(xiàn)多臺服務(wù)器的負(fù)載均衡。 4. 實際中使用nginx或者lighttpd當(dāng)做反向代理服務(wù)器,后臺布置多臺ApacheHTTPServer: 1)上面說到,nginx和lighttpd的優(yōu)點在于速度快,輕量級,在處理多用戶并發(fā)方面要大大優(yōu)于Apache服務(wù)器。 因此我們通??梢园阉麄冏鳛榉聪虼矸?wù)器放置到多臺的Apache Web服務(wù)器前段,來一方面緩存數(shù)據(jù),另一方面實現(xiàn)多臺服務(wù)器的負(fù)載均衡。
2)當(dāng)然了Apache本身通過mod_proxy和mod_cache也可以實現(xiàn)反向代理和緩存功能 ,但是在處理高并發(fā)方面還是無法與nginx和lighttpd這種輕量的異步模式的服務(wù)器來比較。
3)另外,利用nginx和lighttpd的反響代理功能,我們可以通過設(shè)置其configuration文件,當(dāng)客戶端請求的是靜態(tài)內(nèi)容(例如一些圖片,js,html文件等)的話,直接由nginx或者lighttpd進(jìn)行響應(yīng); 如果需要訪問動態(tài)內(nèi)容(通常需要實時從數(shù)據(jù)庫中讀取)的話,則通過反向代理,nginx等可以將請求發(fā)送給后臺等待的Apache進(jìn)行響應(yīng),然后Apache將相應(yīng)的結(jié)果返回給nginx,后者再響應(yīng)用戶的時候還可以進(jìn)行緩存。 4)有時候還可以使用一些緩存的工具,例如Squid。 另外nginx也提供了對一些緩存功能的支持,例如
memcache 等。
5)因此如果從圖形來分析的話,通常的架構(gòu)如下: http://sudone.com/archie/app-nginx-squid-nginx.html http://sudone.com/archie/app_nginx_squid.html http://www.linuxvirtualserver.org/architecture.html 因此總結(jié),實際中,我們可以使用:
nginx-squid-apache的方式來構(gòu)建server cluster; 也有一些人,純粹使用nginx代替了apache不再使用apache了...