Nginx(2):架構(gòu)設(shè)計與工作流程
這些天吶,實在是給我看暈了。起因自然還是對 nginx 不是很了解哈。那我是來看什么的?一開始就從細節(jié)出發(fā),有點管中窺豹,不得全貌了。
圖來自網(wǎng)絡(luò)
架構(gòu)設(shè)計
進程模型
預(yù)定:==后邊專門出一篇關(guān)于 nginx進程模型源碼分析==。這些概念都好記,也好理解,但是里面有的地方我想不到該怎么寫,好吧,就是異步,異步不會寫,所以要去看一下大神是怎么寫的。
1、nginx在啟動后,在unix系統(tǒng)中會以daemon的方式在后臺運行,后臺進程包含一個master進程和多個worker進程。
2、nginx采用了異步非阻塞的方式來處理請求。
3、線程只有一個,所以同時能處理的請求只有一個,只是在請求間進行不斷地切換而已,切換也是因為異步事件未準備好,而主動讓出的。這里的切換是沒有任何代價。
與多線程相比,這種事件處理方式是有很大的優(yōu)勢的,不需要創(chuàng)建線程,每個請求占用的內(nèi)存也很少,沒有上下文切換,事件處理非常的輕量級。并發(fā)數(shù)再多也不會導(dǎo)致無謂的資源浪費(上下文切換)。更多的并發(fā)數(shù),只是會占用更多的內(nèi)存而已。
模塊化結(jié)構(gòu)體系
預(yù)定:==這個要出好幾篇了,核心模塊、事件模塊、Stream模塊,以及它們下屬的技術(shù)點可能也要鋪開,估計五六篇吧==。
其他模塊視情況而定吧。
(被遮住的是 ngx_conf_module)
① 核心模塊(core)
該模塊提供了 Nginx 服務(wù)運行的基本功能,如 Nginx 的進程管理、CPU 親緣性、內(nèi)存管理、配置文件解析、日志等功能。
② 事件模塊(event)
該模塊負責(zé)進行連接處理,提供對不同操作系統(tǒng)的 I/O 網(wǎng)絡(luò)模型支持和自動根據(jù)系統(tǒng)平臺選擇最有效 I/O 網(wǎng)絡(luò)模型的方法。
③ HTTP模塊(http)
該模塊提供 HTTP 處理的核心功能和部分功能模塊,HTTP 核心功能維護了 HTTP 多個階段的工作流,并實現(xiàn)了對各種 HTTP 功能模塊的管理和調(diào)用。
④ Mail模塊(mail)
該模塊實現(xiàn)郵件代理功能,代理 IMAP、POP3、SMTP 協(xié)議。
⑤ Stream模塊(stream)
該模塊提供 TCP/UDP 會話的代理和負載相關(guān)功能。
⑥ 第三方模塊
nginx的框架設(shè)計就這么簡單,一目了然。
nginx的框架設(shè)計就這么難,這一點點東西居然要撐起數(shù)萬乃至數(shù)十萬的并發(fā)。
工作流程
曉得個框架設(shè)計明顯是不夠的,框架設(shè)計可以說是骨架,皮肉就是里面那些模塊了,那這些骨架和皮肉又是怎么盤活的呢?
Master 初始化
worker初始化
upstream工作流程
大概也就門清兒了,先學(xué)習(xí)進程模型、再進入幾個核心模塊看框架,最后再收了設(shè)計比較好的數(shù)據(jù)結(jié)構(gòu)、內(nèi)存池、緩沖區(qū)以及一些問題解決方案。
話說我該去處理一下我的source insight了,又過期了。
Nginx 架構(gòu)設(shè)計
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。