nginx有兩種程序結構:一種是 單程序結構,一種是 多程序結構。
單程序結構實際上不適用於生產環境,只適合在開發、除錯時使用。這是因為在生產環境中需要保證nginx足夠健壯,且能夠充分利用 cpu多核的特性。
因此預設配置中也是開啟多程序的nginx。
nginx多程序結構下,程序種類有三類:
master程序 + worker程序 + cache程序
master程序的功能是用來管理worker程序,真正處理使用者請求的是worker程序,master程序負責監控每乙個worker程序是否在正常工作、是否需要熱部署等。
cache程序負責對上游伺服器發來的動態請求響應做快取處理,快取是需要在多個worker程序間共享的,cl程序(cache loader)負責做快取的載入,cm程序(cache manager)負責做快取的管理,實際上如果需要對使用者請求返回緩衝中的內容,則還是由worker程序來處理。
worker程序的個數:
master程序只有乙個,cache程序分別有乙個manage程序和乙個load程序。
對於worker程序,一般配置為與cpu的核數一致,nginx希望每乙個worker程序從頭到尾占有乙個核。
因此在配置nginx時,除了需要把worker程序的數量配置成與cpu核數一致外,還需要把worker程序與某乙個cpu核繫結,這樣可以更好的使用每個核上的cpu快取,提高快取命中率。
另外,在配置nginx時也會把nginx的程序優先順序調到最高,這樣在作業系統進行程序排程時會為nginx分配更多的時間片,從而減少無謂的程序間切換。
nginx多程序結構示意圖:
最核心的目的,就是要保證nginx的高可用性和高可靠性。
如果nginx使用多執行緒結構,因為執行緒之間是共享記憶體位址空間的,如果某個第三方模組因為記憶體位址訪問越界等問題引發了段錯誤,將會導致整個nginx程序都掛掉。而採用多程序結構則基本不會出現這樣的問題。
nginx在多程序結構設計上同樣遵循了實現高可用性、高可靠性的思路:
在master程序中,通常第三方模組是不會加入功能**的。雖然nginx允許第三方模組在master程序中新增獨有的、自定義的一些方法,但是通常沒有第三方模組會這麼做。
Nginx學習筆記5 (極客時間 陶輝)
轉意字元 取消原字元的特殊含義 分組與取值 驗證正規表示式工具 pcretest server name指令 指令可以跟多個網域名稱,第乙個是主網域名稱。泛網域名稱 僅支援在最前或者最後 例如 server name lxn.com 正規表示式 加 字首 server name www.lxn.co...
極客時間的專欄
丁奇老師帶我們去學習mysql的45講,有mysql的完整學習路徑,資料庫是程式設計界必備基礎,還是比較推薦的。這是我買的第一篇專欄,老師帶我們去深入剖析tomcat和jetty,雖然不是特別新的技術,但是市場很成熟了,tomcat內部的 還是很值的我們去學習的。這是極客時間上訂閱最多的一篇專欄,已...
極客時間 演算法
1.合格程式設計師的第一步 演算法和資料結構 2.如何事半功倍的學習演算法和資料結構 1 怎樣去學習精通乙個領域?a.chunk it up 切碎知識點 同事注意各個知識點的聯絡,輔助記憶 b.deliberate practicing 刻意練習 c.feedback 和別人的做飯比較,高手指點 2...