电竞比分网-中国电竞赛事及体育赛事平台

分享

生產(chǎn)環(huán)境中的一些web server(主要是三巨頭apache, nginx, lighttpd)...

 Dawnxu 2009-07-23

關(guān)于生產(chǎn)環(huán)境中使用的Web Server

轉(zhuǎn)載請注明原文鏈接:http://blog.csdn.net/omohe/archive/2009/07/09/4335735.aspx

版本:v1.0  作者:OMO 最后修改時間:2009.07.09


1. Apache服務器和nginx的優(yōu)缺點:
我們之前大量使用Apache來作為HTTPServer。

Apache具有很優(yōu)秀的性能,而且通過模塊可以提供各種豐富的功能。

1)首先Apache對客戶端的響應是支持并發(fā)的 ,運行httpd這個daemon進程之后,它會同時產(chǎn)生多個孩子進程/線程,每個孩子進程/線程分別對客戶端的請求進行響應;
2)另外,Apache可以提供靜態(tài)和動態(tài)的服務 ,例如對于PHP的解析不是通過性能較差的CGI實現(xiàn)的而是通過支持PHP的模塊來實現(xiàn)的(通常為mod_php5,或者叫做apxs2)。
3)缺點:
因此通常稱為Apache的這種Server為process-based server ,也就是基于多進程的HTTPServer,因為它需要對每個用戶請求創(chuàng)建一個孩子進程/線程進行響應;
這樣的缺點是,如果并發(fā)的請求非常多(這在大型門戶網(wǎng)站是很常見的)就會需要非常多的線程,從而占用極多的系統(tǒng)資源CPU和內(nèi)存。因此對于并發(fā)處理不是Apache的強項。
4)解決方法:
目前來說出現(xiàn)了另一種WebServer,在并發(fā)方面表現(xiàn)更加優(yōu)越,叫做asynchronous servers異步服務器。最有名的為Nginx和Lighttpd。 所謂的異步服務器是事件驅(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的情況我們不用再多做介紹,非常常見的應用;
上面我們介紹到Apache對于PHP等服務器端腳本的支持是通過自己的模塊來實現(xiàn)的,而且性能優(yōu)越。
2)我們同樣可以單單使用nginx或者lighttpd來作為HTTPServer來使用。
nginx和lighttpd和Apache類似都通過各種模塊可以對服務器的功能進行豐富的擴展,同樣都是通過conf配置文件對各種選項進行配置。
對于PHP等,nginx和lighttpd都沒有內(nèi)置的模塊來對PHP進行支持,而是通過FastCGI來支持的。
Lighttpd 通過模塊可以提供CGI, FastCGI和SCGI等服務,Lighttpd is capable of automatically spawning FastCGI backends as well as using externally spawned processes.
nginx則沒有自己提供處理PHP的功能,需要通過第三方的模塊來提供對PHP進行FastCGI方式的集成。
nginx has module support for FastCGI via a built-in module, SCGI and WSGI via 3rd Party module. The user must be able to spawn the processes separately because nginx is not able to automatically spawn them [9]. nginx does not support normal CGI applications [10], which is actually a security benefit.

詳細可以參看:http://www./wiki/Lighttpd_vs_nginx

3.反向代理Reverse Proxy:
0) 代理服務器的概念proxy server:

代理服務器
的概念很容易理解,就是通常作為兩臺機器中間的機器,需要提供的功能往往有:
緩存caching,安全, 負載均衡load banlancing。
所謂的負載均衡就是,很多機器使用一個代理的時候,代理服務器需要對各個服務器進行均衡。
我們常見的代理是正向的代理,例如我們機房有20臺電腦要上網(wǎng),現(xiàn)在只有一個電腦可以上網(wǎng),那么可以使用這臺電腦作為代理服務器,所有通過網(wǎng)絡的數(shù)據(jù)傳輸都要經(jīng)過該代理服務器。

而反向代理,是和正向代理相反的 ,正向代理針對服務接收方用戶來說,反向代理或者叫做服務器端代理是針對服務器端的,意思是有多臺服務器,反向代理服務器對用戶的請求代理發(fā)送給其中的一臺服務器進行處理。
更多可以參看:http://en./wiki/Proxy_server

1) 實際中對于一個大型網(wǎng)站,我們通常使用很多臺sever來構(gòu)成一個cluster來對用戶的各種請求進行響應。
因此通常需要一臺或者多臺反向代理服務器來對多臺Server進行服務。
這個反向代理服務器需要提供的功能一般都包括:
    安全方面;緩存壓縮功能;負載均衡功能;
具體可以參看:http://en./wiki/Reverse_proxy

(需要注意反向代理服務器和防火墻優(yōu)點類似,但是防火墻一般只有安全方面的考慮,沒有緩存和負載均衡方面的功能。)

3) 綜上,實際中Web服務器端的架構(gòu)
通常是多臺Web服務器運行并行地提供服務;同時還需要在Web服務器前段部署一臺或者多臺反向代理服務器,一方面緩存一些靜態(tài)數(shù)據(jù),或者將Web服務器動態(tài)產(chǎn)生的一些內(nèi)容緩存,另一方面通過負載均衡功能,可以均勻地將用戶的并發(fā)請求傳遞給多臺Web服務器進行處理。
這樣一方面可以大大降低后面每臺Web服務器的負擔;另一方面可以實現(xiàn)多臺服務器的負載均衡。

4. 實際中使用nginx或者lighttpd當做反向代理服務器,后臺布置多臺ApacheHTTPServer:
1)上面說到,nginx和lighttpd的優(yōu)點在于速度快,輕量級,在處理多用戶并發(fā)方面要大大優(yōu)于Apache服務器。
因此我們通??梢园阉麄冏鳛榉聪虼矸掌鞣胖玫蕉嗯_的Apache Web服務器前段,來一方面緩存數(shù)據(jù),另一方面實現(xiàn)多臺服務器的負載均衡。
2)當然了Apache本身通過mod_proxy和mod_cache也可以實現(xiàn)反向代理和緩存功能 ,但是在處理高并發(fā)方面還是無法與nginx和lighttpd這種輕量的異步模式的服務器來比較。
3)另外,利用nginx和lighttpd的反響代理功能,我們可以通過設(shè)置其configuration文件,當客戶端請求的是靜態(tài)內(nèi)容(例如一些圖片,js,html文件等)的話,直接由nginx或者lighttpd進行響應;
如果需要訪問動態(tài)內(nèi)容(通常需要實時從數(shù)據(jù)庫中讀取)的話,則通過反向代理,nginx等可以將請求發(fā)送給后臺等待的Apache進行響應,然后Apache將相應的結(jié)果返回給nginx,后者再響應用戶的時候還可以進行緩存。
4)有時候還可以使用一些緩存的工具,例如Squid。
另外nginx也提供了對一些緩存功能的支持,例如memcache 等。
5)因此如果從圖形來分析的話,通常的架構(gòu)如下:
http:///archie/app-nginx-squid-nginx.html
http:///archie/app_nginx_squid.html
http://www./architecture.html

因此總結(jié),實際中,我們可以使用:nginx-squid-apache的方式來構(gòu)建server cluster;
也有一些人,純粹使用nginx代替了apache不再使用apache了...

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多