官术网_书友最值得收藏!

1.3 選擇Nginx的理由

選擇Nginx有如下一些理由。

1.3.1 它可以高并發(fā)連接

官方測(cè)試Nginx能夠支撐5萬并發(fā)連接,在實(shí)際生產(chǎn)環(huán)境中可支撐2~4萬并發(fā)連接數(shù)。這得益于Nginx使用了最新的epoll(Linux 2.6內(nèi)核)和kqueue(freebsd)網(wǎng)絡(luò)I/O模型,而Apache使用的則是傳統(tǒng)的select模型,其比較穩(wěn)定的Prefork模式為多進(jìn)程模式,需要經(jīng)常派生子進(jìn)程,所消耗的CPU等服務(wù)器資源要比Nginx高得多。

筆者曾完成6臺(tái)Web Server從Apache到Nginx服務(wù)器的遷移(這6臺(tái)Web Server搭建的是一個(gè)日均2500萬PV的分類信息網(wǎng)站,遷移前每臺(tái)服務(wù)器的平均系統(tǒng)負(fù)載為50~60、CPU使用率為70%~90%,遷移后平均系統(tǒng)負(fù)載為1~4,CPU使用率為20%~40%,見圖1-2。

圖1-2 遷移到Nginx后的系統(tǒng)負(fù)載與CPU使用率圖

由此可見,處理大量連接的讀寫,Apache所采用的select網(wǎng)絡(luò)I/O模型非常低效。

Libevent(一個(gè)事件觸發(fā)的網(wǎng)絡(luò)庫,適用于Windows、Linux、bsd等多種平臺(tái),內(nèi)部使用select、epoll、kqueue等系統(tǒng)調(diào)用管理事件機(jī)制)的一張測(cè)試結(jié)果圖,對(duì)select、epoll、kqueue等作了清晰的對(duì)比,結(jié)果自然是epoll(Linux 2.6內(nèi)核)和kqueue(freebsd)勝出,見圖1-3。

圖1-3 epoll、kqueue、select等網(wǎng)絡(luò)I/O模型性能測(cè)試對(duì)比圖

圖1-4顯示了在實(shí)際的生產(chǎn)環(huán)境中,Nginx支撐高達(dá)28000的活動(dòng)并發(fā)連接數(shù)。

圖1-4 生產(chǎn)環(huán)境下的Nginx活動(dòng)并發(fā)連接數(shù)據(jù)統(tǒng)計(jì)圖

1.3.2 內(nèi)存消耗少

Nginx + PHP(FastCGI)服務(wù)器在3萬并發(fā)連接下,開啟的10個(gè)Nginx進(jìn)程消耗150MB內(nèi)存(15MB×10=150MB),開啟的64個(gè)php-cgi進(jìn)程消耗1280MB內(nèi)存(20MB×64=1280MB),加上系統(tǒng)自身消耗的內(nèi)存,總共消耗不到2GB的內(nèi)存。如果服務(wù)器內(nèi)存較小,完全可以只開啟25個(gè)php-cgi進(jìn)程,這樣php-cgi消耗的總內(nèi)存數(shù)才500MB。用Webbench做壓力測(cè)試,在3萬并發(fā)連接下,訪問Nginx + PHP(FastCGI)服務(wù)器的PHP程序,運(yùn)行速度仍然飛快。

在實(shí)際的生產(chǎn)環(huán)境下,兩臺(tái)Nginx + PHP5(FastCGI)服務(wù)器運(yùn)行多個(gè)復(fù)雜性一般的純PHP動(dòng)態(tài)程序,從Nginx的日志可以統(tǒng)計(jì)出,單臺(tái)Nginx + PHP5(FastCGI)服務(wù)器處理PHP動(dòng)態(tài)程序的能力已經(jīng)超過“700次請(qǐng)求/秒”(見圖1-5),相當(dāng)于每天可以承受6000萬(700×60×60 ×24=60480000)的訪問量,而服務(wù)器的系統(tǒng)負(fù)載也不算高(見圖1-6)。

圖1-5 生產(chǎn)環(huán)境下的Nginx+PHP動(dòng)態(tài)程序處理速度統(tǒng)計(jì)圖

圖1-6 生產(chǎn)環(huán)境下的Nginx+PHP系統(tǒng)負(fù)載與CPU使用率圖

以下是這兩臺(tái)服務(wù)器的配置清單及運(yùn)行的程序說明:

服務(wù)器①:DELL PowerEdge 1950(兩個(gè)Intel(R) Xeon(R) 雙核CPU 5120 @ 1.86GHz,4GB內(nèi)存)。

服務(wù)器②:DELL PowerEdge 1950(一個(gè)Intel(R) Xeon(R) 雙核CPU 5140 @ 2.33GHz,4GB內(nèi)存)。

Web服務(wù)器:CentOS Linux 4.4 + Nginx 0.5.35 + PHP 5.2.6RC2(300 FastCGI Procees, unix-domain socket, with XCache)。

PHP程序內(nèi)容:大量Memcached讀寫操作,少量MySQL讀操作,大量文件隊(duì)列寫操作。

請(qǐng)求數(shù)統(tǒng)計(jì)方式:從Nginx訪問日志中,統(tǒng)計(jì)每分鐘的第15秒共有多少條日志記錄。

同等硬件環(huán)境下,Nginx的處理能力相當(dāng)于Apache的5~10倍。

1.3.3 成本低廉

購買F5 BIG-IP、NetScaler等硬件負(fù)載均衡交換機(jī)需要十多萬甚至幾十萬人民幣。而Nginx為開源軟件,采用的是2-clause BSD-like協(xié)議,可以免費(fèi)使用,并且可用于商業(yè)用途。

BSD開源協(xié)議是一個(gè)給使用者很大自由的協(xié)議。協(xié)議指出可以自由使用、修改源代碼,也可以將修改后的代碼作為開源或?qū)S熊浖侔l(fā)布。當(dāng)你發(fā)布使用了BSD協(xié)議的代碼,或者以BSD協(xié)議代碼為基礎(chǔ)做二次開發(fā)時(shí),須滿足三個(gè)條件:

