關於Apache/Tomcat/JBOSS/Neginx/lighttpd/Jetty等一些常見服務器的區別比較和理解

先說Apache和Tomcat的區別:php

         Apache是世界使用排名第一的Web服務器軟件。它能夠運行在幾乎全部普遍使用的計算機平臺上,因爲其跨平臺和安全性被普遍使用,是最流行的Web服務器端軟件之一。 
  在Apache基金會裏面ApacheServer永遠會被賦予最大的支持,畢竟大兒子最親嘛,而Apache的開源服務器軟件Tomcat一樣值得關注,畢竟Tomcat是開源免費的產品,用戶會給予最大的支持。可是常常在用Apache和Tomcat等這些服務器時,你總感受仍是不清楚他們之間有什麼關係,在用Tomcat的時候總出現Apache,總感到迷惑,到底誰是主誰是次,所以特地在網上查詢了一些這方面的資料,總結了一下。 
  解析一: 
  Apache支持靜態頁,Tomcat支持動態的,好比Servlet等, 
  通常使用Apache+Tomcat的話,Apache只是做爲一個轉發,對JSP的處理是由Tomcat來處理的。 
  Apche能夠支持PHPcgiperl,可是要使用Java的話,你須要Tomcat在Apache後臺支撐,將Java請求由Apache轉發給Tomcat處理。 
  Apache是Web服務器,Tomcat是應用(Java)服務器,它只是一個Servlet(JSP也翻譯成Servlet)容器,能夠認爲是Apache的擴展,可是能夠獨立於Apache運行。 
  前端

        這兩個有如下幾點能夠比較的: 
  ◆二者都是Apache組織開發的 
  ◆二者都有HTTP服務的功能 
  ◆二者都是免費的 

  不一樣點: 

  Apache是專門用了提供HTTP服務的,以及相關配置的(例如虛擬主機、URL轉發等等) 
  Tomcat是Apache組織在符合Java EE的JSP、Servlet標準下開發的一個JSP服務器. 
         Runtime r=Runtime.getRuntime();   Process p=null;   try   {   p=r.exec("notepad");   }   catch(Exception ex)   {   System.out.println("fffff");   }    
  java

         解析二: 
  Apache是一個Web服務器環境程序,啓用他能夠做爲Web服務器使用,不過只支持靜態網頁 如(ASP,PHP,CGI,JSP)等動態網頁的就不行。 
  若是要在Apache環境下運行JSP的話就須要一個解釋器來執行JSP網頁,而這個JSP解釋器就是Tomcat,爲何還要JDK呢?由於JSP須要鏈接數據庫的話就要jdk來提供鏈接數據庫的驅程,因此要運行JSP的Web服務器平臺就須要Apache+Tomcat+JDK。 
  整合的好處是: 
  ◆若是客戶端請求的是靜態頁面,則只須要Apache服務器響應請求。 
  ◆若是客戶端請求動態頁面,則是Tomcat服務器響應請求。 
  ◆由於JSP是服務器端解釋代碼的,這樣整合就能夠減小Tomcat的服務開銷。 
  C是一個結構化語言,如譚老爺子所說:它的重點在於算法數據結構。C程序的設計首要考慮的是如何經過一個過程,對輸入(或環境條件)進行運算處理獲得輸出(或實現過程(事務)控制),而對於C++,首要考慮的是如何構造一個對象模型,讓這個模型可以契合與之對應的問題域,這樣就能夠經過獲取對象的狀態信息獲得輸出或實現過程(事務)控制。 

  解析三: 
  Apache:側重於HTTP Server 
  Tomcat:側重於Servlet引擎,若是以Standalone方式運行,功能上與Apache等效 , 支持JSP,但對靜態網頁不太理想; 
  Apache是Web服務器,Tomcat是應用(Java)服務器,它只是一個Servlet(JSP也翻譯成Servlet)容器,能夠認爲是Apache的擴展,可是能夠獨立於Apache運行。python

 

    PS:至於爲何要集成Tomcat和Apache,緣由是mysql

    Tomcat的最主要的功能是提供Servlet/JSP容器,儘管它也能夠做爲獨立的Java Web 服linux

務器,但在對靜態資源(如HTML 文件或圖像文件)的處理速度,以及提供的Web 服務器nginx

管理功能方面Tomcat都不如其餘專業的HTTP服務器,如IIS和Apache服務器。web

所以在實際應用中,經常把Tomcat 與其餘HTTP 服務器集成。對於不支持Servlet/JSP算法

的HTTP服務器,能夠經過Tomcat服務器來運行Servlet/JSP組件。sql

當Tomcat與其餘HTTP服務器集成時,Tomcat服務器的工做模式一般爲進程外的Servlet

