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不支持此模型】

啟用模組編譯:

nginx.conf

nginx.conf

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
留言分享你的想法!
avatar-img
Scott Salon
14會員
27內容數
技術筆記紀錄、生活隨筆
Scott Salon的其他內容
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
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,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