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

閱讀時間約 5 分鐘
承上篇【NGINX 架構 - 事件驅動架構】後續,這篇開始記錄函數庫的相關筆記

事件驅動處理函數庫:

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

1. select模型:

此模型會先建立分別為Read、Write、Exception的三個「事件描述符集合」,然後透過輪詢的方式,去詢問三個集合,是否有事件發生,如果有就處理。
【優點:不管是Linux還是Windows,市面上幾乎的作業系統都支持此模型】 【缺點:描述符集合最多只支援1024(32位元)、2048(64位元)】
【缺點:輪詢的方式效率較低,不管集合是否為空,都會去詢問,浪費CPU】
手動啟用模組編譯:
--with-select_module
禁用模組編譯:
--without-select_module
※ 作業系統不支援epoll模型則預設編譯此模組

2. poll模型:

此模型算是select模型的升級版,運作方式差不多,select模型建立三個事件描述符集合,但poll模型則只需要建立一個集合,然後同時檢查三種事件是否發生,有就處理。
【優點:沒有最大的描述符集合限制】
【缺點:輪詢的方式效率較低,不管集合是否為空,都會去詢問,浪費CPU】 【缺點:W
indows不支持此模型
Nginx編譯代碼:
手動啟用模組編譯:
--with-poll_module
禁用模組編譯:
--without-poll_module
※ 作業系統不支援epoll模型則預設編譯此模組

3. epoll模型:

此模型是poll模型的變種,不會輪詢事件集合,而是建立一個待處理事件列表,再將該表發給內核,等到有事件發生,內核會通知函數庫,後進行處理
【優點:遠大於1024個描述符集合限制】 具體數值可察看此處
cat /proc/sys/fs/file-max
【優點:有事件才通知處理,效率提升,能高效處理高併發連接】
【缺點:開發複雜性較上述兩者高】
【缺點:Windows不支持此模型】
啟用模組編譯:
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)

參考資料:

此篇文章會顯示動態置底廣告
為什麼會看到廣告
13會員
28Content count
技術筆記紀錄、生活隨筆
留言0
查看全部
發表第一個留言支持創作者!
Scott Salon 的其他內容
上一篇有講完【NGINX 架構 - 《模組化設計》】後,接下來這邊透過自己的理解,來專門介紹『事件趨動架構』,以此來幫助自己認識NGINX架構的內容。 什麼是「事件驅動架構」 而這邊指的事件驅動架構是一種程式設計的方式 - 事件驅動程式設計(Event-driven programming)
上一篇有提到﹝NGINX﹞低消耗高效能的原由,正來至於它優秀的架構設計,其架構主要包括:『模組化設計』、『事件驅動架構』、『請求多階段非同步處理』、『管理程式與多工程式設計』、『記憶體池設計』。 而這邊透過自己的理解,來專門介紹『模組化設計』,以此來幫助自己認識NGINX架構的內容。 核心模組:
什麼是NGINX ﹝NGINX﹞是一款免費的開源軟體的非同步框架的Web Server
上一篇有講完【NGINX 架構 - 《模組化設計》】後,接下來這邊透過自己的理解,來專門介紹『事件趨動架構』,以此來幫助自己認識NGINX架構的內容。 什麼是「事件驅動架構」 而這邊指的事件驅動架構是一種程式設計的方式 - 事件驅動程式設計(Event-driven programming)
上一篇有提到﹝NGINX﹞低消耗高效能的原由,正來至於它優秀的架構設計,其架構主要包括:『模組化設計』、『事件驅動架構』、『請求多階段非同步處理』、『管理程式與多工程式設計』、『記憶體池設計』。 而這邊透過自己的理解,來專門介紹『模組化設計』,以此來幫助自己認識NGINX架構的內容。 核心模組:
什麼是NGINX ﹝NGINX﹞是一款免費的開源軟體的非同步框架的Web Server
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
    一張椅子,至少要有三個腳,坐起來才會穩固。人生也如同一張椅子,如果想讓自己過得美好,一定不能缺少三個重要支柱,分別是好信用、好朋友和好伴侶。當我們來到世上,家庭成員,没得選擇;出生背景,没得選擇;學校際遇,没得選擇;其他還有好多好多的人際關係和接觸事物,無法由自己選擇。因為無法選擇,