容器,Tomcat 服務器與其餘HTTP 服務器之間經過專門的插件來通訊。

 

  1.         1)獨立的Servlet容器
            在這種模式下,Tomcat能夠做爲獨立的Java Web服務器,Servlet容器做爲構成Web服務器的一部分而存在。獨立的Servlet容器是Tomcat的默認模式
  2.         
  3.          2)進程內的Servlet容器
            Servlet容器分爲Web服務器插件和Java容器兩部分。Web服務器插件在其餘Web服務器內部地址空間打開一個Java虛擬機,Java容器在此JVM中運行Servlet。若有客戶端發出調用Servlet的請求,插件得到對此請求的控制並將它傳遞給Java容器。進程內Servlet容器對於單進程、多進程的服務器很是適合,能夠提供較高的運行速度,單缺少伸縮性。  
  4.         
  5.         3)進程外的Servlet容器
            Servlet容器分爲Web服務器插件和java容器兩部分。Web服務器插件在其餘Web服務器的外部地址空間打開一個JVM。java容器在此JVM中運行Servlet。若有客戶端發出調用Servlet的請求,插件得到對此請求的控制並將它傳遞給java容器。進程外Servlet容器對客戶請求的響應速度不如進程內容器,但進程外容器具備更好的伸縮性和穩定性。

 

         Tomcat 既可做爲獨立的Servlet容器,也可和其餘的Web服務器集成,做爲進程內的Servlet容器或者進程外的Servlet容器。

 

         在說Tomcat和Jetty的區別:

          Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器(主要用於解析servlet/JSP,同時具有http服務),技術先進、性能穩定,並且免費,於是深受Java 愛好者的喜好並獲得了部分軟件開發商的承認。其運行時佔用的系統資源小,擴展性好,且支持負載平衡與郵件服務等開發應用系統經常使用的功能。做爲一個小型的輕量級應用服務器,Tomcat在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,成爲目前比較流行的Web 應用服務器。
  而Jetty採用業界最優的開源Java Web引擎, 將Java社區中下載量最大,用戶數最多,標準支持最完備的Tomcat內核做爲其Servlet容器引擎,並加以審覈和調優。單純的Tomcat性能有限,在不少地方表現有欠缺,如活動鏈接支持、靜態內容、大文件和HTTPS等。除了性能問題,Tomcat的另外一大缺點是它是一個受限的集成平臺,僅能運行Java應用程序。企業在使用時Tomcat,每每還需同時部署Apache Web Server以與之整合。此配置較爲繁瑣,且不能保證性能的優越性。
  Jetty經過使用APR和Tomcat本地技術的混合模型來解決Tomcat的諸多不足。混合技術模型從最新的操做系統技術裏提供了最好的線程和事件處理。結果,Jetty達到了可擴展性,性能參數匹配甚至超越了本地Apache HTTP服務器或者IIS。譬如Jetty可以提供數據庫鏈接池服務,不只支持 JSP 等 Java 技術,同時還支持其餘 Web 技術的集成,譬如 PHP、.NET 兩大陣營。
  標準化是減少技術依賴風險,保護投資最好的方式。Jerry率先支持全系列JEE Web標準,從根本上保證了應用「一次開發,處處運行」的特色,使應用成品能方便地在Jetty和其餘Java Web服務器之間輕易遷移。

       相同點:

       都是web容器,做用基本一致,都做爲jboss的集成的web容器(有tomcat版的jboss、也有jetty版的jboss,即4.0之後的版本)

       區別:

       實現機制稍有不一樣,Jetty性能更優

      

         Nginx / Apache / lighttpd 的區別:

 

 

1. lighttpd

 

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

Lighttpd使用fastcgi方式運行php,它會使用不多的PHP進程響應很大的併發量。

Fastcgi的優勢在於:

· 從穩定性上看, fastcgi是以獨立的進程池運行來cgi,單獨一個進程死掉,系統能夠很輕易的丟棄,而後從新分配新的進程來運行邏輯.

· 從安全性上看, fastcgi和宿主的server徹底獨立, fastcgi怎麼down也不會把server搞垮,

· 從性能上看, fastcgi把動態邏輯的處理從server中分離出來, 大負荷的IO處理仍是留給宿主server, 這樣宿主server能夠一心一意做IO,對於一個普通的動態網頁來講, 邏輯處理可能只有一小部分, 大量的圖片等靜態IO處理徹底不須要邏輯程序的參與(注1)

· 從擴展性上講, fastcgi是一箇中立的技術標準, 徹底能夠支持任何語言寫的處理程序(php,java,Python...)

 

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的主要發行版中.

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

14) 支持java servlets

 

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服務器,有如下幾項基本特性:

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

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

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

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

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

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

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

