Nginx系列(三)--管理程序、多工作程序設計
一、master程序和worker程序的作用
master程序
不需要處理網路事件,不負責業務的執行,只會通過管理worker等子程序來實現重啟服務、平滑升級、更換日誌檔案、配置檔案實時生效等功能。
master是通過fork系統呼叫子程序來實現和子程序的通訊。
worker程序
用來處理master程序fork過來的請求
worker程序是通過處理訊號來實現和master通訊的
====================================================================================
二、訊號的處理過程
Master程序接收到訊號是怎樣進行處理的?
master程序接收到訊號後,會先重新載入配置檔案,然後再啟動新的程序,並向所有老的程序傳送訊號,告訴他們可以光榮退休了。新的程序在啟動後,就開始接受新的請求,而老的程序在收到來自master訊號後,就不再接收新的請求,並且在當前程序中的所有未處理完的請求處理完成後再退出。
Worker程序接收到訊號是怎樣進行處理的?
首先,worker程序之間是平等的,每個程序,處理請求的機會也是一樣的。當我們提供80埠的http服務時,一個連線請求過來,每個程序都有可能處理這個連線,怎麼做到的呢?首先,每個worker程序都是從master
那麼為了解決這個問題,Nginx提供了一個accept_mutex(可選項,預設開啟)。這是一個加在accept上的一把共享所。有了這把鎖之後,同一時刻,就會只有一個程序在accept連線,這樣就不會有驚群問題了。
當一個worker程序在accept這個連線之後,就開始讀取請求,解析請求,處理請求,產生資料後,再返回給客戶端,最後才斷開連線。一個請求,完全由
====================================================================================
三、這樣設計的優點
1、利用多核系統的併發處理能力
現在作業系統都是多核CPU,如果一直是隻有一個程序在工作,那麼浪費資源,如果是worker程序間地位不平等勢必造成程序瓶頸問題,Nginx為了避免這個問題,設計worker間程序平等。另外,worker數與cpu核數一致,則會達到CPU資源的充分利用,如果worker數多於cpu核數,勢必造成資源的競爭;若小於cpu核數,勢必造成資源浪費。提高網路效能,降低請求時延。
2、負載均衡
多個worker之間通過程序通訊來實現負載均衡。即當一個請求到來時,更容易分配到負載較輕的worker程序中處理。這將降低請求的時延,並在一定程度上提高網路效能
3、管理程序負責監控工作程序的狀態,並負責管理其行為
這樣做的好處是:
a.管理程序不會佔用多少系統資源
b.管理程序負責監控工作程序狀態,如果某個工作程序死掉,管理程序負責創建出新的工作程序,避免系統性能下降。提高了系統的可靠性。
c.管理程序支援Nginx服務執行中的程序升級、配置項修改等,使得動態可擴充套件性、動態定製性、動態進化性較容易實現。