天天看點

JBoss,Geronimo還是Tomcat?三種開源Java應用伺服器的比較

作者:Jonathan Campbell

譯者:李功健

http://www.matrix.org.cn/resource/article/2008-01-02/0bfeffb6-b8e3-11dc-ad9e-410871b898d3.html

http://www.javaworld.com/javaworld/jw-12-2007/jw-12-appservers.html

概述

像JBoss、 Tomcat和Apache Geronimo這樣的開源Java EE應用伺服器輕松地立足于同類商業産品之中,并且真正地在技術革新中處于市場領先地位。但是這些開源Java EE應用伺服器并不完全等同。在這篇文章中,我将從特性、部署和性能方面對JBoss 4.2,Geronimo 2和Tomcat 6三種伺服器進行了比較。

當涉及到企業級應用開發時,Java企業版(Java EE)應用伺服器被視為Web開發的标準。雖然有商業産品可供選擇,但研究表明開源已經成為企業IT基礎設施中熟悉的一部分。JBoss 4.2,Geronimo 2和Tomcat 6是3 種被廣泛使用的開源的Java EE伺服器。在它們之中,盡管JBoos和Tomcat都沒有和Java EE完全相容,但它們仍然保有主要的市場。與此同時,具有完全Java EE相容性的Geronimo正迅速呈現出強勁的勢頭。如果你想在Java EE的職業市場中取得競争優勢,你就應該熟悉上述3種開放源代碼的伺服器,并了解它們之間的不同。

在本文中,我會在特性、部署和性能方面比較這三種領先的開源Java應用伺服器。并且解釋為什麼在每種應用伺服器有多種多樣的不同特性,同時也提供一些對如哪種伺服器更适合你的企業架構的調查。我在這裡發表的讨論包括來自Red Hat的Chantal Yang和Apache軟體基金會的評論。

1. Java企業特性比較

表1提供了JBoss 4.2、Tomcat 6和Geronimo 2在實作Java EE功能特性方面的快速比較。請注意,特性被标記為部分表示沒有完全被伺服器支援,你需要安裝額外的軟體包。如果被标記為可選,則你必須安裝第三方軟體包才能使用。這三種伺服器都已經在Linux、Solaris、微軟Windows和Mac OS X上測試過,JBoss已經在HP-UX和AIX上的測試,而Tomcat也在AIX上也測試過。在下面的表格中,你可以找到更多關于它們各自特性的資訊以及為什麼這些特性如此重要。

表1. Java EE的特性比較

JBoss,Geronimo還是Tomcat?三種開源Java應用伺服器的比較

如果你的Java應用需求尤為廣泛或者你希望保持全部的Java EE 5相容性的話,那麼Geronimo 2将是明智的選擇。雖然JBoss 4.2沒有完全相容Sun的Java EE 5标準,但是JBoss 4.2小組負責了一些尖端技術,而這些技術将被所有的伺服器使用并且将被添加到标準的Java EE 5中。Tomcat 6本身是一個輕量級的解決方案,它不包含所有的Java EE 5 特性以及在JBoss和Geronimo中提供的額外軟體包,但它不需要太多的記憶體,甚至在小型伺服器上也能運作得很快。

現在,讓我們看看為什麼這些特性如此重要。

1.1. Java EE 5相容性

如果你的企業級Java應用必須完全相容Sun的Java EE 5伺服器特性的話,那麼Java EE相容性就是一個重要的問題。Geronimo是三種伺服器中唯一完全相容Java EE 5的。JBoss 4.2支援大部分的Java EE 5特性,而且Red Hat馬上就要公布的JBoss 5将對Java EE 5完全相容。Tomcat是一個JSP/Servlet容器,它隻支援基本的Java應用伺服器特性。

1.2. EJB 3(企業JavaBeans技術)能力