(1)如果再發(fā)布的產(chǎn)品中包含源代碼,則源代碼中必須帶有原來代碼中的BSD協(xié)議。

(2)如果再發(fā)布的是二進(jìn)制類庫/軟件,則需要在類庫/軟件的文檔和版權(quán)聲明中包含原來代碼中的BSD協(xié)議。

(3)不可以用開源代碼的作者/機(jī)構(gòu)名字和原來產(chǎn)品的名字做市場(chǎng)推廣。

BSD代碼鼓勵(lì)代碼共享,但須尊重代碼作者的著作權(quán)。BSD由于允許使用者修改和重新發(fā)布代碼,也允許使用或在BSD代碼上開發(fā)商業(yè)軟件,并進(jìn)行發(fā)布和銷售,因此它是對(duì)商業(yè)集成很友好的協(xié)議。很多的公司、企業(yè)在選用開源產(chǎn)品的時(shí)候都會(huì)首選BSD協(xié)議,因?yàn)榭梢酝耆刂七@些第三方的代碼,在必要的時(shí)候可以修改或二次開發(fā)。

Nginx所采用的2-clause BSD-like license衍生自BSD協(xié)議,也就是刪掉了BSD協(xié)議的第3個(gè)條件——“不可以用開源代碼的作者/機(jī)構(gòu)名字和原來產(chǎn)品的名字做市場(chǎng)推廣”。、

1.3.4 其他理由

配置文件非常簡單

網(wǎng)絡(luò)跟程序一樣通俗易懂,即使非專業(yè)系統(tǒng)管理員也能看懂。

支持Rewrite重寫規(guī)則

能夠根據(jù)域名、URL的不同,將HTTP請(qǐng)求分到不同的后端服務(wù)器群組。

內(nèi)置的健康檢查功能

如果Nginx Proxy后端的某臺(tái)Web服務(wù)器宕機(jī)了,不會(huì)影響前端訪問。

節(jié)省帶寬

支持GZIP壓縮,可以添加瀏覽器本地緩存的Header頭。

穩(wěn)定性高

用于反向代理,宕機(jī)的概率微乎其微。

支持熱部署

Nginx支持熱部署。它的啟動(dòng)特別容易,并且?guī)缀蹩梢?天×24小時(shí)不間斷地運(yùn)行,即使運(yùn)行數(shù)個(gè)月也不需要重新啟動(dòng)。你還能夠在不間斷服務(wù)的情況下,對(duì)軟件版本進(jìn)行升級(jí)。

主站蜘蛛池模板: 唐山市| 富源县| 南江县| 加查县| 儋州市| 灵山县| 临泽县| 井研县| 元阳县| 香格里拉县| 突泉县| 宜春市| 博兴县| 宁德市| 清流县| 贡觉县| 东山县| 舒兰市| 罗甸县| 华亭县| 南昌市| 恭城| 南城县| 高平市| 鸡东县| 巫山县| 金山区| 普兰县| 突泉县| 彰化县| 繁昌县| 仪陇县| 武邑县| 巴东县| 东平县| 府谷县| 陈巴尔虎旗| 蓬溪县| 阿瓦提县| 永丰县| 汝州市|