Nginx 第三方模組 漫談緣起

2021-09-23 19:50:11 字數 2367 閱讀 2086

本文的部分內容和摘錄於

為什麼要使用nginx模組?我個人覺得taobao這個ppt來做說明是最好不過了

從web伺服器結構開始說起:

第乙個模式(lamp)

這個結構中,apache的php模組將所有動態網頁都使用php解析,所有邏輯結構都放在php中進行處理。

這個結構也是現在最多web**的架構lamp(linux+apache+php+mysql)

apache的強勁的市場占有率(12月全球市場份額報告)也說明了這個結構的好處是易於理解,開發上手快。存在就是理由,apache的各種功能模組已經實現很多了,基本上能想到的功能都已經實現了。

但是這個結構有其致命的弱點:

1 高併發下效能表現不佳

2 頁面主體內容(比如)等靜態資源訪問浪費頻寬(當然這個後來大公司都改用cdn來處理)

3 存在慢連線攻擊(syn flood)風險

模式演變:

關於apache和nginx的優缺點的討論請看這裡

apache2.4剛剛發布,宣稱it』s 「as fast, and even faster than nginx」.

這裡有乙個blog對進行了測試實驗。

第二種模式(lnmp):

nginx是個輕量級的http server,必須借助第三方的fastcgi處理器才可以對php進行解析。現在使用最多的就是nginx+php-fpm+php這個模式了。

這裡apache被nginx取代,隨之帶來的解決優勢是:

1 提高併發服務能力

2 可以抵禦慢連線攻擊

相對於上乙個模型,還有其他的優點:

3 靜態內容(css,js,pic)等放到cdn上,避免了頻寬浪費

4 php對於這些大資料量的資料的處理驟減,減少了php的計算量

但是這個模式最大的問題就在於:php+php-fpm對於nginx本身效能的限制。

nginx本身的極限測試:單機支援200萬連線以上(據說,未驗證),而php+php-fpm+nginx大概是3萬以上。(參考張宴的部落格)。當然這個效能已經遠遠滿足了絕大部分的**。但對於一些超大規模的專案(比如taobao)就必須考慮高併發的效能問題了。

好了,現在考慮,為什麼一定要使用php呢,nginx是否能完成邏輯呢?

模式演變:

從nginx聊開(nginx中文維基):

nginx是輕量級web伺服器,它**不多(v0.5.32才8w多行**)。nginx本身做的工作實際很少,當它接到乙個http請求時,它僅僅是通過查詢配置檔案將此次請求對映到乙個location block,而此location中所配置的各個指令則會啟動不同的模組去完成工作,因此模組可以看做nginx真正的勞動工作者。

nginx中的模組都是使用c語言編寫的。nginx中模組分為handler,filter和upstream三種型別。

第三種模型:

這種模型徹底放棄了php,邏輯不再依賴php指令碼了,直接使用nginx的擴充套件來完成,這就意味著不需要開啟n個fastcgi,不需要使用php進行邏輯操作了,高併發的php的限制也消失了。

初次看到這個模型會產生幾個問題:

1 nginx如何高效訪問mysql資料庫呢?

使用ngx_drizzle模組(國人編寫)

2 要實現越來越多的nginx模組,發現c語言開發效率太低了,是否有其他指令碼引擎呢?

使用lua指令碼,ngx_lua模組(taobao兩位大神的傑作)

在nginx_at_taobao的ppt上說taobao在2023年已經在開發大量的nginx模組了,並且在2023年推出了自己的web伺服器tengine(可以看做是nginx的super版本)(看來taobao在web伺服器方面是非常強啊!!)

這第三種模型是taobao大力推薦和正在使用的:

使用lua指令碼(巴西人發明的一種語言,相當高效簡易)寫nginx擴充套件

nginx直接連線資料庫

將靜態資源放到cdn上

保證高併發下的效率的提公升

nginx的第三方模組

Nginx 第三方模組 漫談緣起

本文的部分內容和摘錄於 為什麼要使用nginx模組?我個人覺得taobao這個ppt來做說明是最好不過了 從web伺服器結構開始說起 第乙個模式 lamp 這個結構中,apache的php模組將所有動態網頁都使用php解析,所有邏輯結構都放在php中進行處理。這個結構也是現在最多web 的架構lam...

Nginx 第三方模組 漫談緣起

本文的部分內容和摘錄於 為什麼要使用nginx模組?我個人覺得taobao這個ppt來做說明是最好不過了 從web伺服器結構開始說起 第乙個模式 lamp 這個結構中,apache的php模組將所有動態網頁都使用php解析,所有邏輯結構都放在php中進行處理。這個結構也是現在最多web 的架構lam...

Nginx 第三方模組 漫談緣起

本文的部分內容和摘錄於 為什麼要使用nginx模組?我個人覺得taobao這個ppt來做說明是最好不過了 從web伺服器結構開始說起 第乙個模式 lamp 這個結構中,apache的php模組將所有動態網頁都使用php解析,所有邏輯結構都放在php中進行處理。這個結構也是現在最多web 的架構lam...