Apache nginx lighttpd性能比較

               

1. web服務器簡介

1. lighttpd

     Lighttpd是一個德國人領導的開源軟件,其根本的目的是提供一個專門針對高性能網站,安全、快速、兼容性好並且靈活的Web server環境   

     Lighttpd是一個具有非常低的內存開銷,cpu佔用率低,效能好,以及豐富的模塊等特點。lighttpd是衆多OpenSource輕量級的web server中較爲優秀的一個。支持FastCGI, CGI, Auth, 輸出壓縮(output compress), URL重寫, Alias等重要功能。

     而Apache之所以流行,很大程度也是因爲功能豐富,在Lighttpd 上很多功能都有相應的實現了,這點對於Apache的用戶是非常重要的,因爲遷
移到Lighttpd就必須面對這些問題。

    Lighttpd使用fastcgi方式運行php,它會使用很少的PHP進程響應很大的併發量。其fastCGI進程管理器一般使用spawn-fcgi

2.apache

    apache是世界排名第一的web服務器, 根據netcraft(www.netsraft.co.uk)所作的調查,世界上百分之五十以上的web服務器在使用apache.

1995年4月, 最早的apache(0.6.2版)由apache group公佈發行. apache group 是一個完全通過internet進行運作的非盈利機構, 由它來決定apache web服務器的標準發行版中應該包含哪些內容. 准許任何人修改隱錯, 提供新的特徵和將它移植到新的平臺上, 以及其它的工作. 當新的代碼被提交給apache group時, 該團體審覈它的具體內容, 進行測試, 如果認爲滿意, 該代碼就會被集成到apache的主要發行版中.

    它有優勢主要在於源代碼開放、有一支開放的開發隊伍、支持跨平臺的應用(可以運行在幾乎所有的Unix、Linux、Windows系統平臺之上)。Apache的模塊支持非常豐富,以至於它提供了非常完善的功能。

     apache 的特性:

   1) 幾乎可以運行在所有的計算機平臺上.

   2) 支持最新的http/1.1協議

   3) 簡單而且強有力的基於文件的配置(httpd.conf).

   4) 支持通用網關接口(cgi)

   5) 支持虛擬主機.

   6) 支持http認證.

   7) 集成perl.

   8) 集成的代理服務器

   9) 可以通過web瀏覽器監視服務器的狀態, 可以自定義日誌.

   10) 支持服務器端包含命令(ssi).

   11) 支持安全socket層(ssl).

   12) 具有用戶會話過程的跟蹤能力.

   13) 支持fastcgi(只在apache1.3時支持,apache2以後的版本不再支持了)

   14) 支持java servlets

   15) 不支持epoll(這年頭,epoll幾乎是性能的必備,這也是爲什麼apache的併發性能比其他兩款web軟件差的主要原因吧)

   16) 非常好用的proxy和proxy_ajp(很多人用它作爲tomcat的前端)

3.nginx

    Nginx是俄羅斯人編寫的十分輕量級的HTTP服務器,Nginx,它的發音爲“engine X”, 是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP 代理服務器.Nginx是由俄羅斯人 Igor Sysoev爲俄羅斯訪問量第二的 Rambler.ru站點開發.

    Nginx以事件驅動的方式編寫,所以有非常好的性能,同時也是一個非常高效的反向代理、負載平衡。其擁有匹配 Lighttpd的性能,同時還沒有Lighttpd的內存泄漏問題,而且Lighttpd的mod_proxy也有一些問題並且很久沒有更新。但是Nginx並不支持cgi方式運行,原因是可以減少因此帶來的一些程序上的漏洞。所以必須使用FastCGI方式來執行PHP程序。

    nginx做爲HTTP服務器,有以下幾項基本特性:

    1)處理靜態文件,索引文件以及自動索引;打開文件描述符緩衝.

    2)無緩存的反向代理加速,簡單的負載均衡和容錯.

    3)FastCGI,簡單的負載均衡和容錯.

    4)模塊化的結構。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服務器處理單頁中存在的多個SSI,則這項處理可以並行運行,而不需要相互等待。

    5) Nginx專爲性能優化而開發,性能是其最重要的考量,實現上非常注重效率。它支持內核Poll模型,能經受高負載的考驗,有報告表明能支持高達 50,000個併發連接數。

    6) Nginx具有很高的穩定性。其它HTTP服務器,當遇到訪問的峯值,或者有人惡意發起慢速連接時,也很可能會導致服務器物理內存耗盡頻繁交換,失去響應,只能重啓服務器。例如當前apache一旦上到200個以上進程,web響應速度就明顯非常緩慢了。而Nginx採取了分階段資源分配技術,使得它的CPU與內存佔用率非常低。nginx官方表示保持10,000個沒有活動的連接,它只佔2.5M內存,所以類似DOS這樣的攻擊對nginx來說基本上是毫無用處的。就穩定性而言,nginx比lighthttpd更勝一籌

    7) Nginx支持熱部署。它的啓動特別容易, 並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啓動。你還能夠在不間斷服務的情況下,對軟件版本進行進行升級。

