來源:http://blog.csdn.net/vanessa219/article/details/2975998
原文:http://www./javaworld/jw-12-2007/jw-12-appservers.html 目錄 1. Java企業(yè)特性比較 概述 像JBoss、 Tomcat和Apache Geronimo這樣的開源Java EE應(yīng)用服務(wù)器輕松地立足于同類商業(yè)產(chǎn)品之中,并且真正地在技術(shù)革新中處于市場(chǎng)領(lǐng)先地位。但是這些開源Java EE應(yīng)用服務(wù)器并不完全等同。在這篇文章中,我將從特性、部署和性能方面對(duì)JBoss 4.2,Geronimo 2和Tomcat 6三種服務(wù)器進(jìn)行了比較。 當(dāng)涉及到企業(yè)級(jí)應(yīng)用開發(fā)時(shí),Java企業(yè)版(Java EE)應(yīng)用服務(wù)器被視為Web開發(fā)的標(biāo)準(zhǔn)。雖然有商業(yè)產(chǎn)品可供選擇,但研究表明開源已經(jīng)成為企業(yè)IT基礎(chǔ)設(shè)施中 熟悉的一部分。JBoss 4.2,Geronimo 2和Tomcat 6是3 種被廣泛使用的開源的Java EE服務(wù)器。在它們之中,盡管JBoos和Tomcat都沒有和Java EE完全兼容,但它們?nèi)匀槐S兄饕氖袌?chǎng)。與此同時(shí),具有完全Java EE兼容性的Geronimo正迅速呈現(xiàn)出強(qiáng)勁的勢(shì)頭。如果你想在Java EE的職業(yè)市場(chǎng)中取得競(jìng)爭(zhēng)優(yōu)勢(shì),你就應(yīng)該熟悉上述3種開放源代碼的服務(wù)器,并了解它們之間的不同。 在本文中,我會(huì)在特性、部署和性能方面 比較這三種領(lǐng)先的開源Java應(yīng)用服務(wù)器。并且解釋為什么在每種應(yīng)用服務(wù)器有多種多樣的不同特性,同時(shí)也提供一些對(duì)如哪種服務(wù)器更適合你的企業(yè)架構(gòu)的調(diào) 查。我在這里發(fā)表的討論包括來自Red Hat的Chantal Yang和Apache軟件基金會(huì)的評(píng)論。 1. Java企業(yè)特性比較 表 1 提供了JBoss 4.2、Tomcat 6和Geronimo 2在實(shí)現(xiàn)Java EE功能特性方面的快速比較。請(qǐng)注意,特性被標(biāo)記為部分表示沒有完全被服務(wù)器支持,你需要安裝額外的軟件包。如果被標(biāo)記為可選,則你必須安裝第三方軟件包 才能使用。這三種服務(wù)器都已經(jīng)在Linux、Solaris、微軟Windows和Mac OS X上測(cè)試過,JBoss已經(jīng)在HP-UX和AIX上的測(cè)試,而Tomcat也在AIX上也測(cè)試過。在下面的表格中,你可以找到更多關(guān)于它們各自特性的信息 以及為什么這些特性如此重要。 表1. Java EE的特性比較 如 果你的Java應(yīng)用需求尤為廣泛或者你希望保持全部的Java EE 5兼容性的話,那么Geronimo 2將是明智的選擇。雖然JBoss 4.2沒有完全兼容Sun的Java EE 5標(biāo)準(zhǔn),但是JBoss 4.2小組負(fù)責(zé)了一些尖端技術(shù),而這些技術(shù)將被所有的服務(wù)器使用并且將被添加到標(biāo)準(zhǔn)的Java EE 5中。Tomcat 6本身是一個(gè)輕量級(jí)的解決方案,它不包含所有的Java EE 5 特性以及在JBoss和Geronimo中提供的額外軟件包,但它不需要太多的內(nèi)存,甚至在小型服務(wù)器上也能運(yùn)行得很快。 現(xiàn)在,讓我們看看為什么這些特性如此重要。 1.1. Java EE 5兼容性 如 果你的企業(yè)級(jí)Java應(yīng)用必須完全兼容Sun的Java EE 5服務(wù)器特性的話,那么Java EE兼容性就是一個(gè)重要的問題。Geronimo是三種服務(wù)器中唯一完全兼容Java EE 5的。JBoss 4.2支持大部分的Java EE 5特性,而且Red Hat馬上就要公布的JBoss 5將對(duì)Java EE 5完全兼容。Tomcat是一個(gè)JSP/Servlet容器,它只支持基本的Java應(yīng)用服務(wù)器特性。 1.2. EJB 3(企業(yè)JavaBeans技術(shù))能力 企 業(yè)JavaBeans(EJB)是一個(gè)為Java EE服務(wù)器應(yīng)用開發(fā)服務(wù)的Java組件架構(gòu)。它允許將功能封裝到可重用組件中。早期版本的EJB被認(rèn)為是難以開發(fā)的,即使其意圖是給開發(fā)帶來好處。而新的 EJB 3就是為了解決較早版本中存在的困難,并且提供了一些新的功能。JBoss 4.2和Geronimo都支持EJB 3。Tomcat本身不提供EJB 3的兼容性,但是你可以將Apache的OpenEJB項(xiàng)目可以嵌入到Tomcat中使其支持EJB 3。根據(jù)Apache基金會(huì)的Jeff Genender所述,Tomcat也可以在JBoss的嵌入式版本中運(yùn)行。 1.3. JSP 2.1和Servlet 2.5能力 JSP/servlet特性是任何Java服務(wù)器中最基本的能力。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)是一個(gè)Java EE的應(yīng)用開發(fā)架構(gòu),它使得開發(fā)基于Web的用戶界面更加容易。JSF不是一個(gè)需求驅(qū)動(dòng)的MVC(模型視圖-控制器)的體系結(jié)構(gòu),而是使用了基于組件的方 法。JBoss 4.2和Geronimo 2都支持最新的JSF 1.2版本。JSF 1.2也可以在Tomcat 6上運(yùn)行,但是發(fā)現(xiàn)了一些問題。 1.5. 定制化插件支持 插 件支持是一種可以將新功能或特性引入到服務(wù)器中的架構(gòu)。JBoss稱它的插件開發(fā)特性為MBeans(被管理的Beans)。Geronimo也有被稱為 GBeans的相似功能。這些定制的Beans提供了一套開發(fā)和管理定制資源的接口,而這些接口也可以作為插件組件被重用。 根據(jù)Jeff Genender所言,Geronimo使插件機(jī)制更進(jìn)了一步: 使用Geronimo,你可以從許多組件中挑選一部分來建立符合需要的應(yīng)用服務(wù)器棧。例如,如果想安裝Liferay門戶、或者Apache目錄服務(wù),你可以在管理控制臺(tái)中添加URL并通過網(wǎng)絡(luò)安裝插件。插件管理系統(tǒng)可以檢索出所有必須的依賴并且安裝它們。 Geronimo也可以定制組件,Jeff總結(jié)如下: 它 具有使應(yīng)用程序如你所愿的變成輕量級(jí)或者重量級(jí)的能力。你可以充分利用包括所有組件的Java EE 5棧,或者通過將Geronimo作為Web容器來使用少量的G,或者使用微型的G——它僅僅是Geronimo內(nèi)核和一個(gè)完美的SOA和ESB解決方案 的基礎(chǔ)。你可以添加和刪除組件,來只提供自己想用的那部分。如果不需要EJB的話,你可以簡(jiǎn)單從控制臺(tái)中刪除組件。Red Hat的Chantal Yang表示:JBoss 4提供了“從微內(nèi)核”組建應(yīng)用服務(wù)器的好處。就像Yang所說,這使得JBoss能夠以插件方式提供多種的組件來建立一個(gè)定制的應(yīng)用服務(wù)器。 Yang還表示,JBoss 5和它的微容器將極大地提高M(jìn)Beas的插件支持能力,還沒有別的應(yīng)用服務(wù)器在其核心具有這樣一個(gè)改進(jìn)的基于POJO的微容器。 1.6. 業(yè)務(wù)規(guī)則引擎支持 幾乎每一種應(yīng)用都是建立在一系列業(yè)務(wù)規(guī)則上的,這也稱為業(yè)務(wù)邏輯。業(yè)務(wù)規(guī)則引擎可以使業(yè)務(wù)邏輯規(guī)劃更容易管理。在大多數(shù)的規(guī)劃中,基本邏輯就是必須的工作。業(yè)務(wù)規(guī)則引擎可以使你容易實(shí)現(xiàn)更加智能的邏輯。JBoss 4.2,Geronimo 2和Tomcat 6都支持Drools, 它是一個(gè)流行的、標(biāo)準(zhǔn)兼容并且強(qiáng)大的業(yè)務(wù)規(guī)則引擎。雖然Geronimo是一個(gè)完全Java EE 5認(rèn)證的服務(wù)器,并可以運(yùn)行Drools,但是JBoss在編寫本文時(shí)已經(jīng)提供了三年的Drools支持,這使得JBoss的Drools是一個(gè)更加強(qiáng)大 的業(yè)務(wù)規(guī)則解決方案。JBoss公司最近已將Drools命名為JBoss Rules。此Drools項(xiàng)目本身開始于2001年。 1.7. Hibernate 3.x支持 Hibernate為Java 語言提供對(duì)象關(guān)系映射(ORM)服務(wù)。其易于使用的框架允許你將面向?qū)ο蟮哪P陀成涞絺鹘y(tǒng)的關(guān)系數(shù)據(jù)庫(kù)中,這對(duì)于Java開發(fā)是一個(gè)有力的促進(jìn)。簡(jiǎn)而言 之,Hibernate管理持久化,讓你能夠?qū)OJO存儲(chǔ)到幾乎任何類型的SQL數(shù)據(jù)庫(kù)中。并且在進(jìn)行操作時(shí),對(duì)你的程序來說那些對(duì)SQL數(shù)據(jù)的訪問是 透明的,這使得應(yīng)用數(shù)據(jù)和對(duì)象管理更加容易。 Hibernate是一個(gè)開放源碼包,最初是由JBoss的Gavin King領(lǐng)導(dǎo)的小組所開發(fā)?,F(xiàn)在運(yùn)行在許多Java EE服務(wù)器上,并且也能與J2SE一起工作。JBoss 4.2,Geronimo 2和Tomcat 6都支持Hibernate 3。 1.8. JBoss Seam支持 JBoss Seam是一個(gè)強(qiáng)大的應(yīng)用框架,它整合了許多Java和Web技術(shù),包括Ajax(asynchronous JavaScript and XML)、JSF、EJB 3、Java Protlets和BMP(business-process management)。 Seam是JBoss的一個(gè)項(xiàng)目,所以JBoss自然支持它,同樣Geronimo也支持。根據(jù)Seam的廠商所言,Seam應(yīng)用可以運(yùn)行在使用了JBoss可嵌入EJB 3容器的Tomcat上。 1.9. 集群支持 集群是 一個(gè)技術(shù)術(shù)語,它是多個(gè)并行運(yùn)行的服務(wù)器,這些服務(wù)器提供相同服務(wù)、以求獲得高可用性:因?yàn)橥ㄟ^服務(wù)器集群可以支持更多的客戶,如果集群中的某個(gè)服務(wù)器崩 潰,其它的服務(wù)器可以繼續(xù)為客戶提供服務(wù)。在Java EE服務(wù)器案例中,即使在集群中的一臺(tái)服務(wù)器崩潰,Java應(yīng)用仍然可以使用。集群為企業(yè)級(jí)Java應(yīng)用提供了可擴(kuò)展性、提高了性能,并消除了單點(diǎn)故障。 JBoss 4.2,Geronimo 2和Tomcat 6都以某種方式支持集群。據(jù)Chantal Yang稱,JBoss使用“通過伙伴復(fù)制和細(xì)粒復(fù)制以高性能和高可靠的集群層”。Geronimo最近發(fā)布了一個(gè)針對(duì)糾正Geronimo 2集群?jiǎn)栴}的補(bǔ)丁,所以在這點(diǎn)看來,Geronimo可能還要做一些測(cè)試。如果你對(duì)Geronimo的集群感興趣,可以咨詢Apache軟件基金會(huì)。 1.10. Eclipse IDE支持 Eclipse 可以說是Java開發(fā)中最受歡迎的IDE,所以將它同你的Java EE服務(wù)器集成是培養(yǎng)良好開發(fā)的途徑。JBoss、Geronimo和Tomcat都支持Eclipse集成。JBoss公司有自己版本的 Eclipse,被稱作是Red Hat Developer Studio,在編寫本文時(shí)還處于測(cè)試階段。 2. 安裝與部署 根 據(jù)測(cè)試,安裝以上三種Java服務(wù)器都是非常容易的。除了將已下載的zip或者tar包解壓,你所要做的就是設(shè)置JAVA_HOME環(huán)境變量指向Java 1.5的安裝目錄。在運(yùn)行startup或者是shutdown腳本以啟動(dòng)或停止這些服務(wù)器之前,必須設(shè)置這個(gè)環(huán)境變量。注意在Linux/Unix系統(tǒng) 中,可能還需要使用chmod命令賦予這些腳本可執(zhí)行權(quán)限。 2.1. 部署 當(dāng)談到通用配置和部署時(shí),Geronimo 2是非常光彩奪目的。我發(fā)現(xiàn)通過它的Web控制臺(tái)(見下面的圖1)來配置和部署Java應(yīng)用是一件輕而易舉的事。正如Jeff Genender的解釋: Geronimo 控制臺(tái)包含許多不同的向?qū)б詭椭沟脩?yīng)用服務(wù)器的配置盡可能簡(jiǎn)單。Geronimo包含的向?qū)ё屇憧梢詼y(cè)試數(shù)據(jù)庫(kù)連接池,安全領(lǐng)域等。你可以通過一個(gè)易于 使用的向?qū)砣〈^去編輯XML配置或停止和重新啟動(dòng)服務(wù)器的工作,數(shù)據(jù)庫(kù)連接池向?qū)踔量梢詾槟銖木W(wǎng)絡(luò)上下載大部分的驅(qū)動(dòng),以使你無需去找適合數(shù)據(jù)庫(kù)的 驅(qū)動(dòng)。 Geronimo控制臺(tái)也可以配置大多數(shù)內(nèi)嵌在Tomcat 6容器中的特性,甚至不必接觸到一個(gè)XML配置文件。 圖 1. Geronimo Web 控制臺(tái)(點(diǎn)擊可放大圖像) JBoss 4.2也有一個(gè)外觀漂亮的管理控制臺(tái)(見圖2),但它并不提供和類似于Geronimo的特性。它主要是提供JBoss狀況和監(jiān)控信息,但缺乏部署功能。 要部署一個(gè)應(yīng)用程序,你可以簡(jiǎn)單的拷貝它到default/deploy目錄中,然后它會(huì)被自動(dòng)迅速的部署。當(dāng)然,你可以在jboss- service.xml配置文件中指定自定義部署目錄。 圖 2. JBoss Web控制臺(tái)(點(diǎn)擊可放大圖像) Tomcat 6快速輕巧,正真形成一個(gè)輕量級(jí)的應(yīng)用服務(wù)器。通過提供一個(gè)漂亮的Web控制臺(tái),它提供你所需要的基礎(chǔ)功能(見圖3)。你可以從基于Web的Tomcat 管理器中啟動(dòng)/停止和部署/卸載WAR應(yīng)用。同時(shí)它還提供大部分有用的狀態(tài)和監(jiān)控信息。它也為Web控制臺(tái)提供了一種良好的基礎(chǔ)認(rèn)證制度:你只需在 Tomcat服務(wù)器目錄中的一個(gè)XML文件中簡(jiǎn)單的指定用戶/密碼。 圖 3. Tomcat Web控制臺(tái)(點(diǎn)擊可放大圖像) 3. 性能基準(zhǔn) 隨 著可靠性的提高,性能或許是應(yīng)用服務(wù)器中最重要的一個(gè)特性。為了服務(wù)器的基本測(cè)試,我使用JSP頁(yè)面和編譯好的Servlet做了簡(jiǎn)單的測(cè)試,看看應(yīng)用服 務(wù)器能處理多少用戶應(yīng)用會(huì)話、連接用戶的速度有多快。真實(shí)世界中的Java應(yīng)用非常廣泛,而我對(duì)JSP和Servlet的測(cè)試卻非常少量,因?yàn)槲抑灰鬁y(cè) 試這些服務(wù)器的基本可擴(kuò)展性、可靠性和速度。 通過使用雙核64位CPU和4GB內(nèi)存的服務(wù)器,我獲得了三種服務(wù)器在運(yùn)行于多達(dá)120萬并發(fā)請(qǐng)求下的數(shù)據(jù)。這并不意味著同步連接,而是意味保持獨(dú)一無二的、并發(fā)的、通過瀏覽器客戶端連接的用戶會(huì)話。如果我有更多的內(nèi)存,我肯定可以獲得超過120萬的會(huì)話。 圖4和圖5顯示了基準(zhǔn)測(cè)試結(jié)果。 圖 4. 啟動(dòng)大量的JSP會(huì)話 圖 5. 一個(gè)檢查會(huì)話的Servlet的大量命中 這 里,用于搜集這些基準(zhǔn)數(shù)據(jù)的代碼只有幾百行。為了獲得準(zhǔn)確數(shù)據(jù),我為每種服務(wù)器都使用了同樣的配置。在真實(shí)世界的Java EE應(yīng)用中,每一個(gè)會(huì)話都保持比這個(gè)測(cè)試更多的數(shù)據(jù),因此你可能得不到我所得到的如此海量的數(shù)字,除非你在一臺(tái)有八個(gè)處理器和足夠多的內(nèi)存的服務(wù)器上運(yùn) 行。 JBoss 4.2和Geronimo表現(xiàn)得非常不同,主要是因?yàn)镚eronimo版本更加新、并且使用了最新的內(nèi)核。Tomcat 6是最好的,這是因?yàn)樗且粋€(gè)專門為JSP/Servlet服務(wù)的輕量級(jí)的服務(wù)器,而這些正是我測(cè)試的基準(zhǔn)。Tomcat只需要3秒的啟動(dòng)時(shí)間,而 JBoss和Geronimo則需要大約20秒。 如果這些服務(wù)器使用完所有的內(nèi)存,它們都將瀕臨崩潰。在JBoss 4.2中我曾經(jīng)有一次Java空指針異常就試圖關(guān)閉它的經(jīng)歷,即使它還沒有使用完所有的內(nèi)存。當(dāng)用完所有內(nèi)存時(shí),Geronimo和Tomcat都似乎非常糟糕,此時(shí)關(guān)閉它們是非常困難的。 4. 結(jié)論 我 在商業(yè)Java應(yīng)用服務(wù)器(如Sun的Java應(yīng)用服務(wù)器和BEA的WebLogic)和開源替代品中都已經(jīng)安裝和部署了Java應(yīng)用。在這篇文章中,根 據(jù)我的經(jīng)驗(yàn),與開源服務(wù)器相比,商業(yè)應(yīng)用服務(wù)器有更多的Bug,并且它們更難安裝。部署也是一個(gè)問題,至少在Sun的Java應(yīng)用服務(wù)器的最新版是這樣。 底線:JBoss,Geronimo和Tomcat是可靠、快速的,而且一定能夠處理好在大型的企業(yè)級(jí)應(yīng)用中的交易。此外,許多高需求的Java服務(wù)器技術(shù)特性來源于開源世界中,而不是商業(yè)世界中。 在這篇文章中,我在特性、部署和性能方面比較了三種流行的開源JEE應(yīng)用服務(wù)器。這些特性的比較可以幫助你決定選擇最適合應(yīng)用環(huán)境需求的開源應(yīng)用服務(wù)器,而性能基準(zhǔn)測(cè)試能幫助你的考慮更加全面。 5. 作者自傳 Jonathan Campbell是 一個(gè)項(xiàng)目主管,擁有至少15個(gè)IT認(rèn)證。自20世紀(jì)80年代末以來,他一直在各種風(fēng)格的UNIX系統(tǒng)上和自20世紀(jì)90年代以來在Windows系統(tǒng)上開 發(fā)軟件。在網(wǎng)絡(luò)工程和UNIX,Linux和WIndows平臺(tái)的集成方面也有專門的知識(shí)。目前,他正在為各種企業(yè)和美國(guó)政府工作。 6. 關(guān)于譯者 李功健,Matrix編輯。畢業(yè)于大連理工大學(xué)機(jī)械電子工程專業(yè)。熟悉Java和C++軟件開發(fā),熟悉Windows、Redhat Linux操作系統(tǒng) 和SQL Server、Oracle等數(shù)據(jù)庫(kù)管理系統(tǒng)。也從事過一些實(shí)際項(xiàng)目的開發(fā)工作。目前正在攻讀研究生。 |
|