Nginx人氣的迅猛提升與Apache在Web服務(wù)器市場(chǎng)份額領(lǐng)域的穩(wěn)步下降不禁引發(fā)諸多猜測(cè),很多從業(yè)者認(rèn)為這種趨勢(shì)將使新部署流程中的方案選擇變得更為清晰。事實(shí)上,我最近正好在忙一項(xiàng)規(guī)模較大的服務(wù)器設(shè)置任務(wù),并且最終選擇了Nginx作為自己的得力工具——但我的選擇是否正確呢?
就目前的形勢(shì)來(lái)看,互聯(lián)網(wǎng)與Apache之間的甜蜜感情似乎已經(jīng)破碎,這意味著在過(guò)去十幾年中始終統(tǒng)治這片大陸的王者終于開(kāi)始顯露疲態(tài)。盡管Apache仍然支撐著全球大部分網(wǎng)站,但在過(guò)去幾年中Nginx(engine-x)正不斷蠶食著前者的市場(chǎng)份額。
憑借著其事件驅(qū)動(dòng)設(shè)計(jì),Nginx已經(jīng)超越了Apache的過(guò)程驅(qū)動(dòng)設(shè)計(jì)、成為更適合當(dāng)前計(jì)算機(jī)硬件狀況的高人氣解決方案。從結(jié)果角度講,特定情況下Nginx能夠在同樣的硬件之上實(shí)現(xiàn)超越Apache的并發(fā)客戶支持?jǐn)?shù)量與更高的數(shù)據(jù)吞吐能力。但大家不應(yīng)該單純將此作為評(píng)判標(biāo)準(zhǔn),我們還應(yīng)該考慮自己到底在利用服務(wù)器設(shè)備做些什么。
Nginx在處理靜態(tài)內(nèi)容時(shí)擁有優(yōu)勢(shì),其執(zhí)行效率比Apache更高,但Apache的靜態(tài)內(nèi)容處理速度同樣不慢。靜態(tài)內(nèi)容對(duì)于任何一種Web服務(wù)器來(lái)說(shuō)都是最簡(jiǎn)單的處理項(xiàng)目,因此高流量站點(diǎn)往往傾向于利用更加復(fù)雜的后端系統(tǒng)來(lái)生成靜態(tài)內(nèi)容,從而更快且更全面地滿足用戶需求。不過(guò)PHP的介入給這一流程帶來(lái)了更多難題。
最重要的問(wèn)題在于,當(dāng)我們選擇一套Web服務(wù)器設(shè)置方案時(shí),最重要的問(wèn)題是搞清楚自己會(huì)如何使用這臺(tái)服務(wù)器。如果大家只需要用它來(lái)支持單一站點(diǎn),而且這臺(tái)服務(wù)器中運(yùn)行著一套專門充當(dāng)web服務(wù)器的獨(dú)立數(shù)據(jù)庫(kù)系統(tǒng),那么選擇Nginx無(wú)疑更加明智——畢竟Nginx在流量處理能力上要高于Apache。除此之外,Nginx本身提供配置功能,從而在必要時(shí)以比Apache更簡(jiǎn)單的方式實(shí)現(xiàn)規(guī)模擴(kuò)展,這又是另一項(xiàng)優(yōu)勢(shì)。不過(guò)如果大家打算在這臺(tái)服務(wù)器中托管多個(gè)站點(diǎn)以及大量應(yīng)用程序,例如多個(gè)Wordpress站點(diǎn),那么答案就沒(méi)那么明確了。在這種情況下,性能瓶頸可能更多來(lái)自PHP而非web服務(wù)器的具體選擇。
面對(duì)這種情況,大家可能會(huì)這樣考慮:好吧,如果PHP對(duì)于這兩類web服務(wù)器都是難題,而且Nginx在處理靜態(tài)文件時(shí)速度更快,為什么不直接選擇Nginx呢?之所以令人糾結(jié),是因?yàn)锳pache擁有屬于自己的獨(dú)特優(yōu)勢(shì)。這是一套成熟的平臺(tái),而且在Linux領(lǐng)域擁有相當(dāng)廣泛的支持方案。很多在Apache中可以直接使用的功能,在Nginx這邊也許需要大家經(jīng)過(guò)認(rèn)真研究與配置。不少控制平臺(tái)與自動(dòng)化配置工具目前在Nginx當(dāng)中還不可用,大家的技術(shù)團(tuán)隊(duì)可能也更熟悉Apache并擅長(zhǎng)診斷其中出現(xiàn)的問(wèn)題。這些都是需要認(rèn)真考量的重要優(yōu)勢(shì)。
在大多數(shù)情況下,Nginx所帶來(lái)的性能提升其實(shí)都可以忽略不計(jì)。除非需要托管數(shù)以十億計(jì)的海量站點(diǎn),否則流量?jī)?yōu)勢(shì)基本上很難得到體現(xiàn)。大家應(yīng)該將實(shí)際要求與現(xiàn)有技能儲(chǔ)備作為主要參考因素。如果我們希望在自己的個(gè)人博客上使用一項(xiàng)新技術(shù)作為學(xué)習(xí)實(shí)踐,那么選擇任何一套喜歡的平臺(tái)都是沒(méi)有問(wèn)題的。如果大家要設(shè)置的是一臺(tái)托管服務(wù)器或者關(guān)鍵性業(yè)務(wù)應(yīng)用程序,那么審視選項(xiàng)時(shí)則最好慎重一些。僅僅出于速度的考慮就將所有工作一股腦交給Nginx,這樣的判斷方式顯然很容易引發(fā)嚴(yán)重后果。
最后,最好的處理策略在于將不同技術(shù)結(jié)合起來(lái),而非簡(jiǎn)單依賴單一一種web服務(wù)器平臺(tái)。需要處理大量流量的站點(diǎn)要求在架構(gòu)中引入多層機(jī)制,而web服務(wù)器僅僅是這套綜合性體系當(dāng)中的一小部分。多數(shù)普通站點(diǎn)應(yīng)該優(yōu)先考慮技術(shù)人員更熟悉的解決方案,并對(duì)需要重視的特定類型性能表現(xiàn)作出橫向比較。Apache仍然是一套出色的引擎,而且保持著較高的人氣。隨著不斷發(fā)展與成熟,Nginx也將逐步完善、甚至在未來(lái)五年內(nèi)一舉超越Apache。
要在二者之間作出選擇,正確的答案是視情況而定。如果大家打算托管Wordpress這類非常常見(jiàn)的站點(diǎn)場(chǎng)景,我認(rèn)為這兩套方案都能帶來(lái)卓越的表現(xiàn)。利用Nginx對(duì)站點(diǎn)內(nèi)容進(jìn)行緩存處理(建議大家這樣做)能夠?qū)崿F(xiàn)性能改進(jìn),但這也意味著需要犧牲Apache在開(kāi)箱即用、兼容性以及低難度學(xué)習(xí)曲線方面的優(yōu)勢(shì)。如果大家需要運(yùn)行PHP應(yīng)用程序,那么使用APC等操作碼緩存機(jī)制帶來(lái)的提升要遠(yuǎn)高于在兩種web服務(wù)器之間糾結(jié)。我的觀點(diǎn)是,Nginx并不是一味包治百病的靈藥。僅僅因?yàn)锳pache年事已高、不像新生代Nginx那么酷而輕易作出選擇往往會(huì)最終令自己陷入困境。