2. Nginx與Apache的異同

    Nginx和Apache一樣,都是HTTP服務器軟件,在功能實現上都採用模塊化結構設計,都支持通用的語言接口,如PHP、Perl、Python等,同時還支持正向和反向代理、虛擬主機、URL重寫、壓縮傳輸、SSL加密傳輸等。

    1)在功能實現上,Apache的所有模塊都支持動、靜態編譯,而Nginx模塊都是靜態編譯的,

    2)對FastCGI的支持,Apache對Fcgi的支持不好,而Nginx對Fcgi的支持非常好;

     3)在處理連接方式上,Nginx支持epoll,而Apache卻不支持;

     4)在空間使用上,Nginx安裝包僅僅只有幾百K,和Nginx比起來Apache絕對是龐然大物。

1)

Nginx 相對apache的優點:

輕量級,同樣起web 服務,比apache 佔用更少的內存及資源

靜態處理,Nginx 靜態處理性能比 Apache 高 3倍以上

抗併發,nginx 處理請求是異步非阻塞的,而apache則是阻塞型的,在高併發下nginx 能保持低資源低消耗高性能。在Apache+PHP(prefork)模式下,如果PHP處理慢或者前端壓力很大的情況下,很容易出現Apache進程數飆升,從而拒絕服務的現象。 

    高度模塊化的設計,編寫模塊相對簡單

    社區活躍,各種高性能模塊出品迅速啊

2) apache 相對nginx 的優點:

    rewrite,比nginx 的rewrite 強大

    模塊超多,基本想到的都可以找到

    少bug,nginx的bug相對較多

    超穩定

    Apache對PHP支持比較簡單,Nginx需要配合其他後端用 

    存在就是理由,一般來說,需要性能的web 服務,用nginx 。如果不需要性能只求穩定,那就apache 吧。後者的各種功能模塊實現得比前者,例如ssl 的模塊就比前者好,可配置項多。

   這裏要注意一點,epoll(freebsd 上是 kqueue )網絡IO 模型是nginx 處理性能高的根本理由,但並不是所有的情況下都是epoll 大獲全勝的,如果本身提供靜態服務的就只有寥寥幾個文件,apache 的select 模型或許比epoll更高性能。當然,這只是根據網絡IO 模型的原理作的一個假設,真正的應用還是需要實測了再說的。

 

3) . 選擇Nginx的優勢所在

    Nginx作爲HTTP服務器的優勢是顯而易見的,它有很多其他Web服務器無法比擬的性能和優勢:

1) 作爲Web服務器: Nginx處理靜態文件、索引文件,自動索引的效率非常高。

2) 作爲代理服務器,Nginx可以實現無緩存的反向代理加速,提高網站運行速度。

3) 作爲負載均衡服務器,Nginx既可以在內部直接支持Rails和PHP,也可以支持HTTP代理服務器對外進行服務,同時還支持簡單的容錯和利用算法進行負載均衡。

4) 在性能方面,Nginx是專門爲性能優化而開發的,在實現上非常注重效率。它採用內核Poll模型(epoll and kqueue ),可以支持更多的併發連接,最大可以支持對50 000個併發連接數的響應,而且只佔用很低的內存資源。

5) 在穩定性方面,Nginx採取了分階段資源分配技術,使得CPU與內存的佔用率非常低。Nginx官方表示,Nginx保持10 000個沒有活動的連接,而這些連接只佔用2.5MB內存,因此,類似DOS這樣的攻擊對Nginx來說基本上是沒有任何作用的。

6) 在高可用性方面,Nginx支持熱部署,啓動速度特別迅速,因此可以在不間斷服務的情況下,對軟件版本或者配置進行升級,即使運行數月也無需重新啓動,幾乎可以做到7×24小時不間斷地運行。

 

   這兩者最核心的區別在於apache是同步多進程模型,一個連接對應一個進程;nginx是異步的,多個連接(萬級別)可以對應一個進程 。

   建議使用Nginx做前端,後端用apache。大型網站最好使用Nginx自帶的集羣功能。

  

Nginx和apache壓力測試數據比較:

  apachenginx
ncTimer/st/r(ms)Timer/st/r
400002004588622541955209
4000020036109118340986202
        
40000400361110361449813491
4000040049811492381027389
4000040038103738541963415
        
4000010004079810177517731292
4000010003231238091   
        
40000500034911443660537416742
        
4000010000364109911426957417394
        
4000015000369108138665310  

服務器數據:
    
ncsyssys
40000200ProcessNum:223 Mem:130.0 CPU:253.2 Load:2.57
ProcessNum:209 Mem:121.5 CPU:186.7 Load:3.52
ProcessNum:35 Mem:7.1 CPU:0 Load:0.29
ProcessNum:35 Mem:7.1 CPU:7.8 Load:5.99
    
40000400ProcessNum:177 Mem:134.3 CPU:55.3 Load:0.46
ProcessNum:413 Mem:239.3 CPU:122.4 Load:3.52
ProcessNum:35 Mem:10.7 CPU:5.9 Load:0.04
ProcessNum:38 Mem:10.7 CPU:29.1 Load:5.08
    
400001000
ProcessNum:188 Mem:92.9 CPU:10.8 Load:0.01
ProcessNum:401 Mem:200.0 CPU:15.3 Load:1.43
ProcessNum:39 Mem:7.1 CPU:8.3 Load:3.08
ProcessNum:39 Mem:7.1 CPU:15.6 Load:4.21
    


           

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章