NGINX 架構 - 《事件驅動處理函數庫》

更新 發佈閱讀 6 分鐘

承上篇【NGINX 架構 - 事件驅動架構】後續,這篇開始記錄函數庫的相關筆記

事件驅動處理函數庫:

函數庫的細節,就沒打算太過深入,我們只要知道模型的運作方式、優缺點及如何使用就足夠了。

1. select模型:

此模型會先建立分別為Read、Write、Exception的三個「事件描述符集合」,然後透過輪詢的方式,去詢問三個集合,是否有事件發生,如果有就處理。

【優點:不管是Linux還是Windows,市面上幾乎的作業系統都支持此模型】 【缺點:描述符集合最多只支援1024(32位元)、2048(64位元)】
【缺點:輪詢的方式效率較低,不管集合是否為空,都會去詢問,浪費CPU】

手動啟用模組編譯:

--with-select_module
raw-image
raw-image

禁用模組編譯:

--without-select_module

※ 作業系統不支援epoll模型則預設編譯此模組

2. poll模型:

此模型算是select模型的升級版,運作方式差不多,select模型建立三個事件描述符集合,但poll模型則只需要建立一個集合,然後同時檢查三種事件是否發生,有就處理。
【優點:沒有最大的描述符集合限制】
【缺點:輪詢的方式效率較低,不管集合是否為空,都會去詢問,浪費CPU】 【缺點:Windows不支持此模型

Nginx編譯代碼:

手動啟用模組編譯:

--with-poll_module
raw-image
raw-image

禁用模組編譯:

--without-poll_module

※ 作業系統不支援epoll模型則預設編譯此模組

3. epoll模型:

此模型是poll模型的變種,不會輪詢事件集合,而是建立一個待處理事件列表,再將該表發給內核,等到有事件發生,內核會通知函數庫,後進行處理

【優點:遠大於1024個描述符集合限制】 具體數值可察看此處

cat /proc/sys/fs/file-max
raw-image

【優點:有事件才通知處理,效率提升,能高效處理高併發連接】
【缺點:開發複雜性較上述兩者高】
【缺點:Windows不支持此模型】

啟用模組編譯:

raw-image

4. rtsig模型:

全稱:Real-Time Signal,即是即時訊號,此模型並不是常用的事件驅動模型,運作方式是透過系統核心建立一個rtsig佇列用於儲存事件,但最多只能儲存1024個事件訊號,因此如果超過1024個事件,就會發生溢位。 當溢位發生時,Nginx就會暫時停止rtsig模型,並啟用poll模型,來接手處裡事件,直到rtsig佇列全部清空為止,然後再次啟動rtsig模型。

【優點:主要支援Nginx特殊提供的即時訊號事件使用】
【缺點:最多只能存取1024個事件】
【缺點:發生溢位後就得切換模型,消耗資源】

手動啟用模組編譯:

--with-rtsig_module

禁用模組編譯:

--without-rtsig_module

※ 預設不編譯此模組

5. kqueue模型:

主要適用於BSD系列作業系統及Mac OS X作業系統,此模型運作方式和epoll模型一樣,主要也是poll模型的變種,如果在BSD系統或MAC OS X系統使用NGINX的話,強烈建議使用此模型,以利提高Nginx Server的處理效能。

6. /dev/poll模型:

主要適用於Unix平台,主要用於Solaris711/99以上版本、HP/UX 11.22以上版本、IRIX 6.5.15以上版本及Tru64 UNIX 5.1A以上版本。

該模型是由Sun公司開發Solaris時所提出的事件驅動模型,它使用deb/poll裝置,開發人員可以將要監視的檔案描述符號加入這個裝置,然後透過ioctl()呼叫來取得事件通知,如果使用上述所提平台,強烈建議使用此模型,以利提高Nginx Server的處理效能。

7. eventport模型:

主要適用於Solaris 10以上版本

該模型也是由Sun公司開發Solaris時所提出的事件驅動模型。

筆者的話:

通常YUM安裝的固定模組已經很足夠使用了,況且NGINX會自動選擇最有效的事件模組,因此其實不太需要手動編譯模型,但仍然還需要修改config來指定工作模式。

