Nginx 第三方模塊-漫談緣起


本文的部分內容和圖片摘錄於http://tengine.taobao.org/download/nginx@taobao.pdf

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

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

 

第一個模式(LAMP)

clip_image001

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

這個結構也是現在最多web網站的架構LAMP(Linux+Apache+PHP+Mysql)

 

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

 

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

1 高並發下性能表現不佳

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

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

 

模式演變:

clip_image002

 

關於Apache和Nginx的優缺點的討論請看這里

Apache2.4剛剛發布,宣稱it’s “as fast, and even faster than Nginx”.

這里有一個blog對進行了測試實驗。

 

第二種模式(LNMP):

clip_image003

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是否能完成邏輯呢?

 

模式演變:

clip_image004

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

nginx是輕量級web服務器,它代碼不多(v0.5.32才8w多行代碼)。Nginx本身做的工作實際很少,當它接到一個HTTP請求時,它僅僅是通過查找配置文件將此次請求映射到一個location block,而此location中所配置的各個指令則會啟動不同的模塊去完成工作,因此模塊可以看做Nginx真正的勞動工作者。

nginx中的模塊都是使用C語言編寫的。nginx中模塊分為Handler,filter和upstream三種類型。

 

第三種模型:

clip_image005

這種模型徹底放棄了php,邏輯不再依賴php腳本了,直接使用nginx的擴展來完成,這就意味着不需要開啟n個fastcgi,不需要使用php進行邏輯操作了,高並發的php的限制也消失了。

 

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

1 nginx如何高效訪問Mysql數據庫呢?

使用ngx_drizzle模塊(國人編寫)

 

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

使用lua腳本,ngx_lua模塊(taobao兩位大神的傑作)

 

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

 

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

使用lua腳本(巴西人發明的一種語言,相當高效簡易)寫nginx擴展

nginx直接連接數據庫

將靜態資源放到cdn上

保證高並發下的效率的提升

 

nginx的第三方模塊http://wiki.nginx.org/3rdPartyModules

 

    ----------------------

    作者:yjf512(軒脈刃)

    出處:http://www.cnblogs.com/yjf512/

    本文版權歸yjf512和cnBlog共有,歡迎轉載,但未經作者同意必須保留此段聲明


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM