您好,登錄后才能下訂單哦!
小編給大家分享一下Nginx服務器架構是怎么樣的,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
1.Nginx的整體架構簡介
1)Nginx啟動后,會產生一個主進程,主進程執行一系列的工作后會產生一個或者多個工作進程;
2)在客戶端請求動態站點的過程中,Nginx服務器還涉及和后端服務器的通信。Nginx將接收到的Web請求通過代理轉發到后端服務器,由后端服務器進行數據處理和組織;
3)Nginx為了提高對請求的響應效率,降低網絡壓力,采用了緩存機制,將歷史應答數據緩存到本地。保障對緩存文件的快速訪問;
2. Nginx的模塊化
高度模塊化的設計是 Nginx 的架構基礎。Nginx嚴格遵循“高內聚,低耦合”的原則,將服務器設計為多個模塊,每個模塊就是一個獨立的功能模塊,只負責自身的功能。
這5個模塊從上到下重要性依次遞減。
(1)核心模塊
核心模塊是Nginx服務器正常運行必不可少的模塊,如同操作系統的內核。它提供了Nginx最基本的核心服務。像進程管理、權限控制、錯誤日志記錄等;
(2)標準HTTP模塊
標準HTTP模塊支持標準的HTTP的功能;
(3)可選HTTP模塊
可選HTTP模塊主要用于擴展標準的HTTP功能,讓Nginx能處理一些特殊的服務;
(4)郵件服務模塊
郵件服務模塊主要用于支持Nginx的郵件服務;
(5)第三方模塊
第三方模塊是為了擴展Nginx服務器應用,完成開發者想要的功能;
3.Nginx的Web請求處理機制
從架構設計上說,Nginx服務器是與眾不同的。其一在于它的模塊化設計;其二也是更重要的一點在于它對與客戶端請求的處理機制上。 Nginx請求處理機制結合多進程機制和異步非阻塞機制。
1)多進程
多進程方式指服務器每當收到一個客戶端請求時就由服務器主進程生成一個子進程出來和客戶端建立連接進行交互,直到連接斷開,該子進程就結束了。多進程方式的優點是設計簡單,各個子進程相對獨立,處理客戶端請求時彼此不受干擾;缺點是操作系統生成一個子進程需要進行內存復制等操作,在資源和時間上會產生一定的開銷;當有大量請求時,會導致系統性能下降;
2)異步非阻塞
發送方向接收方發送請求后,不用等待響應,可以繼續其他工作;接收方處理請求時進行的IO操作如果不能馬上得到結果,也不必等待,而是馬上返回去去做其他事情。當IO操作完成以后,將完成狀態和結果通知接收方,接收方再響應發送方。
4. Nginx服務器的事件驅動模型
從上面我們可以知道,Nginx服務器的工作進程調用IO后,就取進行其他工作了;當IO調用返回后,會主動通知工作進程。像select/poll/epoll等這樣的系統調用就是用來支持這種解決方案的。這些系統調用也常被稱為事件驅動模型,他們提供了一種機制就只讓進程同時處理多個并發請求,不用關心IO調用的具體狀態。IO調用完全由事件驅動模型來管理。
如上圖所示,Nginx的事件驅動模型由事件收集器、事件發送器和事件處理器三部分基本單元組成。
select,poll,epoll都是IO多路復用的機制。I/O多路復用就是通過一種機制,一個進程可以監視多個描述符,一旦某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知程序進行相應的讀寫操作。select,poll,epoll本質上都是同步I/O,因為他們都需要在讀寫事件就緒后自己負責進行讀寫,也就是說這個讀寫過程是阻塞的。
5. Nginx服務器Master-Worker進程處理模型
Nginx服務器在使用Master-Worker模型時,會涉及到主進程和工作進程的交互和工作進程之間的交互。這兩類交互都依賴于管道機制。
Master-Worker交互
這條管道與普通的管道不同,它是由主進程指向工作進程的單向管道,包含主進程向工作進程發出的指令,工作進程ID等;同時主進程與外界通過信號通信;
Worker-Worker交互
這種交互是和Master-Worker交互是基本一致的,但是會通過主進程。工作進程之間是相互隔離的,所以當工作進程W1需要向工作進程W2發指令時,首先找到W2的進程ID,然后將正確的指令寫入指向W2的通道。W2收到信號采取相應的措施。
以上是“Nginx服務器架構是怎么樣的”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。