企業JavaBeans(EJB)是一個為Java EE伺服器應用開發服務的Java元件架構。它允許将功能封裝到可重用元件中。早期版本的EJB被認為是難以開發的,即使其意圖是給開發帶來好處。而新的 EJB 3就是為了解決較早版本中存在的困難,并且提供了一些新的功能。JBoss 4.2和Geronimo都支援EJB 3。Tomcat本身不提供EJB 3的相容性,但是你可以将Apache的OpenEJB項目可以嵌入到Tomcat中使其支援EJB 3。根據Apache基金會的Jeff Genender所述,Tomcat也可以在JBoss的嵌入式版本中運作。

1.3. JSP 2.1和Servlet 2.5能力

JSP/servlet特性是任何Java伺服器中最基本的能力。JSP 2.1和servlet 2.5是新版Java EE 5中提供的能力。JBoss 4.2、Geronimo 2和Tomcat 6都支援這些新的JSP/servlet版本。

1.4. JSF 1.2支援

JSF (Java Server Faces)是一個Java EE的應用開發架構,它使得開發基于Web的使用者界面更加容易。JSF不是一個需求驅動的MVC(模型視圖-控制器)的體系結構,而是使用了基于元件的方法。JBoss 4.2和Geronimo 2都支援最新的JSF 1.2版本。JSF 1.2也可以在Tomcat 6上運作,但是發現了一些問題。

1.5. 定制化插件支援

插件支援是一種可以将新功能或特性引入到伺服器中的架構。JBoss稱它的插件開發特性為MBeans(被管理的Beans)。Geronimo也有被稱為 GBeans的相似功能。這些定制的Beans提供了一套開發和管理定制資源的接口,而這些接口也可以作為插件元件被重用。

根據Jeff Genender所言,Geronimo使插件機制更進了一步:

使用Geronimo,你可以從許多元件中挑選一部分來建立符合需要的應用伺服器棧。例如,如果想安裝Liferay門戶、或者Apache目錄服務,你可以在管理控制台中添加URL并通過網絡安裝插件。插件管理系統可以檢索出所有必須的依賴并且安裝它們。

Geronimo也可以定制元件,Jeff總結如下:

它具有使應用程式如你所願的變成輕量級或者重量級的能力。你可以充分利用包括所有元件的Java EE 5棧,或者通過将Geronimo作為Web容器來使用少量的G,或者使用微型的G——它僅僅是Geronimo核心和一個完美的SOA和ESB解決方案的基礎。你可以添加和删除元件,來隻提供自己想用的那部分。如果不需要EJB的話,你可以簡單從控制台中删除元件。Red Hat的Chantal Yang表示:JBoss 4提供了“從微核心”組建應用伺服器的好處。就像Yang所說,這使得JBoss能夠以插件方式提供多種的元件來建立一個定制的應用伺服器。

Yang還表示,JBoss 5和它的微容器将極大地提高MBeas的插件支援能力,還沒有别的應用伺服器在其核心具有這樣一個改進的基于POJO的微容器。

1.6. 業務規則引擎支援

幾乎每一種應用都是建立在一系列業務規則上的,這也稱為業務邏輯。業務規則引擎可以使業務邏輯規劃更容易管理。在大多數的規劃中,基本邏輯就是必須的工作。業務規則引擎可以使你容易實作更加智能的邏輯。JBoss 4.2,Geronimo 2和Tomcat 6都支援Drools,它是一個流行的、标準相容并且強大的業務規則引擎。雖然Geronimo是一個完全Java EE 5認證的伺服器,并可以運作Drools,但是JBoss在編寫本文時已經提供了三年的Drools支援,這使得JBoss的Drools是一個更加強大的業務規則解決方案。JBoss公司最近已将Drools命名為JBoss Rules。此Drools項目本身開始于2001年。

1.7. Hibernate 3.x支援

Hibernate為Java 語言提供對象關系映射(ORM)服務。其易于使用的架構允許你将面向對象的模型映射到傳統的關系資料庫中,這對于Java開發是一個有力的促進。簡而言之,Hibernate管理持久化,讓你能夠将POJO存儲到幾乎任何類型的SQL資料庫中。并且在進行操作時,對你的程式來說那些對SQL資料的通路是透明的,這使得應用資料和對象管理更加容易。

