Nginx架構設計
Nginx架構設計
這裡先說下Nginx設計時重視的幾個關鍵點:
- 效能:包括網路效能,單詞請求的延遲性,網路效率;(名詞就不解釋了~)
- 可伸縮性:可通過新增元件來提升服務,或者允許元件之間具有互動功能;
- 簡單性:元件的簡單程度,便於理解和實現;
- 可修改性:包括可進化性,可擴充套件性,可定製性,可配置性,可重用性;
- 可見性:可監控關鍵元件的執行情況;
- 可移植性:跨平臺執行;
- 可靠性:在服務出現故障時,一個架構容易受到系統層面故障影響的程度;
模組化設計
高度模組化的設計是Nginx的架構基礎。在Nginx中,除了少量的核心程式碼,其他一切皆為模組。這一點在之前的模組開發的實踐中已經感受到了。
所有模組都遵循ngx_module_t的介面設計,並且所有模組間都是分層次、分類別的。
官方Nginx共有五大型別模組:核心模組、配置模組、事件模組、HTTP模組、mail模組。
它們都各具備相同的ngx_module_t介面,但在請求處理流程中的層次不相同。
Nginx常用模組間的關係如下圖:
配置模組與核心模組由Nginx的框架程式碼定義。其中,配置模組是所有模組的基礎,它實現最基本的解析功能(即解析nginx.conf檔案)。然後,Nginx框架會呼叫核心模組,其他三種模組則不會與框架產生直接關係。如上圖示,事件模組、HTTP模組、mail模組在核心模組中分別都有一個自己的“代言人”,並在同類模組中有一個作為核心業務與管理功能的模組。比如,事件模組由其代言人ngx_events_module核心模組定義,但所有事件模組載入又由ngx_event_core_module負責。
在上圖中,配置模組與核心模組都是與Nginx框架密切相關的,是其他模組的基礎。而事件模組又是HTTP模組和mail模組的接觸。HTTP模組與mail模組更關注於應用層面,地位相似。
事件驅動架構
事件驅動架構,簡單來生活,就是由一些時間發生源產生事件,由一個或多個事件收集器來收集、分發時間,然後許多時間處理器會註冊自己感興趣的事件,同時會“消費”這些事件。
Nginx採用完全的事件驅動架構來處理業務,與傳統的Web伺服器不同。區別用圖示:
- 傳統Web伺服器處理事件模型
- Nginx處理事件模型
兩者最重要差別:傳統Web伺服器是每個事件消費者獨佔一個程式資源,Nginx的事件消費者只是被事件分發程式短期呼叫。
這樣的設計使得網路效能、使用者感知的請求延時得到提升。但同時帶來的一個弊端:每個時間消費者不能有阻塞行為,否則會由於長時間佔用分發者程式而導致其他事件得不到響應。更進一步說,就是不能讓分發者程式轉為休眠或等待狀態。
相關文章
- 架構設計思想-微服務架構設計模式架構微服務設計模式
- 架構設計架構
- 遊戲架構 遊戲架構設計(8)遊戲架構
- 淺談Nginx伺服器的內部核心架構設計!Nginx伺服器架構
- 淺談Nginx伺服器的內部核心架構設計Nginx伺服器架構
- groupcache 架構設計PCA架構
- Tumblr 架構設計架構
- 架構與設計架構
- 架構設計之一——基礎架構架構
- 架構設計之架構的演變架構
- Nginx 原理和架構Nginx架構
- Nginx架構賞析Nginx架構
- nginx 整體架構Nginx架構
- 架構師修煉之道(二)——架構?設計?架構師?架構
- Nginx-03-Nginx 專案架構Nginx架構
- SaaS架構:開放平臺架構設計架構
- 網站架構設計網站架構
- 架構設計方法論架構
- 面向架構程式設計架構程式設計
- 架構設計(九):估算架構
- 架構設計方法初探架構
- MVP架構設計 初探MVP架構
- 軟體架構設計架構
- WebService Soap架構設計Web架構
- 架構、框架、設計模架構框架
- 學習架構設計架構
- 企業架構設計?架構
- 如何設計app架構?APP架構
- 常用的設計架構架構
- 軟體架構設計原則和模式(上):分層架構設計架構模式
- 深入 Nginx 之架構篇Nginx架構
- spark架構設計&程式設計模型01Spark架構程式設計模型
- 讀《前端架構設計》 兼談架構與框架前端架構框架
- SaaS架構:多租戶系統架構設計架構
- SaaS架構:中央庫存系統架構設計架構
- 【Apollo】(2)--- Apollo架構設計架構
- 秒殺架構模型設計架構模型
- Fresco架構設計賞析架構