Nginx的架構及工作流程

2022-06-06 02:33:11 字數 1809 閱讀 6057

nginx是乙個免費的,開源的,高效能的http伺服器和反向**,以及imap / pop3**伺服器。

nginx以其高效能,穩定性,豐富的功能集,簡單的配置和低資源消耗而聞名,也是為解決c10k問題而編寫的伺服器之一。本文主要介紹nginx的架構及工作流程。

一、nginx的架構如下圖

1.nginx啟動後會有乙個master程序和多個worker程序(woeker程序數量可配置,一般設定與機器的核心數一致),master程序負責管理worker程序(接收外界訊號,傳送訊號到各worker程序,監控worker程序的執行狀態)。

2.基本的網路事件,由worker程序負責處理,各worker程序之間是對等和相互獨立的,共同競爭來至客戶端的請求。

3.nginx是基於多程序模式、事件驅動的非同步非阻塞io模型。

二、nginx多程序+非同步非阻塞io模型的優點

1.程序之間相互獨立,乙個程序異常,其他程序不會受到影響,能夠繼續服務,保證服務的穩定性。

2.獨立程序之間資源隔離,避免了很多不必要的鎖操作,提高程式處理效率。

3.避免了多執行緒模型下常見的上下文切換問題,雖然多程序模型會導致服務併發數降低,但非同步非阻塞io解決了這個問題。

三、多程序間如何協作

1.多程序工作可能會產生的『驚群效應』問題

多程序工作模式如下圖:

乙個連線進來,每個worker程序都有可能處理這個連線,怎麼做到的呢?首先每個worker程序都由master程序fork過來,在master程序裡面,先建立好需要listen的socket之後,再fork出多個worker程序,這樣每個worker程序都可以accept這個socket(注意:不是同乙個socket,僅僅是每個程序獲取的socket連線**於同乙個ip位址和埠),所以,乙個請求進來後,所有accept在這個socket上的worker都會收到通知,但是只有乙個worker成功接收到請求並處理,其他worker都會接收失敗,這就是『驚群效應』。

另外,這種工作模式也會引發另外乙個問題,那就是『worker間負載不均衡』!多個worker同時爭搶請求任務,如果有的worker程序比較勤快,而且運氣也比較好,那麼其他程序可能就很少有幹活機會,而這些勤快的程序卻很忙碌,從而降低伺服器的併發和效能。那麼nginx是怎麼解決這兩個問題的呢?

2.nginx中worker間協作問題解決方案

將epoll產生的ngx_posted_accept_events(accept事件)放入accept佇列,普通事件ngx_posted_events(read事件)放入posted佇列,worker程序都從accept佇列獲取連線事件,從posted佇列獲取每個worker自己的事件進行處理。

a.在從accept佇列獲取連線事件時,需要先獲取鎖(accept_mutex鎖),只有獲取鎖的程序可以從accept佇列中取連線事件,從而避免了『驚群效應』。

b.上述搶占鎖的判斷是根據worker程序負載閾值的判斷值(處理的連線總數有沒有達到總連線數的7/8,沒有達到時不會搶鎖,直接取事件,達到時需要先拿到鎖再獲取事件),從而解決了worker間負載不均衡的問題。

RocketMQ架構設計及工作流程

技術架構 主要分為四個部分 工作流程 首先啟動 nameserver,等待 broker producer consumer 來連線,並提供各種查詢服務。接著啟動 brokerserver,每隔 30s 定時向所有的 nameserver 傳送心跳包,資訊包括自己的狀態和儲存的 topic 資訊。n...

ansible架構原理及工作流程 linux技術

一 ansible介紹 ansible是一種自動化運維工具,基於paramiko模組開發,用於批量執行任務和發布工作,被廣泛用於日常運維工作當中.二 ansible架構架構圖 ansible核心模組介紹 core models ansible自帶的模組,file,shell,copy等custom ...

MR架構 MR工作流程

一 mr的架構 1 簡介 mapreduce 是乙個軟體框架,基於該框架能夠容易地編寫應用程式,這些應用程式能夠執行在由上千個商用機器組成的大集群上,並以一種可靠的,具有容錯能力的方式並行地處理上 tb級別的海量資料集 2 4個物件 客戶端 編寫mapreduce 程式,配置作業,提交作業,這就是程...