域名預(yù)訂/競(jìng)價(jià),好“米”不錯(cuò)過(guò)
Web服務(wù)器是直接影響網(wǎng)站性能的關(guān)鍵因素,也是每個(gè)站長(zhǎng)選擇網(wǎng)站運(yùn)營(yíng)環(huán)境時(shí)必然考慮的問(wèn)題。目前Web服務(wù)器市場(chǎng)產(chǎn)品眾多,最為主流和代表性的當(dāng)屬Apache、Nginx以及微軟的IIS。本文目的是通過(guò)Apache和Nginx進(jìn)行對(duì)比,從而幫助廣大用戶們能夠選擇適合自己的Web服務(wù)器。
1.簡(jiǎn)介
Apache:
Apache創(chuàng)建于1995年,并從 1999 年開始在 Apache 軟件基金會(huì)旗下進(jìn)行開發(fā)。Apache靈活、高效,擁有豐富的擴(kuò)展模塊,以及活躍的社區(qū)支持,成為目前世界上最為主流的開源免費(fèi)的Web服務(wù)器軟件。
Nginx:
Nginx是由俄羅斯軟件工程師Igor Sysoev編寫的免費(fèi)開源Web服務(wù)器。自從2004年上市以來(lái),nginx專注于高性能,高并發(fā)性和低內(nèi)存使用。并且其在負(fù)載均衡,緩存,訪問(wèn)和帶寬控制以及與各種應(yīng)用程序高效集成等方面的特性,都使得它逐步深受廣大用戶青睞。
下面是2017年11月份更新的web服務(wù)器市場(chǎng)份額對(duì)比圖:
數(shù)據(jù)來(lái)源:
2.對(duì)比
雖然Apache和Nginx各自的背景不同,但他們的作用目的是一致的,簡(jiǎn)單說(shuō)就是接收用戶請(qǐng)求,然后處理請(qǐng)求,最后將處理結(jié)果返回給用戶。
01.鏈接處理
Apache和Nginx最大的不同在于它們對(duì)連接的處理方式。Apache提供一系列多重處理模塊,通過(guò)這些多重處理模塊來(lái)使用操作系統(tǒng)的資源,對(duì)進(jìn)程和線程池進(jìn)行管理,控制處理用戶請(qǐng)求。
Apache提供了三種多重處理模塊:mpm_prefork、mpm_worker、mpm_envent,下面我們做簡(jiǎn)要說(shuō)明對(duì)比。
mpm_prefork:模塊產(chǎn)生眾多子進(jìn)程,每個(gè)子進(jìn)程是單線程的,每個(gè)線程鏈接一個(gè)請(qǐng)求,如此一對(duì)一的關(guān)系。所以如果請(qǐng)求數(shù)大于進(jìn)程數(shù)時(shí),服務(wù)器的性能就表現(xiàn)得差強(qiáng)人意了。
mpm_worker:與prefork不同,worker中子進(jìn)程是多線程的,每個(gè)線程管理一個(gè)用戶連接。線程數(shù)要多于進(jìn)程數(shù)量,這也就意味著新的連接能立刻得到一個(gè)空閑的線程,而不用等待進(jìn)程空閑。
mpm_event:該模塊與worker相似,區(qū)別在于event可以處理長(zhǎng)連接(keep-alive),以避免線程被請(qǐng)求長(zhǎng)期占用而造成資源浪費(fèi),同時(shí)也增強(qiáng)了高并發(fā)場(chǎng)景下的請(qǐng)求處理能力。
與Apache不同,Nginx是通過(guò)異步的、非阻塞的、事件驅(qū)動(dòng)的方式在實(shí)現(xiàn)的。Nginx的工作進(jìn)程是單線程的,每個(gè)線程可以異步的處理大量的用戶請(qǐng)求。下面是Nginx的工作原理圖:
圖片來(lái)源:
02.靜態(tài)與動(dòng)態(tài)內(nèi)容的處理
無(wú)論是靜態(tài)還是動(dòng)態(tài)內(nèi)容,Apache都可以處理,Apache具有內(nèi)置的解析和執(zhí)行各種動(dòng)態(tài)腳本語(yǔ)言(包括PHP,Python和Perl)的功能,無(wú)需借助外部處理器。
毫無(wú)疑問(wèn),動(dòng)態(tài)內(nèi)容處理恐怕是Nginx的痛點(diǎn)。Nginx處理動(dòng)態(tài)內(nèi)容的效率并不高,且需借助外部的處理器。所以如果您的站點(diǎn)具有很多動(dòng)態(tài)功能,Apache的表現(xiàn)可能會(huì)更切合你意。不過(guò)雖然與Apache相比Nginx的動(dòng)態(tài)內(nèi)容處理能力不佳,但其靜態(tài)內(nèi)容處理還是很高效的。
3.總結(jié)
Apache擁有豐富的模塊組件支持,穩(wěn)定性強(qiáng),BUG少,動(dòng)態(tài)內(nèi)容處理強(qiáng)。
Nginx輕量級(jí),占用資源少,負(fù)載均衡,高并發(fā)處理強(qiáng),靜態(tài)內(nèi)容處理高效。
存在即有道理,Apache和Nginx作為WEB服務(wù)各有所長(zhǎng),個(gè)人認(rèn)為二者并不存在將來(lái)誰(shuí)會(huì)完全替代誰(shuí)。關(guān)鍵在于用戶要認(rèn)真考慮清楚自己的應(yīng)用場(chǎng)景,根據(jù)自己的需求和情況來(lái)斟酌選擇哪個(gè)產(chǎn)品,適合自己的才是最好的。
申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!