現在的位置: 首頁 > 綜合 > 正文

Nginx 的架構是什麼?Ngnix 是如何實現高性能的?

2020年02月24日 綜合 ⁄ 共 1046字 ⁄ 字型大小 評論關閉

  Nginx 是一個免費的,開源的,高性能的 HTTP 伺服器和反向代理,以及 IMAP / POP3 代理伺服器。Nginx 以其高性能,穩定性,豐富的功能,簡單的配置和低資源消耗而聞名。

  Nginx 的整體架構

  Nginx 里有一個 master 進程和多個 worker 進程。master 進程並不處理網路請求,主要負責調度工作進程:載入配置、啟動工作進程及非停升級。worker 進程負責處理網路請求與響應。

  master進程主要用來管理worker進程,具體包括如下4個主要功能:

  接收來自外界的信號。

  向各worker進程發送信號。

  監控woker進程的運行狀態。

  當woker進程退出後(異常情況下),會自動重新啟動新的woker進程。

  woker進程主要用來處理基本的網路事件:

  多個worker進程之間是對等且相互獨立的,他們同等競爭來自客戶端的請求。

  一個請求,只可能在一個worker進程中處理,一個worker進程,不可能處理其它進程的請求。

  worker進程的個數是可以設置的,一般我們會設置與機器cpu核數一致。同時,nginx為了更好的利用多核特性,具有cpu綁定選項,我們可以將某一個進程綁定在某一個核上,這樣就不會因為進程的切換帶來cache的失效。

  Ngnix 是如何實現高性能的?

  事件驅動模型

  基於非同步及非阻塞的事件驅動模型,可以說是 Nginx 得以獲得高並發、高性能的關鍵因素。這一點上和 Netty 類似,底層都是使用的 BSD kqueue、Linux epoll 及 Solaris event ports。

  多進程機制

  使用多進程的好處有兩點:

  進程之間不共享資源,不需要加鎖,減少了使用鎖對性能造成的影響,同時降低編程的複雜度,降低開發成本。

  採用獨立的進程,可以讓進程互相之間不會影響,如果一個進程發生異常退出時,其它進程正常工作,master 進程則很快啟動新的 worker 進程,確保服務不會中斷,從而將風險降到最低。

  內存池

  為了避免出現內存碎片,減少向操作系統申請內存的次數、降低各個模塊的開發複雜度,Nginx 設計了簡單的內存池,它的作用主要是把多次向系統申請內存的操作整合成一次,這大大減少了 CPU 資源的消耗,同時減少了內存碎片。

  模塊化設計

  高度模塊化的設計是 Nginx 的架構基礎。Openresty 就是在 Nginx 上引入了 lua 等第三方模塊,使得擴展更加方便了。

  以上就是有關Nginx 原理和架構的介紹,如要了解更多請關注學步園。

抱歉!評論已關閉.