App下載

Apache-HTTP和Nginx哪家引擎比較強

猿友 2020-07-31 15:29:09 瀏覽數(shù) (2650)
反饋

本文分別介紹了Apache-HTTPNginx這兩個引擎,然后對比一下他們的差別。有什么不足之處歡迎大家補充。

HTTP中間件

當我們在瀏覽器中輸入一個網(wǎng)頁鏈接后,瀏覽器基于HTTP(s)傳輸協(xié)議向相應(yīng)的服務(wù)器發(fā)送一個請求,服務(wù)器收到相應(yīng)的請求后經(jīng)過處理,返回相應(yīng)的信息給瀏覽器,然后由瀏覽器解析http中的內(nèi)容,以網(wǎng)頁的形式表現(xiàn)出來。

服務(wù)器負責接收請求,并在處理之后返回相應(yīng)的數(shù)據(jù),而其中又可以細分為處理http連接的服務(wù)部分和執(zhí)行服務(wù)內(nèi)容的應(yīng)用部分(WordPress使用PHP生成需要的頁面,就屬于應(yīng)用部分)

而不論應(yīng)用部分執(zhí)行的是何種應(yīng)用,處理http連接的部分幾乎是相同的,所以出現(xiàn)了專門處理http連接的中間件,目前最常見的是ApacheNginx。

Apache

正式名稱是“Apache HTTP Server”,是一款開源的HTTP服務(wù)器中間件,誕生于1995年,曾經(jīng)是HTTP服務(wù)領(lǐng)域的龍頭老大,擁有大量的用戶和豐富的社區(qū)資源。Apache的一大優(yōu)點就是方便與Wordpress等CMS軟件進行集成,只需要簡單的設(shè)定就能搭建一個基于CMS的網(wǎng)站。

Apache的內(nèi)部處理模型

內(nèi)部構(gòu)造方面,Apache采用多進程的方式,每有一個連接就會為這個連接開辟一個進程,專門用于處理這個連接上的請求,直到連接結(jié)束。這樣做的好處是:

  • 來自不同客戶端的連接會立刻得到相應(yīng)且互不干擾,而且不會因為某一個服務(wù)占用了較長的時間而使其它的連接得不到響應(yīng)。

但是缺點也是顯而易見的:

  • 當同時訪問數(shù)比較多的時候,Apache會建立大量的進程,占用過多的內(nèi)存資源。
  • 大量線程間的調(diào)度也會造成CPU處理能力的大量浪費。

由此產(chǎn)生了被稱為C10K的難題,C即客戶端(Client),10K是指1萬,即不論服務(wù)器的性能和網(wǎng)絡(luò)帶寬有多高,Apache都難以同時處理1萬個以上的連接。

Nginx

讀作Engine-X,和Apache一樣也是用于HTTP服務(wù)的開源中間件,誕生于2004年。NginxApache的歷史要短,但是正因為是后來者,Nginx吸取了Apache的教訓,在設(shè)計初期就考慮到了處理大量連接時的效率問題,解決了諸如C10K等隨著互聯(lián)網(wǎng)規(guī)模壯大而產(chǎn)生的難題。

Nginx的內(nèi)部處理模型

Nginx采用了非阻塞IO和異步消息驅(qū)動的方式,即在稱作worker的線程中使用循環(huán)來處理隊列中的連接請求。而根據(jù)硬件的情況,可以設(shè)定多個worker線程,充分利用CPU的核心資源。

  • 解決了處理大量連接時消耗內(nèi)存過多,調(diào)度效率低下的問題,同時還能充分的利用所有的CPU核心。在相同硬件下處理并發(fā)連接的能力是Apache的10到100倍。

但是Nginx這種方式也不是沒有缺點。

  • 當服務(wù)器單核性能較差時,基于CMS的動態(tài)網(wǎng)站可能需要較長的時間來執(zhí)行一個請求,此時來自其他客戶端的請求將無法立即被執(zhí)行。當CPU核心數(shù)較少,worker線程不足時會更加明顯。

好在現(xiàn)在服務(wù)器的性能越來越強,在AMD的帶領(lǐng)下CPU核心數(shù)也越來越多,Nginx的缺點足以被彌補,而高效的優(yōu)勢也愈發(fā)顯現(xiàn)出來。

綜合對比

Apache Nginx處理能力有限10-100倍是否會被復雜任務(wù)阻塞否有可能會設(shè)定難度比較簡單相對復雜社區(qū)資源豐富相對較少

近年來,Nginx的市場占有率不斷提高,2019年已經(jīng)達到了和Apache持平的水平。而對于有極大訪問量的大型網(wǎng)站,可以看到訪問量越大,Nginx的占比也就越高。這也從側(cè)面印證了Nginx在處理大量訪問時的優(yōu)越性能。

Nginx與Apache-HTTP綜合對比

負載均衡

Nginx除了可以作為HTTP服務(wù)器使用,其強大的反向代理功能還被廣泛地用作負載均衡前端服務(wù)器,逐漸取代了基于硬件的負載均衡器。

Nginx中可以配置若干個后端服務(wù)器,Nginx在收到HTTP請求之后按照一定規(guī)則(輪詢,IP哈希,優(yōu)先隨機)等將請求轉(zhuǎn)發(fā)給后端服務(wù)器,實現(xiàn)負載在多臺服務(wù)器上的平均或加權(quán)分配。

同時作為負載均衡的前端還能緩存后端返回的數(shù)據(jù),緩解后端服務(wù)器的壓力。前端采用Nginx做負載均衡限制每個服務(wù)器的連接數(shù),后端服務(wù)器運行Apache的模式也并不少見。

硬件負載均衡器的業(yè)界大佬F5 networks在2019年收購了Nginx,推出了包含收費服務(wù)的負載均衡解決方案Nginx+。

以上是關(guān)于apachenginx的對比,希望對于剛接觸apahcenginx的人有一定的幫助。使用一個產(chǎn)品不能糊里糊涂的使用,我們需要了解其優(yōu)點和缺點,這樣才能更好的使用它們。你也可以了解更多相關(guān)知識

Nginx 入門指南:http://o2fo.com/nginx/

0 人點贊