第1章 常用的軟體 <!--[if !supportLists]-->1.1 <!--[endif]-->常用來提供靜態服務的軟體 <!--[if !supportLists]-->1.2 <!--[endif]-->常用來提供動態服務的軟體 <!--[if !supportLists]-->第2章 ...
第1章 常用的軟體
1.1 常用來提供靜態服務的軟體
Apache :這是中小型Web服務的主流,Web伺服器中的老大哥,
Nginx :大型網站Web服務的主流,曾經Web伺服器中的初生牛犢,現已長大。
Nginx 的分支 Tengine ( http://tengine.taobao.org/)目前也在飛速發展•
Lighttpd :這是一個不溫不火的優秀 Web軟體,社區不活躍,靜態解析效率很高.在 Nginx 流行前,它是大併發靜態業務的首選,國內百度貼吧、豆瓣等眾多網站都有Lighttpd奮鬥的身彩"
1.2 常用來提供動態服務的軟體
PHP ( FastCGI ):大中小型網站都會使用,動態網頁語言PHP程式的解析容器。它可配合Apache解析動態程式,不過,這裡的PHP不是FastCGI守護進程橫式,而是mod_php5.so ( module)也可配合Nginx解析動態程式,此時的PHP常用FastCGI守護進程模式提供服務。
Tomcat :中小企業動態Web服務主流,互聯網Java容器主流(如jsp、do )
Resin :大型動態Web服務主流,互聯網Java容器主流(如jsp、do )
IIS ( Internet information services ):微軟 windows 下的 Web 服務軟體(如 asp、aspx )
第2章 nginx 軟體
2.1 軟體介紹
如果你聽說或使用過 Apache軟體,那麼很快就會熟悉 Nginx軟體,與 Apache軟體類似, Nginx ( “engme x")是一個開源的,支持高性能、高併發的 WWW伺服器和代理服務軟體。它是由俄羅斯人 Igor Sysoev開發的,最初被應用在勘羅斯的大型網站 www.rambler.ru 上,後來作者將源代碼以類BSD許可證的形式開源出來供全球使用。
Nginx因具有高併發(特別是靜態資源)占用系統資源少等特性,且功能豐富而逐漸流行起來。
在功能應用發麵,Nginx不但是一個優秀的Web服務軟體,還具有反向代理負載均衡功能和緩存服務功能。在反向代理負載均衡功能方面,它類似於大名鼎鼎的LVS負載均衡及Haproxy等專業代理軟體,但是Nginx部署起來更為簡單、方便;在緩存服務功能方面,它又類似於Squid等專業的緩存服務軟體。
Nginx 可以運行在 UNIX、Linux、BSD、Mac 0S X、Solaris,以及 Microsoft Windows 等操作系統中。隨著Nginx在國內很多大型網站中的穩定高效運行,近兩年它也逐漸被越來越多的中小型網站所使用。當前流行的Nginx Web組合被稱為LNMP或LEMP(即Linux Nginx MySQL PHP),其中 LNMP 里的 N 取自Nginx ( "engine x" )
Nginx 的官方介紹見 http://nginx.org/en
2.2 NGINX 軟體特性
2.2.1 HTTP伺服器的特色及優點:
u 支持高併發:能支持幾萬併發連接(特別是靜態小文件業務環境)
u 資源消耗少:在3萬併發連接下,開啟10個Nginx線程消耗的記憶體不到200MB
u 可以做HTTP反向代理及加速緩存、即負載均衡功能,內置對RS節點伺服器健康檢查功能,這相當於專業的Haproxy軟體或LVS的功能。
u 具備Squid等專業緩存軟體等的緩存功能。
u 支持非同步網路I/O事件橫型epoll(Linux2.6+)
2.2.2 nginx功能特性
Ø web網站服務
Ø 反向代理負載均衡(nginx /lvs /haproxy)
Ø nginx緩存服務(memcache /redis /mongodb)
2.3 nginx軟體的企業功能應用
業務類型 |
應用方案 |
靜態業務 |
若是高併發場景,儘量採用Nginx或Lighttpd,二者首選Nginx |
動態業務 |
理論上採用Nginx和Apache均可,建議選擇Nginx,為了避免相同業務的服務軟體多樣化,增加額外維護成本。動態業務可以由Nginx兼做前端代理,再根據頁面元素的類型或目錄,轉發到後端相應的伺服器處理進程。 ---首選tomcat |
既有靜態業務又有動態業務 |
採用Nginx 利用nginx軟體是無法處理動態業務請求,要讓nginx結合php軟體處理動態業務請求,在加上mysql 即 LNMP架構 |
2.4 nginx軟體的動態訪問瓶頸
2.4.1 與其他軟體的對比
先來看看Apache軟體的特點,如下
² Apache2.2版本非常穩定強大,據官方說,Apache2.4版本性能更強。
² Prefork模式取消了進程創建開銷,性能很高。
² 處理動態業務數據時,因關聯到後端的引擎和資料庫,瓶頸不在Apache上。
² 高併發時消耗系統資源相對多一些。
² 基於傳統的select模型,高併發能力有限。
² 支持擴展庫,可通過DSO、apxs方法編譯安裝額外的插件功能,不需要重新編譯Apache
² 功能多,更穩定,更安全,插件也多。
² 市場份額在逐年遞減
再來看看Nginx軟體的特點,如下:
n 基於非同步網結I/O模 型(epollk kqueue)
n 具備支持高性能,高併發的特性,併發連接可達數萬。
n 對小文件(小於1 MB的靜態文件)高併發支持很好,性能很高
n 不支持類似 Apache的DSO模式、擴展庫必須編譯進主程式(缺點)
n 進程占用系統資源比較低。
n 支持Web、反向Proxy、Cache三大重點功能,幷且都很優秀。
n 市場份額在逐年快速增加。
最後是Lighttpd的特點,如下:
² 基於非同步網路 I/ O模型,性能、併發都與 Nginx相近。
² 擴展庫是 SO模式,比Nginx靈活
² 目前國內的使用率比較低,安全性沒有 Apache和Nginx好。
² 通過插件(mod_secdownload)可實現文件 URL地址加密(優點)
² 社區不活躍,市場份額較低,
2.4.2 最主要的區別(select & epoll)
NGINX 使用的是epoll 和Kqueue 非同步網路I/O模型,而apache使用的是傳統的select模型
比喻:
第一個比喻:
假設你在大學讀書,住的宿舍樓有很多房間,你的朋友要來找你。select版宿管大媽就會帶著你的朋友到各房間挨個去找,直到找到你為止。而epoll版宿管大媽會先記下每位入住同學的房間號,你的朋友來找你時,只需告訴你的朋友你住在哪個房間即可,不用親自帶著你的朋友滿宿舍樓找人了。如果同時來了100個人,都要找自己住這棟樓的同學,select版和epoll版宿管大媽,誰的效率更高,就很明顯了。
第二個比喻:
select的調用複雜度是線性的,即O(n)。舉個例子,一個保姆照看照看一群孩子,如果把孩子是否需要尿尿比作網路I/O事件,select的作用就好比這個保姆挨個詢問每個孩子"你要尿尿嗎?”如果孩子回答是,保姆則把孩子領出來放到另外一個地方。當所有孩子詢問完之後,保姆領著這些要尿尿的孩子去上廁所(處理網路I/O事件).在epoll機制下,保姆不再需要挨個詢問每個孩子是否需要尿尿。取而代之的是,如果孩子需要尿尿,他就自己主動站到事先約定好的地方,而保姆的職責就是查看事先約定好的地方是否有孩子。如果有小孩,則領著孩子去上廁所(網路事件處理)。因此,epoll的這種機制,能夠高效地處理成千上萬的併發連接,並且性能不會隨著連接數増加而下降太多。