use是個事件模組指令,用來指定Nginx的工作模式。

select和poll都是標準的工作模式
kqueue和epoll是高效的工作模式

不同的是epoll用在Linux平臺上,而kqueue用在BSD系統中。

對於Linux系統,epoll工作模式是首選。
在作業系統不支援這些高效模型時才使用select。

以下是筆者用epoll模組,壓力測試的結果

ab -n 10000 -c 10 http://localhost:80/index.html

模擬,同時1萬個訪問連線,總共要請求10次。

Time taken for tests: 1348.594 seconds
Requests per second: 7.42 [#/sec] (mean)

raw-image

參考資料:

a. Nginx技術手札:網頁伺服器應用全攻略
b. Connection processing methods
c. NGINX之一----IO五种模型和select与epoll工作原理(引入nginx)

留言
avatar-img
IT工程師 - 技術筆記
15會員
27內容數
IT技術筆記、職場隨筆
2022/06/30
上一篇有講完【NGINX 架構 - 《模組化設計》】後,接下來這邊透過自己的理解,來專門介紹『事件趨動架構』,以此來幫助自己認識NGINX架構的內容。 什麼是「事件驅動架構」 而這邊指的事件驅動架構是一種程式設計的方式 - 事件驅動程式設計(Event-driven programming)
Thumbnail
2022/06/30
上一篇有講完【NGINX 架構 - 《模組化設計》】後,接下來這邊透過自己的理解,來專門介紹『事件趨動架構』,以此來幫助自己認識NGINX架構的內容。 什麼是「事件驅動架構」 而這邊指的事件驅動架構是一種程式設計的方式 - 事件驅動程式設計(Event-driven programming)
Thumbnail
2022/06/23
上一篇有提到﹝NGINX﹞低消耗高效能的原由,正來至於它優秀的架構設計,其架構主要包括:『模組化設計』、『事件驅動架構』、『請求多階段非同步處理』、『管理程式與多工程式設計』、『記憶體池設計』。 而這邊透過自己的理解,來專門介紹『模組化設計』,以此來幫助自己認識NGINX架構的內容。 核心模組:
Thumbnail
2022/06/23
上一篇有提到﹝NGINX﹞低消耗高效能的原由,正來至於它優秀的架構設計,其架構主要包括:『模組化設計』、『事件驅動架構』、『請求多階段非同步處理』、『管理程式與多工程式設計』、『記憶體池設計』。 而這邊透過自己的理解,來專門介紹『模組化設計』,以此來幫助自己認識NGINX架構的內容。 核心模組:
Thumbnail
2022/06/08
什麼是NGINX ﹝NGINX﹞是一款免費的開源軟體的非同步框架的Web Server
Thumbnail
2022/06/08
什麼是NGINX ﹝NGINX﹞是一款免費的開源軟體的非同步框架的Web Server
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
  當我們要使用執行緒的時候,就要引用System.Threading的類別庫,程式才可以使用唷!這篇內容先說明:建立與啟用執行緒、跨執行緒控制UI介面、等待或暫停時間執行緒、共享資源的部分。
Thumbnail
  當我們要使用執行緒的時候,就要引用System.Threading的類別庫,程式才可以使用唷!這篇內容先說明:建立與啟用執行緒、跨執行緒控制UI介面、等待或暫停時間執行緒、共享資源的部分。
Thumbnail
不論我們使用Nodejs的Mongo Client還是Go語言甚至其他語言的套件, 應該都會看到連線選項中有poolSize這類的配置, 以下會介紹什麼是連線池、優點、應注意的事項。 首先來談談連接池之前的單一連接機制, 在配置正確的狀況下可能不會遇到任何問題, 但假設我們的應用同時間有100個用戶
Thumbnail
不論我們使用Nodejs的Mongo Client還是Go語言甚至其他語言的套件, 應該都會看到連線選項中有poolSize這類的配置, 以下會介紹什麼是連線池、優點、應注意的事項。 首先來談談連接池之前的單一連接機制, 在配置正確的狀況下可能不會遇到任何問題, 但假設我們的應用同時間有100個用戶
Thumbnail
ModSecurity 是普遍應用之 公開網頁程式防火牆 ( 可 搭配 OWASP (Open Web Application Security Project) 維護的免費核心規則集 Core Rule Set CRS 初始設計 為 Apache HTTP Server 之模組 後續發展成 htt
Thumbnail
ModSecurity 是普遍應用之 公開網頁程式防火牆 ( 可 搭配 OWASP (Open Web Application Security Project) 維護的免費核心規則集 Core Rule Set CRS 初始設計 為 Apache HTTP Server 之模組 後續發展成 htt
Thumbnail
這篇文章將會講述使用 C# 的類( Class ) 來讓欄位模組(module)化。
Thumbnail
這篇文章將會講述使用 C# 的類( Class ) 來讓欄位模組(module)化。
Thumbnail
承上篇【NGINX 架構 - 事件驅動架構】後續,這篇開始記錄函數庫的相關筆記 事件驅動處理函數庫: 函數庫的細節,就沒打算太過深入,我們只要知道模型的運作方式、優缺點及如何使用就足夠了。 1. select模型: 手動啟用模組編譯: 禁用模組編譯: 2. poll模型: Nginx編譯代碼:
Thumbnail
承上篇【NGINX 架構 - 事件驅動架構】後續,這篇開始記錄函數庫的相關筆記 事件驅動處理函數庫: 函數庫的細節,就沒打算太過深入,我們只要知道模型的運作方式、優缺點及如何使用就足夠了。 1. select模型: 手動啟用模組編譯: 禁用模組編譯: 2. poll模型: Nginx編譯代碼:
Thumbnail
這一篇文章將會從Microsoft的.NET Class Library開始介紹,在介紹具狀態和不具狀態,以及物件和new關鍵字。
Thumbnail
這一篇文章將會從Microsoft的.NET Class Library開始介紹,在介紹具狀態和不具狀態,以及物件和new關鍵字。
Thumbnail
上一篇有提到﹝NGINX﹞低消耗高效能的原由,正來至於它優秀的架構設計,其架構主要包括:『模組化設計』、『事件驅動架構』、『請求多階段非同步處理』、『管理程式與多工程式設計』、『記憶體池設計』。 而這邊透過自己的理解,來專門介紹『模組化設計』,以此來幫助自己認識NGINX架構的內容。 核心模組:
Thumbnail
上一篇有提到﹝NGINX﹞低消耗高效能的原由,正來至於它優秀的架構設計,其架構主要包括:『模組化設計』、『事件驅動架構』、『請求多階段非同步處理』、『管理程式與多工程式設計』、『記憶體池設計』。 而這邊透過自己的理解,來專門介紹『模組化設計』,以此來幫助自己認識NGINX架構的內容。 核心模組:
Thumbnail
什麼是NGINX ﹝NGINX﹞是一款免費的開源軟體的非同步框架的Web Server
Thumbnail
什麼是NGINX ﹝NGINX﹞是一款免費的開源軟體的非同步框架的Web Server
Thumbnail
如果你 WHERE 的條件需要常常更動,但每次都要進去 QUERY 所在的儲存格編輯語法,實在是有點太麻煩了?但其實有個小技巧,可以讓 QUERY 更新得更輕鬆。來看看吧!
Thumbnail
如果你 WHERE 的條件需要常常更動,但每次都要進去 QUERY 所在的儲存格編輯語法,實在是有點太麻煩了?但其實有個小技巧,可以讓 QUERY 更新得更輕鬆。來看看吧!
Thumbnail
今天來到Day5了,也來到基礎教學的最後一部分,今天要講解的就是函式(function),有分成內建函數,以及自訂函數,再來是import模組,也就是導入py檔,除了可以導入自行撰寫的py檔,網路上也有許多大神分享相當方便使用的py檔,最後再講解一下如何進行異常處理,也就是Debug的部分
Thumbnail
今天來到Day5了,也來到基礎教學的最後一部分,今天要講解的就是函式(function),有分成內建函數,以及自訂函數,再來是import模組,也就是導入py檔,除了可以導入自行撰寫的py檔,網路上也有許多大神分享相當方便使用的py檔,最後再講解一下如何進行異常處理,也就是Debug的部分
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News