一、Master-Worker 模式:NGINX 高可用的核心架構

NGINX 之所以能支撐百萬級併發連接,其 Master-Worker 多進程架構 是關鍵。該架構由一個 Master 主進程和多個 Worker 工作進程組成,摒棄了傳統單進程模型的性能瓶頸,同時避免了多線程共享資源的鎖競爭問題。

Master 進程作為 “管理員”,核心職責是配置加載、進程管理和信號分發:啓動時讀取 nginx.conf 初始化配置,fork 出指定數量的 Worker 進程(默認與 CPU 核心數一致,充分利用多核資源);運行中監聽信號(如 reload 熱加載、stop 停止),並將配置變更同步至所有 Worker 進程,實現無中斷服務更新。

Worker 進程作為 “執行者”,專注處理網絡請求:通過競爭機制獲取 Master 進程分配的監聽端口(如 80/443),獨立接收、處理客户端連接,每個 Worker 進程都是單線程且非阻塞的,通過 epoll/kqueue 等 I/O 多路複用機制高效處理數千個併發連接。

二、進程通信:高效協同的底層實現

Master 與 Worker 進程間的通信依賴 共享內存信號機制,確保配置同步與狀態協同的高效性:

  1. 共享內存(Shared Memory):Master 進程加載配置後,將核心配置(如虛擬主機、路由規則、限流參數)寫入共享內存。所有 Worker 進程通過只讀方式訪問該內存區域,避免了拷貝開銷,同時保證配置一致性。當配置更新時,Master 重新寫入共享內存併發送信號通知 Worker,Worker 收到信號後重新讀取配置,實現 “熱加載”。
  2. 信號機制(Signal):用於進程間的狀態通知,例如 Master 發送 SIGCHLD 回收退出的 Worker 進程,發送 SIGUSR2 觸發 Worker 進程平滑重啓;Worker 進程通過 SIGTERM 信號向 Master 反饋退出狀態。

三、資源隔離:穩定性的關鍵保障

Master-Worker 模式通過 進程級資源隔離 避免單點故障擴散:

  • 每個 Worker 進程擁有獨立的內存空間、文件描述符和 CPU 時間片,互不干擾。即使某個 Worker 進程因異常(如內存溢出、請求阻塞)崩潰,Master 進程會立即感知並 fork 新的 Worker 進程補充,整個服務無感知,可用性達 99.99%。
  • 資源隔離還實現了負載均衡:多個 Worker 進程通過內核的負載均衡算法(如 SO_REUSEPORT 選項)公平競爭連接,避免單進程過載,充分發揮多核 CPU 性能。

四、架構優勢總結

NGINX 的 Master-Worker 架構通過 “主進程管理 + 工作進程執行” 的分工模式,結合共享內存通信與進程級隔離,實現了 高併發、高可用、易擴展 的核心目標:單台服務器可輕鬆支撐 10 萬 + 併發連接,配置更新無需停機,故障影響範圍最小化。這一架構設計也成為後續高性能服務器(如 OpenResty、Tengine)的核心參考範式。