1. 程式人生 > >Apache/Tomcat/JBOSS/Nginx區別

Apache/Tomcat/JBOSS/Nginx區別

先說ApacheTomcat的區別:

Apache是世界使用排名第一的Web伺服器軟體。它可以執行在幾乎所有廣泛使用的計算機平臺上,由於其跨平臺和安全性被廣泛使用,是最流行的Web伺服器端軟體之一。  在Apache基金會裡面ApacheServer永遠會被賦予最大的支援,畢竟大兒子最親嘛,而Apache的開源伺服器軟體Tomcat同樣值得關注,畢竟Tomcat是開源免費的產品,使用者會給予最大的支援。但是經常在用ApacheTomcat等這些伺服器時,你總感覺還是不清楚他們之間有什麼關係,在用Tomcat的時候總出現Apache,總感到迷惑,到底誰是主誰是次,因此特意在網上查詢了一些這方面的資料,總結了一下。

解析一:Apache支援靜態頁,Tomcat支援動態的,比如Servlet等,  一般使用Apache+Tomcat的話,Apache只是作為一個轉發,對JSP的處理是由Tomcat來處理的。Apche可以支援PHPcgiperl,但是要使用Java的話,你需要TomcatApache後臺支撐,將Java請求由Apache轉發給Tomcat處理。ApacheWeb伺服器,Tomcat是應用(Java)伺服器,它只是一個Servlet(JSP也翻譯成Servlet)容器,可以認為是Apache的擴充套件,但是可以獨立於Apache執行。

這兩個有以下幾點可以比較的:兩者都是Apache組織開發的

兩者都有HTTP服務的功能兩者都是免費的  不同點:Apache是專門用了提供HTTP服務的,以及相關配置的(例如虛擬主機、URL轉發等等)TomcatApache組織在符合Java EEJSPServlet標準下開發的一個JSP伺服器
Runtime r=Runtime.getRuntime(); Process p=null; try { p=r.exec("notepad"); } catch(Exceptionex) { System.out.println("fffff"); } 

解析二:Apache是一個Web伺服器環境程式,啟用他可以作為Web伺服器使用,不過只支援靜態網頁

(ASP,PHP,CGI,JSP)等動態網頁的就不行。  如果要在Apache環境下執行JSP的話就需要一個直譯器來執行JSP網頁,而這個JSP直譯器就是Tomcat,為什麼還要JDK呢?因為JSP需要連線資料庫的話就要jdk來提供連線資料庫的驅程,所以要執行JSPWeb伺服器平臺就需要Apache+Tomcat+JDK  整合的好處是:如果客戶端請求的是靜態頁面,則只需要Apache伺服器響應請求。如果客戶端請求動態頁面,則是Tomcat伺服器響應請求。因為JSP是伺服器端解釋程式碼的,這樣整合就可以減少Tomcat的服務開銷。C是一個結構化語言,如譚老爺子所說:它的重點在於演算法資料結構C程式的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制),而對於C++,首要考慮的是如何構造一個物件模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取物件的狀態資訊得到輸出或實現過程(事務)控制。解析三:Apache:側重於HTTPServer 
Tomcat:側重於Servlet引擎,如果以Standalone方式執行,功能上與Apache等效支援JSP,但對靜態網頁不太理想;ApacheWeb伺服器,Tomcat是應用(Java)伺服器,它只是一個Servlet(JSP也翻譯成Servlet)容器,可以認為是Apache的擴充套件,但是可以獨立於Apache執行。

PS:至於為什麼要整合TomcatApache,原因是

Tomcat的最主要的功能是提供Servlet/JSP容器,儘管它也可以作為獨立的Java Web 

務器,但在對靜態資源(如HTML 檔案或影象檔案)的處理速度,以及提供的Web 伺服器

管理功能方面Tomcat都不如其他專業的HTTP伺服器,如IISApache伺服器。

因此在實際應用中,常常把Tomcat 與其他HTTP 伺服器整合。對於不支援Servlet/JSP

HTTP伺服器,可以通過Tomcat伺服器來執行Servlet/JSP元件。

Tomcat與其他HTTP伺服器整合時,Tomcat伺服器的工作模式通常為程序外的Servlet

容器,Tomcat 伺服器與其他HTTP 伺服器之間通過專門的外掛來通訊。

1.1)獨立的Servlet容器在這種模式下,Tomcat可以作為獨立的Java Web伺服器,Servlet容器作為構成Web伺服器的一部分而存在。獨立的Servlet容器是Tomcat的預設模式

23.2)程序內的Servlet容器

Servlet容器分為Web伺服器外掛和Java容器兩部分。Web伺服器外掛在其他Web伺服器內部地址空間開啟一個Java虛擬機器,Java容器在此JVM中執行Servlet。如有客戶端發出呼叫Servlet的請求,外掛獲得對此請求的控制並將它傳遞給Java容器。程序內Servlet容器對於單程序、多程序的伺服器非常適合,可以提供較高的執行速度,單缺乏伸縮性。

4.5.3)程序外的Servlet容器

Servlet容器分為Web伺服器外掛和java容器兩部分。Web伺服器外掛在其他Web伺服器的外部地址空間開啟一個JVMjava容器在此JVM中執行Servlet。如有客戶端發出呼叫Servlet的請求,外掛獲得對此請求的控制並將它傳遞給java容器。程序外Servlet容器對客戶請求的響應速度不如程序內容器,但程序外容器具有更好的伸縮性和穩定性。

Tomcat既可作為獨立的Servlet容器,也可和其他的Web伺服器整合,作為程序內的Servlet容器或者程序外的Servlet容器。在說TomcatJetty的區別:

Tomcat 伺服器是一個免費的開放原始碼的Web 應用伺服器(主要用於解析servlet/JSP,同時具備http服務),技術先進、效能穩定,而且免費,因而深受Java 愛好者的喜愛並得到了部分軟體開發商的認可。其執行時佔用的系統資源小,擴充套件性好,且支援負載平衡與郵件服務等開發應用系統常用的功能。作為一個小型的輕量級應用伺服器,Tomcat在中小型系統和併發訪問使用者不是很多的場合下被普遍使用,成為目前比較流行的Web 應用伺服器。  而Jetty採用業界最優的開源Java Web引擎,Java社群中下載量最大,使用者數最多,標準支援最完備的Tomcat核心作為其Servlet容器引擎,並加以稽核和調優。單純的Tomcat效能有限,在很多地方表現有欠缺,如活動連線支援、靜態內容、大檔案和HTTPS等。除了效能問題,Tomcat的另一大缺點是它是一個受限的整合平臺,僅能執行Java應用程式。企業在使用時Tomcat,往往還需同時部署Apache WebServer以與之整合。此配置較為繁瑣,且不能保證效能的優越性。Jetty通過使用APRTomcat本地技術的混合模型來解決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, 輸出壓縮(outputcompress), 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.

19954最早的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的記憶體洩漏問題,而且Lighttpdmod_proxy也有一些問題並且很久沒有更新。但是Nginx並不支援cgi方式執行,原因是可以減少因此帶來的一些程式上的漏洞。所以必須使用FastCGI方式來執行PHP程式。

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

處理靜態檔案,索引檔案以及自動索引;開啟檔案描述符緩衝.

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

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

模組化的結構。包括gzipping, byteranges, chunked responses,以及 SSI-filterfilter。如果由FastCGI或其它代理伺服器處理單頁中存在的多個SSI,則這項處理可以並行執行,而不需要相互等待。

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

Nginx