Hibernate是一個開放源碼包,最初是由JBoss的Gavin King上司的小組所開發。現在運作在許多Java EE伺服器上,并且也能與J2SE一起工作。JBoss 4.2,Geronimo 2和Tomcat 6都支援Hibernate 3。

1.8. JBoss Seam支援

JBoss Seam是一個強大的應用架構,它整合了許多Java和Web技術,包括Ajax(asynchronous JavaScript and XML)、JSF、EJB 3、Java Protlets和BMP(business-process management)。

Seam是JBoss的一個項目,是以JBoss自然支援它,同樣Geronimo也支援。根據Seam的廠商所言,Seam應用可以運作在使用了JBoss可嵌入EJB 3容器的Tomcat上。

1.9. 叢集支援

叢集是一個技術術語,它是多個并行運作的伺服器,這些伺服器提供相同服務、以求獲得高可用性:因為通過伺服器叢集可以支援更多的客戶,如果叢集中的某個伺服器崩潰,其它的伺服器可以繼續為客戶提供服務。在Java EE伺服器案例中,即使在叢集中的一台伺服器崩潰,Java應用仍然可以使用。叢集為企業級Java應用提供了可擴充性、提高了性能,并消除了單點故障。

JBoss 4.2,Geronimo 2和Tomcat 6都以某種方式支援叢集。據Chantal Yang稱,JBoss使用“通過夥伴複制和細粒複制以高性能和高可靠的叢集層”。Geronimo最近釋出了一個針對糾正Geronimo 2叢集問題的更新檔,是以在這點看來,Geronimo可能還要做一些測試。如果你對Geronimo的叢集感興趣,可以咨詢Apache軟體基金會。

1.10. Eclipse IDE支援

Eclipse 可以說是Java開發中最受歡迎的IDE,是以将它同你的Java EE伺服器內建是培養良好開發的途徑。JBoss、Geronimo和Tomcat都支援Eclipse內建。JBoss公司有自己版本的 Eclipse,被稱作是Red Hat Developer Studio,在編寫本文時還處于測試階段。

2. 安裝與部署

根據測試,安裝以上三種Java伺服器都是非常容易的。除了将已下載下傳的zip或者tar包解壓,你所要做的就是設定JAVA_HOME環境變量指向Java 1.5的安裝目錄。在運作startup或者是shutdown腳本以啟動或停止這些伺服器之前,必須設定這個環境變量。注意在Linux/Unix系統中,可能還需要使用chmod指令賦予這些腳本可執行權限。

2.1. 部署

當談到通用配置和部署時,Geronimo 2是非常光彩奪目的。我發現通過它的Web控制台(見下面的圖1)來配置和部署Java應用是一件輕而易舉的事。正如Jeff Genender的解釋:

Geronimo 控制台包含許多不同的向導以幫助使得應用伺服器的配置盡可能簡單。Geronimo包含的向導讓你可以測試資料庫連接配接池,安全領域等。你可以通過一個易于使用的向導來取代過去編輯XML配置或停止和重新啟動伺服器的工作,資料庫連接配接池向導甚至可以為你從網絡上下載下傳大部分的驅動,以使你無需去找适合資料庫的驅動。

Geronimo控制台也可以配置大多數内嵌在Tomcat 6容器中的特性,甚至不必接觸到一個XML配置檔案。

JBoss 4.2也有一個外觀漂亮的管理控制台(見圖2),但它并不提供和類似于Geronimo的特性。它主要是提供JBoss狀況和監控資訊,但缺乏部署功能。要部署一個應用程式,你可以簡單的拷貝它到default/deploy目錄中,然後它會被自動迅速的部署。當然,你可以在jboss- service.xml配置檔案中指定自定義部署目錄。

