《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動態(tài) > Nginx架構(gòu)介紹 Nginx服務(wù)器模型分析

Nginx架構(gòu)介紹 Nginx服務(wù)器模型分析

2019-01-14
關(guān)鍵詞: Nginx 服務(wù)器

  Nginx是一款免費的、開源的、高性能、模塊化、輕量級的HTTP服務(wù)器、反向代理服務(wù)器以及電子郵件(IMAP/POP3)代理服務(wù)器。

  很多大型的網(wǎng)站都使用Nginx,如:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。

o4YBAFw3B-iAExqbAACUxLkAmgE671.jpg

  1.Nginx的整體架構(gòu)簡介

  Nginx架構(gòu)介紹 Nginx服務(wù)器模型分析

  1)Nginx啟動后,會產(chǎn)生一個主進程,主進程執(zhí)行一系列的工作后會產(chǎn)生一個或者多個工作進程;

  2)在客戶端請求動態(tài)站點的過程中,Nginx服務(wù)器還涉及和后端服務(wù)器的通信。Nginx將接收到的Web請求通過代理轉(zhuǎn)發(fā)到后端服務(wù)器,由后端服務(wù)器進行數(shù)據(jù)處理和組織;

  3)Nginx為了提高對請求的響應(yīng)效率,降低網(wǎng)絡(luò)壓力,采用了緩存機制,將歷史應(yīng)答數(shù)據(jù)緩存到本地。保障對緩存文件的快速訪問;

  2. Nginx的模塊化

  高度模塊化的設(shè)計是 Nginx 的架構(gòu)基礎(chǔ)。Nginx嚴格遵循“高內(nèi)聚,低耦合”的原則,將服務(wù)器設(shè)計為多個模塊,每個模塊就是一個獨立的功能模塊,只負責(zé)自身的功能。

o4YBAFw3B-iAWpEYAACeXjG73RI491.jpg

  這5個模塊從上到下重要性依次遞減。

 ?。?)核心模塊

  核心模塊是Nginx服務(wù)器正常運行必不可少的模塊,如同操作系統(tǒng)的內(nèi)核。它提供了Nginx最基本的核心服務(wù)。像進程管理、權(quán)限控制、錯誤日志記錄等;

 ?。?)標(biāo)準HTTP模塊

  標(biāo)準HTTP模塊支持標(biāo)準的HTTP的功能;

  (3)可選HTTP模塊

  可選HTTP模塊主要用于擴展標(biāo)準的HTTP功能,讓Nginx能處理一些特殊的服務(wù);

  (4)郵件服務(wù)模塊

  郵件服務(wù)模塊主要用于支持Nginx的郵件服務(wù);

 ?。?)第三方模塊

  第三方模塊是為了擴展Nginx服務(wù)器應(yīng)用,完成開發(fā)者想要的功能;

  3.Nginx的Web請求處理機制

  從架構(gòu)設(shè)計上說,Nginx服務(wù)器是與眾不同的。其一在于它的模塊化設(shè)計;其二也是更重要的一點在于它對與客戶端請求的處理機制上。 Nginx請求處理機制結(jié)合多進程機制和異步非阻塞機制。

  1)多進程

  多進程方式指服務(wù)器每當(dāng)收到一個客戶端請求時就由服務(wù)器主進程生成一個子進程出來和客戶端建立連接進行交互,直到連接斷開,該子進程就結(jié)束了。多進程方式的優(yōu)點是設(shè)計簡單,各個子進程相對獨立,處理客戶端請求時彼此不受干擾;缺點是操作系統(tǒng)生成一個子進程需要進行內(nèi)存復(fù)制等操作,在資源和時間上會產(chǎn)生一定的開銷;當(dāng)有大量請求時,會導(dǎo)致系統(tǒng)性能下降;

  2)異步非阻塞

  發(fā)送方向接收方發(fā)送請求后,不用等待響應(yīng),可以繼續(xù)其他工作;接收方處理請求時進行的IO操作如果不能馬上得到結(jié)果,也不必等待,而是馬上返回去去做其他事情。當(dāng)IO操作完成以后,將完成狀態(tài)和結(jié)果通知接收方,接收方再響應(yīng)發(fā)送方。

  4. Nginx服務(wù)器的事件驅(qū)動模型

  從上面我們可以知道,Nginx服務(wù)器的工作進程調(diào)用IO后,就取進行其他工作了;當(dāng)IO調(diào)用返回后,會主動通知工作進程。像select/poll/epoll等這樣的系統(tǒng)調(diào)用就是用來支持這種解決方案的。這些系統(tǒng)調(diào)用也常被稱為事件驅(qū)動模型,他們提供了一種機制就只讓進程同時處理多個并發(fā)請求,不用關(guān)心IO調(diào)用的具體狀態(tài)。IO調(diào)用完全由事件驅(qū)動模型來管理。

  Nginx架構(gòu)介紹 Nginx服務(wù)器模型分析

o4YBAFw3B-mALM_EAABDcF9SJNc719.jpg

  如上圖所示,Nginx的事件驅(qū)動模型由事件收集器、事件發(fā)送器和事件處理器三部分基本單元組成。

  select,poll,epoll都是IO多路復(fù)用的機制。I/O多路復(fù)用就是通過一種機制,一個進程可以監(jiān)視多個描述符,一旦某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知程序進行相應(yīng)的讀寫操作。select,poll,epoll本質(zhì)上都是同步I/O,因為他們都需要在讀寫事件就緒后自己負責(zé)進行讀寫,也就是說這個讀寫過程是阻塞的。

  5. Nginx服務(wù)器Master-Worker進程處理模型

o4YBAFw3B-mAWu2hAABJ0twsUNQ516.jpg

  Nginx架構(gòu)介紹 Nginx服務(wù)器模型分析

  Nginx服務(wù)器在使用Master-Worker模型時,會涉及到主進程和工作進程的交互和工作進程之間的交互。這兩類交互都依賴于管道機制。

  Master-Worker交互

  這條管道與普通的管道不同,它是由主進程指向工作進程的單向管道,包含主進程向工作進程發(fā)出的指令,工作進程ID等;同時主進程與外界通過信號通信;

  Worker-Worker交互

  這種交互是和Master-Worker交互是基本一致的,但是會通過主進程。工作進程之間是相互隔離的,所以當(dāng)工作進程W1需要向工作進程W2發(fā)指令時,首先找到W2的進程ID,然后將正確的指令寫入指向W2的通道。W2收到信號采取相應(yīng)的措施。

  通過這篇文章,我們對Nginx服務(wù)器的整體架構(gòu)有了一個整體的認識。另外推薦大家多看看Nginx的源碼,以便能更好地領(lǐng)悟 Nginx的設(shè)計思想。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。