版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 Nginx服務(wù)器的內(nèi)部核心架構(gòu)設(shè)計(jì)目 錄 TOC o 1-3 h z u HYPERLINK l _Toc7281622 一、前言 PAGEREF _Toc7281622 h 3 HYPERLINK l _Toc7281623 二、Nginx的特點(diǎn) PAGEREF _Toc7281623 h 3 HYPERLINK l _Toc7281624 三、Nginx的整體架構(gòu) PAGEREF _Toc7281624 h 4 HYPERLINK l _Toc7281625 四、Nginx的模塊化設(shè)計(jì) PAGEREF _Toc7281625 h 6 HYPERLINK l _Toc7281626 五、代
2、理設(shè)計(jì)中的正向代理和反向代理 PAGEREF _Toc7281626 h 7 HYPERLINK l _Toc7281627 六、Nginx事件驅(qū)動模型 PAGEREF _Toc7281627 h 9 HYPERLINK l _Toc7281628 七、Nginx的請求方式處理 PAGEREF _Toc7281628 h 10 HYPERLINK l _Toc7281629 八、Nginx進(jìn)程處理模型 PAGEREF _Toc7281629 h 11 HYPERLINK l _Toc7281630 九、小結(jié) PAGEREF _Toc7281630 h 14一、前言NginxNgine X,是一
3、款免費(fèi)的、自由的、開源的、高性能HTTP服務(wù)器和反向代理服務(wù)器;也是一個IMAP、POP3、SMTP代理服務(wù)器;Nginx以其高性能、穩(wěn)定性、豐富的功能、簡單的配置和低資源消耗而聞名。也就是說Nginx本身就可以托管網(wǎng)站(類似于Tomcat一樣),進(jìn)行Http服務(wù)處理,也可以作為反向代理服務(wù)器 、負(fù)載均衡器和HTTP緩存。Nginx 解決了服務(wù)器的C10K(就是在一秒之內(nèi)連接客戶端的數(shù)目為10k即1萬)問題。它的設(shè)計(jì)不像傳統(tǒng)的服務(wù)器那樣使用線程處理請求,而是一個更加高級的機(jī)制事件驅(qū)動機(jī)制,是一種異步事件驅(qū)動結(jié)構(gòu)。二、Nginx的特點(diǎn)跨平臺:可以在大多數(shù)Unix like 系統(tǒng)編譯運(yùn)行。而且也有
4、Windows的移植版本。配置異常簡單:非常的簡單,易上手。非阻塞、高并發(fā)連接:數(shù)據(jù)復(fù)制時,磁盤I/O的第一階段是非阻塞的。官方測試能支持5萬并發(fā)連接,實(shí)際生產(chǎn)中能跑23萬并發(fā)連接數(shù)(得益于Nginx采用了最新的epoll事件處理模型(消息隊(duì)列)。Nginx代理和后端Web服務(wù)器間無需長連接;Nginx接收用戶請求是異步的,即先將用戶請求全部接收下來,再一次性發(fā)送到后端Web服務(wù)器,極大減輕后端Web服務(wù)器的壓力。發(fā)送響應(yīng)報文時,是邊接收來自后端Web服務(wù)器的數(shù)據(jù),邊發(fā)送給客戶端。網(wǎng)絡(luò)依賴性低,理論上只要能夠ping通就可以實(shí)施負(fù)載均衡,而且可以有效區(qū)分內(nèi)網(wǎng)、外網(wǎng)流量。支持內(nèi)置服務(wù)器檢測。Ng
5、inx能夠根據(jù)應(yīng)用服務(wù)器處理頁面返回的狀態(tài)碼、超時信息等檢測服務(wù)器是否出現(xiàn)故障,并及時返回錯誤的請求重新提交到其它節(jié)點(diǎn)上。此外還有內(nèi)存消耗小、成本低廉(比F5硬件負(fù)載均衡器廉價太多)、節(jié)省帶寬、穩(wěn)定性高等特點(diǎn)。三、Nginx的整體架構(gòu)1、模塊化設(shè)計(jì)Nginx 的Worker 進(jìn)程,包括核心和功能性模塊 ,核心模塊負(fù)責(zé)維持一個運(yùn)行循環(huán)( run-loop ),執(zhí)行網(wǎng)絡(luò)請求處理的不同階段的模塊功能,比如:存儲讀寫、內(nèi)容傳輸 、網(wǎng)絡(luò)讀寫 、外出過濾 ,以及將請求發(fā)往上游服務(wù)器等。而其代碼的模塊化設(shè)計(jì) ,也使得我們可以根據(jù)需要對功能模塊進(jìn)行適當(dāng)?shù)倪x擇和修改 ,編譯成具有特定功能的服務(wù)器。2、代理設(shè)計(jì)代
6、理(proxy)設(shè)計(jì),可以說是 Nginx 深入骨髓的設(shè)計(jì),無論是對于HTTP,還是對于Memcache 、Redis、FastCGI 等的網(wǎng)絡(luò)請求或響應(yīng),本質(zhì)上都采用了代理機(jī)制 。所以,Nginx 天生就是高性能的代理服務(wù)器 。3、事件驅(qū)動模型基于異步及非阻塞的事件驅(qū)動模型 ,可以說是 Nginx 得以獲得 高并發(fā) 、 高性能 的關(guān)鍵因素,同時也得益于對 Linux 、 Solaris 及類 BSD 等操作系統(tǒng)內(nèi)核中 事件通知 及 I/O 性能增強(qiáng)功能 的采用,如kqueue 、 epoll 及 event ports 。4、主進(jìn)程模型Nginx 啟動時,會生成兩種類型的進(jìn)程,一個是主進(jìn)程
7、( Master ), 一個或多個工作進(jìn)程 ( Worker )。主進(jìn)程并不處理網(wǎng)絡(luò)請求,主要負(fù)責(zé)調(diào)度工作進(jìn)程 ,也就是圖示的3項(xiàng):加載配置 、 啟動工作進(jìn)程及非停升級。所以Nginx啟動以后,查看操作系統(tǒng)的進(jìn)程列表,我們就能看到至少有兩個Nginx進(jìn)程。5、工作進(jìn)程模型服務(wù)器實(shí)際處理網(wǎng)絡(luò)請求及響應(yīng)的是工作進(jìn)程,在類Unix 系統(tǒng)上,Nginx可以配置多個Worker ,而每個Worker 進(jìn)程都可以同時處理數(shù)以千計(jì)的網(wǎng)絡(luò)請求。四、Nginx的模塊化設(shè)計(jì)高度模塊化的設(shè)計(jì)是 Nginx 的架構(gòu)基礎(chǔ)。 Nginx 服務(wù)器被分解為多個模塊 ,每個模塊就是一個功能模塊 ,只負(fù)責(zé)自身的功能,模塊之間嚴(yán)格
8、遵循 “高內(nèi)聚,低耦合” 的原則。1、核心模塊核心模塊是 Nginx 服務(wù)器正常運(yùn)行必不可少的模塊,提供錯誤日志記錄 、配置文件解析、事件驅(qū)動機(jī)制、進(jìn)程管理等核心功能。2、標(biāo)準(zhǔn)HTTP模塊標(biāo)準(zhǔn) HTTP 模塊提供 HTTP 協(xié)議解析相關(guān)的功能,比如: 端口配置 、 網(wǎng)頁編碼設(shè)置 、 HTTP響應(yīng)頭設(shè)置 等等。3、可選HTTP模塊可選 HTTP 模塊主要用于 擴(kuò)展 標(biāo)準(zhǔn)的 HTTP 功能,讓 Nginx 能處理一些特殊的服務(wù),比如: Flash 多媒體傳輸 、解析 GeoIP 請求、 網(wǎng)絡(luò)傳輸壓縮 、 安全協(xié)議 SSL 支持等。4、郵件服務(wù)模塊郵件服務(wù)模塊主要用于支持 Nginx 的 郵件服務(wù)
9、,包括對 POP3 協(xié)議、 IMAP 協(xié)議和 SMTP協(xié)議的支持。5、第三方模塊第三方模塊是為了擴(kuò)展 Nginx 服務(wù)器應(yīng)用,完成開發(fā)者自定義功能,比如: Json 支持、 Lua 支持等。五、代理設(shè)計(jì)中的正向代理和反向代理首先,代理服務(wù)器一般指局域網(wǎng)內(nèi)部的機(jī)器通過代理服務(wù)器發(fā)送請求到互聯(lián)網(wǎng)上的服務(wù)器,代理服務(wù)器一般作用在客戶端。例如:GoAgent翻墻軟件。我們的客戶端在進(jìn)行翻墻操作的時候,我們使用的正是正向代理,通過正向代理的方式,在我們的客戶端運(yùn)行一個軟件,將我們的HTTP請求轉(zhuǎn)發(fā)到其他不同的服務(wù)器端,實(shí)現(xiàn)請求的分發(fā)。反向代理服務(wù)器作用在服務(wù)器端,它在服務(wù)器端接收客戶端的請求,然后將請求
10、分發(fā)給具體的服務(wù)器進(jìn)行處理,然后再將服務(wù)器的相應(yīng)結(jié)果反饋給客戶端。Nginx就是一個反向代理服務(wù)器軟件。img從上圖可以看出:客戶端必須設(shè)置正向代理服務(wù)器,當(dāng)然前提是要知道正向代理服務(wù)器的IP地址,還有代理程序的端口。反向代理正好與正向代理相反,對于客戶端而言代理服務(wù)器就像是原始服務(wù)器,并且客戶端不需要進(jìn)行任何特別的設(shè)置??蛻舳讼蚍聪虼淼拿臻g(name-space)中的內(nèi)容發(fā)送普通請求,接著反向代理將判斷向何處(原始服務(wù)器)轉(zhuǎn)交請求,并將獲得的內(nèi)容返回給客戶端。六、Nginx事件驅(qū)動模型在 Nginx 的異步非阻塞機(jī)制中,工作進(jìn)程在調(diào)用 IO 后,就去處理其他的請求,當(dāng) IO 調(diào)用返回后
11、,會通知該工作進(jìn)程 。對于這樣的系統(tǒng)調(diào)用,主要使用 Nginx 服務(wù)器的事件驅(qū)動模型來實(shí)現(xiàn)。如上圖所示, Nginx 的 事件驅(qū)動模型由事件發(fā)送器、事件收集器和事件處理器三部分基本單元組成:事件發(fā)送器:負(fù)責(zé)將 IO 事件發(fā)送到事件處理器 ;事件收集器:負(fù)責(zé)收集Worker 進(jìn)程的各種 IO 請求;事件處理器:負(fù)責(zé)各種事件的響應(yīng)工作 。事件發(fā)送器將每個請求放入一個 待處理事件列表 ,使用非阻塞 I/O 方式調(diào)用 事件處理器來處理該請求。其處理方式稱為 “多路 IO 復(fù)用方法” ,常見的包括以下三種: select 模型、 poll模型、 epoll 模型。七、Nginx的請求方式處理Nginx
12、是一個高性能的 Web 服務(wù)器,能夠同時處理大量的并發(fā)請求。它結(jié)合多進(jìn)程機(jī)制和異步機(jī)制 ,異步機(jī)制使用的是異步非阻塞方式 ,接下來就給大家介紹一下 Nginx 的多線程機(jī)制和異步非阻塞機(jī)制 。1、多進(jìn)程機(jī)制服務(wù)器每當(dāng)收到一個客戶端時,就有 服務(wù)器主進(jìn)程 ( master process )生成一個 子進(jìn)程( worker process )出來和客戶端建立連接進(jìn)行交互,直到連接斷開,該子進(jìn)程就結(jié)束了。使用進(jìn)程的好處是各個進(jìn)程之間相互獨(dú)立,不需要加鎖,減少了使用鎖對性能造成影響,同時降低編程的復(fù)雜度,降低開發(fā)成本。其次,采用獨(dú)立的進(jìn)程,可以讓進(jìn)程互相之間不會影響 ,如果一個進(jìn)程發(fā)生異常退出時,其
13、它進(jìn)程正常工作, master 進(jìn)程則很快啟動新的 worker 進(jìn)程,確保服務(wù)不會中斷,從而將風(fēng)險降到最低。缺點(diǎn)是操作系統(tǒng)生成一個子進(jìn)程需要進(jìn)行 內(nèi)存復(fù)制等操作,在資源和時間上會產(chǎn)生一定的開銷。當(dāng)有大量請求時,會導(dǎo)致系統(tǒng)性能下降 。2、異步非阻塞機(jī)制每個工作進(jìn)程 使用 異步非阻塞方式 ,可以處理 多個客戶端請求 。當(dāng)某個 工作進(jìn)程 接收到客戶端的請求以后,調(diào)用 IO 進(jìn)行處理,如果不能立即得到結(jié)果,就去 處理其他請求 (即為 非阻塞 );而 客戶端 在此期間也 無需等待響應(yīng) ,可以去處理其他事情(即為 異步 )。當(dāng) IO 返回時,就會通知此 工作進(jìn)程 ;該進(jìn)程得到通知,暫時 掛起 當(dāng)前處理的
14、事務(wù)去 響應(yīng)客戶端請求 。八、Nginx進(jìn)程處理模型Nginx 服務(wù)器使用 master/worker 多進(jìn)程模式 。多線程啟動和執(zhí)行的流程如下:主程序 Master process 啟動后,通過一個 for 循環(huán)來 接收 和 處理外部信號 ;主進(jìn)程通過 fork() 函數(shù)產(chǎn)生 worker 子進(jìn)程 ,每個 子進(jìn)程 執(zhí)行一個 for 循環(huán)來實(shí)現(xiàn) Nginx 服務(wù)器 對事件的接收 和 處理 。一般推薦 worker 進(jìn)程數(shù)與CPU內(nèi)核數(shù)一致,這樣一來不存在大量的子進(jìn)程生成和管理任務(wù),避免了進(jìn)程之間競爭CPU 資源和進(jìn)程切換的開銷。而且 Nginx 為了更好的利用 多核特性 ,提供了 CPU 親緣
15、性的綁定選項(xiàng),我們可以將某一個進(jìn)程綁定在某一個核上,這樣就不會因?yàn)檫M(jìn)程的切換帶來 Cache 的失效。對于每個請求,有且只有一個工作進(jìn)程 對其處理。首先,每個 worker 進(jìn)程都是從 master進(jìn)程 fork 過來。在 master 進(jìn)程里面,先建立好需要 listen 的 socket(listenfd) 之后,然后再 fork 出多個 worker 進(jìn)程。所有 worker 進(jìn)程的 listenfd 會在新連接到來時變得可讀 ,為保證只有一個進(jìn)程處理該連接,所有 worker 進(jìn)程在注冊 listenfd 讀事件前搶占 accept_mutex ,搶到互斥鎖的那個進(jìn)程注冊 listen
16、fd 讀事件 ,在讀事件里調(diào)用 accept 接受該連接。當(dāng)一個 worker 進(jìn)程在 accept 這個連接之后,就開始讀取請求、解析請求、處理請求,產(chǎn)生數(shù)據(jù)后,再返回給客戶端 ,最后才斷開連接。這樣一個完整的請求就是這樣的了。我們可以看到,一個請求,完全由 worker 進(jìn)程來處理,而且只在一個 worker 進(jìn)程中處理。在 Nginx 服務(wù)器的運(yùn)行過程中, 主進(jìn)程和工作進(jìn)程 需要進(jìn)程交互。交互依賴于 Socket 實(shí)現(xiàn)的管道來實(shí)現(xiàn)。1、主進(jìn)程與工作進(jìn)程交互這條管道與普通的管道不同,它是由主進(jìn)程指向工作進(jìn)程的單向管道,包含主進(jìn)程向工作進(jìn)程發(fā)出的指令,工作進(jìn)程 ID 等;同時主進(jìn)程與外界通過信號通信;每個 子進(jìn)程具備接收信號,并處理相應(yīng)的事件的能力。2、工作進(jìn)程與工作進(jìn)程交互
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年河南機(jī)電職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性考試備考題庫有答案解析
- 2026年撫州職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試備考題庫帶答案解析
- 2026年北京社會管理職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試備考試題帶答案解析
- 2026年黑龍江生態(tài)工程職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試參考題庫帶答案解析
- 土地合作開發(fā)協(xié)議2025年?duì)幾h解決路徑
- 2026年鄂爾多斯生態(tài)環(huán)境職業(yè)學(xué)院單招綜合素質(zhì)考試備考試題帶答案解析
- 2026年廣西機(jī)電職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試備考試題帶答案解析
- 2026年德宏師范高等??茖W(xué)校高職單招職業(yè)適應(yīng)性測試模擬試題帶答案解析
- 2026年鄭州商學(xué)院單招綜合素質(zhì)筆試參考題庫附答案詳解
- 2026年廣東金融學(xué)院高職單招職業(yè)適應(yīng)性測試備考題庫帶答案解析
- 槍械安全培訓(xùn)試題及答案解析
- 內(nèi)分泌科醫(yī)師醫(yī)療質(zhì)量控制方案
- 澳洲簽證代理合同范本
- 科技論文寫作教案(2025-2026學(xué)年)
- 期末安全教育課件下載
- 華電電氣電機(jī)學(xué)期末考試試題及解答
- 煤制天然氣項(xiàng)目酚氨回收裝置項(xiàng)目施工方案
- 易制毒化學(xué)品管理?xiàng)l例培訓(xùn)試卷與答案
- 消防裝備管理規(guī)定
- 醫(yī)院保潔開荒合同(標(biāo)準(zhǔn)版)
- 2025國開本科《公共部門人力資源管理》期末歷年真題(含答案)
評論
0/150
提交評論