Tomcat 6快速輕巧,正真形成一個輕量級的應用伺服器。通過提供一個漂亮的Web控制台,它提供你所需要的基礎功能(見圖3)。你可以從基于Web的Tomcat 管理器中啟動/停止和部署/解除安裝WAR應用。同時它還提供大部分有用的狀态和監控資訊。它也為Web控制台提供了一種良好的基礎認證制度:你隻需在 Tomcat伺服器目錄中的一個XML檔案中簡單的指定使用者/密碼。

3. 性能基準

随着可靠性的提高,性能或許是應用伺服器中最重要的一個特性。為了伺服器的基本測試,我使用JSP頁面和編譯好的Servlet做了簡單的測試,看看應用伺服器能處理多少使用者應用會話、連接配接使用者的速度有多快。真實世界中的Java應用非常廣泛,而我對JSP和Servlet的測試卻非常少量,因為我隻要求測試這些伺服器的基本可擴充性、可靠性和速度。

通過使用雙核64位CPU和4GB記憶體的伺服器,我獲得了三種伺服器在運作于多達120萬并發請求下的資料。這并不意味着同步連接配接,而是意味保持獨一無二的、并發的、通過浏覽器用戶端連接配接的使用者會話。如果我有更多的記憶體,我肯定可以獲得超過120萬的會話。

這裡,用于搜集這些基準資料的代碼隻有幾百行。為了獲得準确資料,我為每種伺服器都使用了同樣的配置。在真實世界的Java EE應用中,每一個會話都保持比這個測試更多的資料,是以你可能得不到我所得到的如此海量的數字,除非你在一台有八個處理器和足夠多的記憶體的伺服器上運作。

JBoss 4.2和Geronimo表現得非常不同,主要是因為Geronimo版本更加新、并且使用了最新的核心。Tomcat 6是最好的,這是因為它是一個專門為JSP/Servlet服務的輕量級的伺服器,而這些正是我測試的基準。Tomcat隻需要3秒的啟動時間,而 JBoss和Geronimo則需要大約20秒。

如果這些伺服器使用完所有的記憶體,它們都将瀕臨崩潰。在JBoss 4.2中我曾經有一次Java空指針異常就試圖關閉它的經曆,即使它還沒有使用完所有的記憶體。當用完所有記憶體時,Geronimo和Tomcat都似乎非常糟糕,此時關閉它們是非常困難的。

4. 結論

我在商業Java應用伺服器(如Sun的Java應用伺服器和BEA的WebLogic)和開源替代品中都已經安裝和部署了Java應用。在這篇文章中,根據我的經驗,與開源伺服器相比,商業應用伺服器有更多的Bug,并且它們更難安裝。部署也是一個問題,至少在Sun的Java應用伺服器的最新版是這樣。

底線:JBoss,Geronimo和Tomcat是可靠、快速的,而且一定能夠處理好在大型的企業級應用中的交易。此外,許多高需求的Java伺服器技術特性來源于開源世界中,而不是商業世界中。

在這篇文章中,我在特性、部署和性能方面比較了三種流行的開源JEE應用伺服器。這些特性的比較可以幫助你決定選擇最适合應用環境需求的開源應用伺服器,而性能基準測試能幫助你的考慮更加全面。

5. 作者自傳

Jonathan Campbell是一個項目主管,擁有至少15個IT認證。自20世紀80年代末以來,他一直在各種風格的UNIX系統上和自20世紀90年代以來在Windows系統上開發軟體。在網絡工程和UNIX,Linux和WIndows平台的內建方面也有專門的知識。目前,他正在為各種企業和美國政府工作。

6. 關于譯者

李功健,Matrix編輯。畢業于大連理工大學機械電子工程專業。熟悉Java和C++軟體開發,熟悉Windows、Redhat Linux作業系統 和SQL Server、Oracle等資料庫管理系統。也從事過一些實際項目的開發工作。目前正在攻讀研究所學生。