1. 程式人生 > >深入理解Nginx:模組開發與架構解析 讀書筆記

深入理解Nginx:模組開發與架構解析 讀書筆記

Nginx的作用

當我們在設計高效能web伺服器的時候,我們第一選擇是使用Nginx,因為nginx對伺服器效能上的挖掘已經到了非常高的水平,Nginx採用了無阻塞分階段的事件驅動框架。當nginx不能那個完全實現我們的業務需求的時候,我們可以在Nginx後端搭建一個非nginx伺服器,利用前段的Nginx伺服器來做負載均衡,但是這時候我們又會遇到,在設計後端伺服器的非阻塞時間架構的問題。(解決nginx已經解決過的無阻塞問題)。所以唯有開發一個實現了所需功能的自定義Nginx模組嵌入到nginx程式碼中,才能充分挖掘伺服器的硬體資源。

Nginx的適用場景

Nginx是一個優秀的事件驅動框架,雖然他在HTTP上的處理非常出色,但是nginx適用開發在傳輸層以TCP對外提供服務的伺服器程式。主要優勢如下:

1.將網路(相關socket),磁碟(輸入輸出)以及定時器(優先佇列)等非同步事件做了非常好的封裝,基於他的開發可以忽略事件處理的細節。其實這裡就是利用IO複用和non-block程式設計封裝了底層細節。

2.Nginx封裝了許多平臺無關的介面,容器,適用於跨平臺開發(由於Nginx是C語言開發的,其中已經實現了相當多的動態陣列,hash表,連結串列等),估計介面上也做了封裝,根據實際的場景選用不同的系統呼叫介面。

3.優秀的模組化設計,輕易地複用現有模組,其中包括了基本的讀取配置,日誌模組,也包括處理HTTP以及mail的高階模組。

4.Nginx本身就是作為伺服器來設計器框架的,因此在服務程序的管理上相當出色,輕鬆實現程式的動態升級,子程序的監控,管理,配置項的動態載入。

5.Nginx對各項系統系統呼叫介面,以及一些實現做了大量優化尤其是針對linux作業系統。(針對linux使用了epoll來處理大併發,利用sendfile系統呼叫來將裁判的資料傳送到網路上,不需要把硬碟資料先複製到使用者態記憶體再發送)

如果我們想以低負載來處理高併發的請求並且處理基於TCP的伺服器程式時推薦使用Nginx,通過開發一種新的模組型別,實現一種新的功能框架,提供非常好的擴充套件性。

Nginx的優勢

1.單個請求響應更快,峰值響應更快。

2.高擴充套件性,Nginx由不同功能不同層次不同型別切耦合度低的模組構成。

3.高可靠性,來自於其核心框架程式碼的優秀設計,模組設計的簡單性。每個worker程序相對獨立,master程序在woker程序出錯時可以快速拉起新的worker子程序。

4.低記憶體消耗,10000個非活躍的HTTP Keep-Alive連線在Nginx只消耗2.5M的記憶體。

5.單機支援10萬以上的併發請求,理論上Nginx支援的併發連線數上限取決於記憶體。

6.熱部署,master程序與woker工作程序的分離設計,是的具有熱部署的功能。