二.3種WEB服務器的比較:

server

Apache

Nginx

Lighttpd

Proxy代理

很是好

很是好

通常

Rewriter

很是好

通常

Fcgi

很差

很是好

熱部署

不支持

支持

不支持

系統壓力比較

很大

很小

比較小

穩定性

很是好

很差

安全性

通常

通常

技術支持

很是好

不多

通常

靜態文件處理

通常

很是好

Vhosts虛擬主機

支持

不支持

支持

反向代理

通常

很是好

通常

Session sticky

支持

不支持

不支持

注:在相對比較大的網站,節約下來的服務器成本無疑是客觀的。而有些小型網站每每服務器很少,若是採用 Apache 這類傳統 Web 服務器,彷佛也還能撐過去。但有其很明顯的弊端: Apache 在處理流量爆發的時候(好比爬蟲或者是 Digg 效應) 很容易過載,這樣的狀況下采用 Nginx 最爲合適。

建議方案:

Apache 後臺服務器(主要處理php及一些功能請求 如:中文url)

Nginx 前端服務器(利用它佔用系統資源少得優點來處理靜態頁面大量請求)

Lighttpd 圖片服務器

整體來講,隨着nginx功能得完善將使他成爲從此web server得主流。

三.性能測試:

將分別測試3種軟件在對動態頁面和靜態頁面請求及併發時的響應時間

l 靜態頁面 搜狐首頁

LIGHTTPD

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

64

60

462.75

21.6

100000/200

67

60

312.07

32.4

100000/500

83

60

137.24

72.8

100000/1000

出現錯誤丟包

94

60

126.6

78.9

NGINX

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

34.6

140

943.66

10.597

100000/200

35.6

110

924.32

10.818

100000/500

34.3

110

912.68

10.956

100000/1000

37

160

832.59

12.106

APACHE

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

40.6

170

690.72

14.47

100000/200

41.1

180

685.39

14.59

100000/500

42.3

190

633.64

15.78

100000/1000

43.1

200

547.53

18.26

l 動態頁面 內部社區首頁

LIGHTTPD

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

1000/100

50

200

33.54

29.816

1000/200

52

210

30.43

32.858

1000/500

54

230

25.79

38.76

1000/1000

62

250

24.83

40.28

NGINX

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

1000/100

53.8

250

83.12

12.305

1000/200

55.8

250

74.05

13.504

1000/500

56

260

58.99

16.951

1000/1000

58

260

43.41

23.347

APACHE

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

60

200

27.37

36.541

100000/200

61

220

23.82

41.981

100000/500

73

150

20.59

48.562

100000/1000

53

200

27.18

36.796

l PHPINFO函數頁

LIGHTTPD

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

45

20

168.06

59.504

100000/200

47

22

140.64

71.103

100000/500

49

24

52.80

189.386

100000/1000

在請求到4840時測試測試程序死掉

NGINX

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

70

120

143.46

69.706

100000/200

72

130

140.57

71.140

100000/500

73

150

135.87

73.601

100000/1000

77

160

132.18

75.657

APACHE 出現丟包

n/-c(ab參數)

cpu%

Mem

RequestsperSecond

Time taken for tests

100000/100

70

180

245.73

40.694

100000/200

72

190

245.79

40.684

100000/500

75

200

241.29

41.443

100000/1000

77

220

236.74

42.239

四.各大網站WEB服務器資源列表

網站名 操做系統 web服務器

1.門戶網站類:

搜狐 Linux apache 1.3.37

新浪 LINUX apache 2.0.54

迅雷 LINUX nginx 0.6.31

163 LINUX apache 2.2.6

2.搜索類

百度 unknown BWS 1.0

Google linux gws

Sougou FreeBSD apache 2.2.4

Hao123 linux apache 2.2.4

4. 電子郵箱類

126 linux apache

Hotmail win2003 microsoft-IIS 6.0

新浪郵箱 F5 Big-IP apache 2.2.8

263 linux apache 2.2.6

5. 博客類

新浪博客 linux nginx 0.5.35

搜狐博客 linux nginx

迅雷博客 linux nginx 0.6.32

天涯博客 F5 Big-IP Microsoft-IIS/5.0

6.視頻類

優酷 linux apache

土豆 linux apache

Ku6 linux apache

六間房 linux nginx 0.6.14

 

 

        上面說了那麼多,能夠看出,其實

Apache / Nginx / lighttpd 是一類,都是專用的WEB服務器,Tomcat / Jetty 是一類,是servlet/jsp應用服務器+WEB服務器 ,Jboss則是一個大框架,也是應用服務器 + WEB服務器,可是Tomcat 或則Jetty 都是它的一部分 。 

相關文章
相關標籤/搜索