Thumbnail
filebeat的作用就像是一隻看門狗(watch dog),當看門狗監測到任何風吹草動(log產生變化)時,就立即事件告訴主人(logstash)。
Thumbnail
此篇我們會將Nginx log修改成為Logstash可以正確辨識的格式。
Thumbnail
這系列要介紹如何使用ELK架構(Elastic)及Filebeat來監控nginx的access.log。我會針對每個步驟寫出一篇文章來介紹系統該如何設定,如果有錯誤的地方,也麻煩多多指教。
Thumbnail
在雲端建立AKS後,運行後有許多Container會被外部服務呼叫使用。但我們知道當我們佈署到AKS,如果要被外面服務呼叫,就要在YAML將Type設定成Loadbalance,一旦這樣設定,就會變成每個Container就會多出一個對外的IP,Container變多了,對外IP就會擴增很快,也不好
Thumbnail
保護後端重要資訊 在 django 專案中我們會把設定都寫在 settings.py 內,包含了 SECRET_KEY 等機密資訊,通常專案都會做版本控制上 git,但把這些機密資訊也上 git 是很不好的一件事,畢竟 github 也是曾經被駭過的,所以最好是把這些不想讓別人知道的資訊寫在另外一個
Thumbnail
打包網頁 在部署網站之前,我們要先來打包我們的網頁前端專案 為什麼要打包呢?什麼是打包呢?這有點像是編譯,如果你寫過 C 應該講到這裡就理解為什麼要這樣做了 在網頁開發中網頁內容最原始就是直接用 html 下去寫,但一個成熟的開發者會善用框架來開發,不論是用 vue 或 react,樣式的部分也會從
Thumbnail
歷經千辛萬苦,終於要來架站啦!首先先來介紹我們的架站工具 Nginx,最常用的架站工具主要有兩個,Apache 和 Nginx Apache 的歷史悠久,使用的人數也最多,之前在選擇架站工具時,考量的點是 Apache 比較肥,設定也比較難寫,所以最後選擇 Nginx 作為我的架站工具 Nginx
Thumbnail
要完整的了解整個網頁的開發需要掌握相當多的知識,就算目標只是學習網頁開發中的其中一個部分,比方說只是想成為前端工程師,或是只是想成為後端工程師,最好還是對整個網頁專案整體有一定程度的了解,才不會和其他工程師合作的時候,各開發各的,然後兜不起來 這個系列的教學,希望就算你的目標不是成為全端工程師,也能
Thumbnail
Recently, I add some useful settings for my nginx web server. I would like to take a note of some basic and useful settings of nginx. http server
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
    一張椅子,至少要有三個腳,坐起來才會穩固。人生也如同一張椅子,如果想讓自己過得美好,一定不能缺少三個重要支柱,分別是好信用、好朋友和好伴侶。當我們來到世上,家庭成員,没得選擇;出生背景,没得選擇;學校際遇,没得選擇;其他還有好多好多的人際關係和接觸事物,無法由自己選擇。因為無法選擇,
Thumbnail
filebeat的作用就像是一隻看門狗(watch dog),當看門狗監測到任何風吹草動(log產生變化)時,就立即事件告訴主人(logstash)。
Thumbnail
此篇我們會將Nginx log修改成為Logstash可以正確辨識的格式。
Thumbnail
這系列要介紹如何使用ELK架構(Elastic)及Filebeat來監控nginx的access.log。我會針對每個步驟寫出一篇文章來介紹系統該如何設定,如果有錯誤的地方,也麻煩多多指教。
Thumbnail
在雲端建立AKS後,運行後有許多Container會被外部服務呼叫使用。但我們知道當我們佈署到AKS,如果要被外面服務呼叫,就要在YAML將Type設定成Loadbalance,一旦這樣設定,就會變成每個Container就會多出一個對外的IP,Container變多了,對外IP就會擴增很快,也不好
Thumbnail
保護後端重要資訊 在 django 專案中我們會把設定都寫在 settings.py 內,包含了 SECRET_KEY 等機密資訊,通常專案都會做版本控制上 git,但把這些機密資訊也上 git 是很不好的一件事,畢竟 github 也是曾經被駭過的,所以最好是把這些不想讓別人知道的資訊寫在另外一個
Thumbnail
打包網頁 在部署網站之前,我們要先來打包我們的網頁前端專案 為什麼要打包呢?什麼是打包呢?這有點像是編譯,如果你寫過 C 應該講到這裡就理解為什麼要這樣做了 在網頁開發中網頁內容最原始就是直接用 html 下去寫,但一個成熟的開發者會善用框架來開發,不論是用 vue 或 react,樣式的部分也會從
Thumbnail
歷經千辛萬苦,終於要來架站啦!首先先來介紹我們的架站工具 Nginx,最常用的架站工具主要有兩個,Apache 和 Nginx Apache 的歷史悠久,使用的人數也最多,之前在選擇架站工具時,考量的點是 Apache 比較肥,設定也比較難寫,所以最後選擇 Nginx 作為我的架站工具 Nginx
Thumbnail
要完整的了解整個網頁的開發需要掌握相當多的知識,就算目標只是學習網頁開發中的其中一個部分,比方說只是想成為前端工程師,或是只是想成為後端工程師,最好還是對整個網頁專案整體有一定程度的了解,才不會和其他工程師合作的時候,各開發各的,然後兜不起來 這個系列的教學,希望就算你的目標不是成為全端工程師,也能
Thumbnail
Recently, I add some useful settings for my nginx web server. I would like to take a note of some basic and useful settings of nginx. http server