NGINX 架構 - 《事件驅動架構》

閱讀時間約 3 分鐘
上一篇有講完【NGINX 架構 - 《模組化設計》】後,接下來這邊透過自己的理解,來專門介紹『事件趨動架構』,以此來幫助自己認識NGINX架構的內容。

什麼是「事件驅動架構」

事件驅動架構並非是NGINX獨有的名詞,也並非只應用於電腦程式設計領域,它是一種古老的回應事件模型,在電腦程式設計、公共關係、經濟活動等領域均有很廣泛的應用。《節錄於 Nginx技術手札:網頁伺服器應用全攻略 3.3章節》
而這邊指的事件驅動架構是一種程式設計的方式 - 事件驅動程式設計(Event-driven programming)
事件驅動程式設計Event-driven programming)是一種電腦程式設計模型。這種模型的程式執行流程是由使用者的動作(如滑鼠的按鍵,鍵盤的按鍵動作)或者是由其他程式的訊息來決定的。更多細節,可閱維基百科《事件驅動程式設計
事件驅動架構,主要是由「事件收集器」、「事件發送器」、「事件處理器」三個基本單元組成的,如同名稱上的意思,由使用者觸發事件(滑鼠點擊),然後透過事件收集器來收集事件,再由事件發送器來分配事件,最後才由事件處理器來處理這些事件。
事件驅動架構
Nginx Server回應和處理Web請求的過程,就是以事件驅動模型為基礎的,因此事件收集器和事件發送器,顧名思義,就不需要多做解釋了,最主要的是「事件處理器」。
事件收集器:負責收集 worker 進程的各種 IO 請求
事件發送器:負責將 IO 事件發送到 事件處理器
事件處理器:負責各種事件的響應工作

事件處理器有三種實現的方式:

1. 進程(Process)事件處理器

「事件處理器」收到事件後,「目標物件」就建立一個進程(Process),來處理該事件,透過此方式處理事件,會讓Server負擔較大,因此效能較差,但實現較為容易。
進程的優缺點:
優點:每個進程有自己獨立的系統資源分配空間,不同進程之間的資源不共享,因此不需要特別對進程做互斥存取的處理。
缺點:建立進程以及進程的上下文切換(Context Switch)都較消耗資源,進程間若有通訊的需求也較為複雜。
(截錄於:莫力全 Kyle Mo - 程序(進程)、執行緒(線程)、協程,傻傻分得清楚! )

2. 線程(thread)事件處理器

「事件處理器」收到事件後,「目標物件」就建立一個線程(thread),來處理該事件,透過此方式處理事件,可能會遇到鎖死、同步等諸多問題,且編碼複雜。

3. 非阻塞I/O事件處理器

「事件處理器」收到事件後,「目標物件」就將其放入一個待處理事件的列表,使用非阻塞I/O方式來處理事件。透過此方式處理事件,代碼、邏輯都比上述兩者還複雜,現今大多數網路伺服器都是採用此種方式,因此就有了「事件驅動處理函數庫」。
使用多線程或多進程來處理,會有以下兩種缺點 :
1. 高併發會爆,因此進程或線程數有限制,且上下文切換。
2. 如果應用大部份的服務是 I/O 會很浪費資源(因為就為了等待,而用不少記憶體開進程,但是他大部份都只是在等待)。
(截錄於 拿鐵派的馬克 Blog - 30-07 之應用層的 I/O 優化 - 非阻塞 I/O 模型)
連結:什麼是進程?什麼是線程?
連結:什麼是非阻塞I/O

筆者的話

原本打算把「事件驅動處理函數庫」的模組也寫在這篇,但深入地去認識了解後,發現吸收上著實需要花一些時間,因此打算寫在下一篇了。
還是那句話:寫這本影子書的目的,是為了督促自己讀書!

參考資料:

此篇文章會顯示動態置底廣告
為什麼會看到廣告
13會員
28Content count
技術筆記紀錄、生活隨筆
留言0
查看全部
發表第一個留言支持創作者!
Scott Salon 的其他內容
上一篇有提到﹝NGINX﹞低消耗高效能的原由,正來至於它優秀的架構設計,其架構主要包括:『模組化設計』、『事件驅動架構』、『請求多階段非同步處理』、『管理程式與多工程式設計』、『記憶體池設計』。 而這邊透過自己的理解,來專門介紹『模組化設計』,以此來幫助自己認識NGINX架構的內容。 核心模組:
什麼是NGINX ﹝NGINX﹞是一款免費的開源軟體的非同步框架的Web Server
上一篇有提到﹝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