Apache/Tomcat/JBOSS/Nginx區別(轉),
先說Apache和Tomcat的區別:
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(Exceptionex) { System.out.println("fffff"); }
解析二:
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:側重於HTTPServer
Tomcat:側重於Servlet引擎,如果以Standalone方式運行,功能上與Apache等效,支援JSP,但對靜態網頁不太理想;
Apache是Web伺服器,Tomcat是應用(Java)伺服器,它只是一個Servlet(JSP也翻譯成Servlet)容器,可以認為是Apache的擴充,但是可以獨立於Apache運行。
PS:至於為什麼要整合Tomcat和Apache,原因是
Tomcat的最主要的功能是提供Servlet/JSP容器,儘管它也可以作為獨立的Java Web 服
務器,但在對靜態資源(如HTML 檔案或影像檔)的處理速度,以及提供的Web 伺服器
管理功能方面Tomcat都不如其他專業的HTTP伺服器,如IIS和Apache伺服器。
因此在實際應用中,常常把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伺服器的外部地址空間開啟一個JVM。java容器在此JVM中運行Servlet。如有用戶端發出調用Servlet的請求,外掛程式獲得對此請求的控制並將它傳遞給java容器。進程外Servlet容器對客戶請求的響應速度不如進程內容器,但進程外容器具有更好的伸縮性和穩定性。
Tomcat既可作為獨立的Servlet容器,也可和其他的Web伺服器整合,作為進程內的Servlet容器或者進程外的Servlet容器。在說Tomcat和Jetty的區別:
Tomcat 伺服器是一個免費的開放原始碼的Web 應用伺服器(主要用於解析servlet/JSP,同時具備http服務),技術先進、效能穩定,而且免費,因而深受Java 愛好者的喜愛並得到了部分軟體開發商的認可。其運行時佔用的系統資源小,擴充性好,且支援Server Load Balancer與郵件服務等開發應用系統常用的功能。作為一個小型的輕量級應用伺服器,Tomcat在中小型系統和並發訪問使用者不是很多的場合下被普遍使用,成為目前比較流行的Web 應用伺服器。
而Jetty採用業界最優的開源Java Web引擎,將Java社區中下載量最大,使用者數最多,標準支援最完備的Tomcat核心作為其Servlet容器引擎,並加以審核和調優。單純的Tomcat效能有限,在很多地方表現有欠缺,如活動串連支援、靜態內容、大檔案和HTTPS等。除了效能問題,Tomcat的另一大缺點是它是一個受限的整合平台,僅能運行Java應用程式。企業在使用時Tomcat,往往還需同時部署Apache WebServer以與之整合。此配置較為繁瑣,且不能保證效能的優越性。
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, 輸出壓縮(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.
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) 整合的Proxy 伺服器
9) 可以通過web瀏覽器監視伺服器的狀態, 可以自訂日誌.
10) 支援伺服器端包含命令(ssi).
11) 支援安全socket層(ssl).
12) 具有使用者會話過程的跟蹤能力.
13) 支援fastcgi
14) 支援java servlets
3.nginx
Nginx是俄羅斯人編寫的十分輕量級的HTTP伺服器,Nginx,它的發音為“engine X”,是一個高效能的HTTP和反向 Proxy伺服器,同時也是一個IMAP/POP3/SMTP Proxy 伺服器.Nginx是由俄羅斯人 Igor Sysoev為俄羅斯訪問量第二的Rambler.ru網站開發.
Nginx以事件驅動的方式編寫,所以有非常好的效能,同時也是一個非常高效的反向 Proxy、Server Load Balancer。其擁有匹配Lighttpd的效能,同時還沒有Lighttpd的記憶體流失問題,而且Lighttpd的mod_proxy也有一些問題並且很久沒有更新。但是Nginx並不支援cgi方式運行,原因是可以減少因此帶來的一些程式上的漏洞。所以必須使用FastCGI方式來執行PHP程式。
nginx做為HTTP伺服器,有以下幾項基本特性:
處理靜態檔案,索引檔案以及自動索引;開啟檔案描述符緩衝.
無緩衝的反向 Proxy加速,簡單的負載平衡和容錯.
FastCGI,簡單的負載平衡和容錯.
模組化的結構。包括gzipping, byteranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它Proxy 伺服器處理單頁中存在的多個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虛擬機器主機 |
支援 |
不支援 |
支援 |
反向 Proxy |
一般 |
非常好 |
一般 |
Session sticky |
支援 |
不支援 |
不支援 |
註:在相對比較大的網站,節約下來的伺服器成本無疑是客觀的。而有些小型網站往往伺服器不多,如果採用Apache 這類傳統 Web 伺服器,似乎也還能撐過去。但有其很明顯的弊端: Apache 在處理流量爆發的時候(比如爬蟲或者是 Digg 效應) 很容易過載,這樣的情況下採用 Nginx 最為合適。
建議方案:
Apache 後台伺服器(主要處理php及一些功能請求如:中文url)
Nginx 前端伺服器(利用它佔用系統資源少得優勢來處理靜態頁面大量請求)
Lighttpd 圖片伺服器
總體來說,隨著nginx功能得完善將使他成為今後web server得主流。