《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 基于會(huì)話外觀模式的EJB性能調(diào)優(yōu)

基于會(huì)話外觀模式的EJB性能調(diào)優(yōu)

2009-08-28
作者:梁惠平1,,呂述望2

  摘 要: 通過(guò)對(duì)影響EJB性能因素的分析,,給出了對(duì)EJB應(yīng)用程序調(diào)優(yōu)的策略和方法,,并詳細(xì)說(shuō)明了采用會(huì)話外觀模式的EJB設(shè)計(jì)模式后對(duì)系統(tǒng)性能的影響,。會(huì)話外觀模式簡(jiǎn)化了Web容器和EJB容器之間的耦合,,減少了在網(wǎng)絡(luò)邊界上的調(diào)用過(guò)程,,同時(shí)實(shí)現(xiàn)了對(duì)安全權(quán)限和事務(wù)的集中管理,。
  關(guān)鍵詞: EJB,;性能優(yōu)化,;會(huì)話外觀模式;耦合

?

  目前,,軟件設(shè)計(jì)大多采用多層體系架構(gòu),,實(shí)現(xiàn)了應(yīng)用層與用戶層分離,這種架構(gòu)形式具有更強(qiáng)的通用性和兼容性,提高了系統(tǒng)的性能和功能,。
??? 在多層體系架構(gòu)的應(yīng)用層中,,由于傳統(tǒng)的COM+(Component Object Model)組件技術(shù)的移植性和通用性比較有限,一般都采用J2EE的關(guān)鍵技術(shù)——EJB組件技術(shù),,該技術(shù)已得到世界上大多數(shù)廠家的支持,,使系統(tǒng)的升級(jí)、開發(fā)過(guò)程中有更大的選擇空間,。
  由于EJB組件技術(shù)作為J2EE系統(tǒng)技術(shù)的基礎(chǔ),,所以選擇不同的EJB組件模型和設(shè)計(jì)模式,在很大程度上可以影響EJB應(yīng)用程序的整體性能,,通常整體性能是被很小的一部分的代碼所決定,。本文通過(guò)對(duì)影響EJB性能因素的分析,給出了EJB應(yīng)用程序調(diào)優(yōu)的策略和方法,。并詳細(xì)說(shuō)明了采用一種會(huì)話外觀模式的EJB設(shè)計(jì)模式后對(duì)系統(tǒng)性能的影響,。
1 影響EJB性能的因素
  影響EJB應(yīng)用程序性能的因素包括以下幾點(diǎn):
??? (1)網(wǎng)絡(luò)帶寬和網(wǎng)絡(luò)業(yè)務(wù)的數(shù)量:如果網(wǎng)絡(luò)帶寬偏低而網(wǎng)絡(luò)業(yè)務(wù)較高,則應(yīng)用服務(wù)器上的最優(yōu)化的EJB應(yīng)用程序也變得低效,。
??? (2)硬件和操作系統(tǒng):硬件和操作環(huán)境直接影響應(yīng)用服務(wù)器的可伸縮性和性能,,從而影響EJB應(yīng)用程序的性能。
??? (3)應(yīng)用服務(wù)器(和它們的配置)專有特性,、可伸縮性的性能:應(yīng)用程序的運(yùn)行也依賴于運(yùn)行應(yīng)用程序的應(yīng)用服務(wù)器,,應(yīng)用服務(wù)器的品牌、配置和設(shè)置都會(huì)影響應(yīng)用服務(wù)器的性能和伸縮性,,從而影響EJB應(yīng)用程序的性能和伸縮性,。
??? (4)EJB應(yīng)用程序部署商為特定的應(yīng)用服務(wù)器優(yōu)化應(yīng)用程序的知識(shí)和經(jīng)驗(yàn):如果部署商沒(méi)有為操作環(huán)境和應(yīng)用程序服務(wù)器優(yōu)化地設(shè)置、部署參數(shù),,那么即使是最優(yōu)化的EJB應(yīng)用程序也會(huì)拙劣的執(zhí)行,。
??? (5)EJB應(yīng)用程序的設(shè)計(jì)和實(shí)現(xiàn):一般情況下,Bean開發(fā)人員無(wú)法控制網(wǎng)絡(luò)帶寬,、使用的硬件類型和應(yīng)用服務(wù)器的品牌,。但能夠做的是:盡力地優(yōu)化EJB以實(shí)現(xiàn)提高性能;分析裝配參數(shù)的優(yōu)化設(shè)置向裝配商和部署商提供盡可能多的信息,。
2 EJB應(yīng)用程序的設(shè)計(jì)決策
??? 所謂EJB設(shè)計(jì)決策主要是如何選擇3種Bean:實(shí)體Bean,、會(huì)話Bean和消息驅(qū)動(dòng)Bean;如何選擇BMP和CMP,;如何選擇本地接口和遠(yuǎn)程接口[1,,2,9],。
??? 3種Bean的選擇:如果事務(wù)中要編譯和維護(hù)數(shù)據(jù),,就要選擇實(shí)體Bean,,如果數(shù)據(jù)時(shí)間上是數(shù)據(jù)的瞬像,則可使用無(wú)狀態(tài)的會(huì)話Bean,,并從實(shí)體Bean中取得信息,,返回?cái)?shù)值對(duì)象。會(huì)話Bean表示業(yè)務(wù)過(guò)程,,可以維護(hù)所有的業(yè)務(wù)邏輯,包括數(shù)據(jù)驗(yàn)證,。消息驅(qū)動(dòng)Bean主要用于異步通信的過(guò)程中,。
??? 有狀態(tài)的會(huì)話Bean和無(wú)狀態(tài)的會(huì)話Bean的選擇:有狀態(tài)的會(huì)話Bean需要更多的服務(wù)器資源,它在方法調(diào)用之間維護(hù)數(shù)據(jù),。無(wú)狀態(tài)的會(huì)話Bean需要更多的網(wǎng)絡(luò)資源,,每次調(diào)用遠(yuǎn)程方法時(shí),需要的所有相關(guān)數(shù)據(jù)都要以參數(shù)的形式傳入,。
??? BMP和CMP的選擇:CMP可以減少代碼的編寫量,,而且允許容器進(jìn)行很多優(yōu)化,用容器實(shí)現(xiàn)持久性處理邏輯,,具有較強(qiáng)的移植性,。而BMP中包含數(shù)據(jù)庫(kù)訪問(wèn)代碼,可以更好地控制數(shù)據(jù)實(shí)現(xiàn),,但額外的代碼編寫量大,,移植性差。
??? 遠(yuǎn)程接口和本地接口的選擇:本地接口可以減少開銷量,,允許本地組件進(jìn)行本地通信,,在調(diào)用方法和參數(shù)中按引用對(duì)象傳遞,本地接口的對(duì)象不需要支持RMI-IIOP協(xié)議,,傳遞速度快,。遠(yuǎn)程接口的對(duì)象在調(diào)用中按數(shù)值傳遞,提供了一個(gè)遠(yuǎn)程的,、與位置無(wú)關(guān)的視圖必須實(shí)現(xiàn)RMI接口,,造成較大的延遲。
3 調(diào)優(yōu)EJB應(yīng)用程序的策略
3.1 減少遠(yuǎn)程調(diào)用

  和EJB的分布式結(jié)構(gòu)有關(guān)的主要性能的關(guān)注點(diǎn)就是它所需要的網(wǎng)絡(luò)通信量,。當(dāng)遠(yuǎn)程客戶機(jī)對(duì)EJB進(jìn)行調(diào)用時(shí),,需要借助RMI-IIOP協(xié)議,從而需要一定量的網(wǎng)絡(luò)開銷,。其中包括客戶機(jī)與容器之間通過(guò)網(wǎng)絡(luò)傳遞數(shù)據(jù)的開銷,。減少網(wǎng)絡(luò)開銷的方法有兩種:一種是將會(huì)話Bean作為實(shí)體Bean的前端,前端會(huì)話Bean通過(guò)對(duì)實(shí)體Bean的調(diào)用是本地方法調(diào)用,,從而可以避免大量網(wǎng)絡(luò)通信的開銷,。另外這樣可以將表示邏輯與業(yè)務(wù)邏輯分離,,從而降低了EJB的復(fù)雜性。另一種是盡量使用本地接口,,使用引用傳遞參數(shù)避免了調(diào)用和解調(diào)用的開銷,,從而減少了不必要的網(wǎng)絡(luò)業(yè)務(wù)[3,7,,10],。
3.2 使用適當(dāng)?shù)腅JB設(shè)計(jì)模式[4,7,,11]
??? 設(shè)計(jì)模式可以認(rèn)為是藍(lán)圖或模板解決方案,,這些解決方案可以容易地修改以解決在環(huán)境中重復(fù)發(fā)生的問(wèn)題。設(shè)計(jì)模式的使用可以節(jié)省時(shí)間和精力,。使用驗(yàn)證過(guò)的設(shè)計(jì)模式解決特定類型的問(wèn)題,。模式由以下元素組成:
??? (1)模式名稱:簡(jiǎn)潔地表達(dá)了模式的本質(zhì)。
??? (2)背景:?jiǎn)栴}發(fā)生的環(huán)境,。
??? (3)問(wèn)題:對(duì)待解決問(wèn)題的細(xì)節(jié)描述,。
??? (4)用途:有關(guān)形成模式的動(dòng)機(jī)和基本原理的列表。
??? (5)解決方案:描述解決問(wèn)題的方式,,用類圖和順序圖解釋它們的結(jié)構(gòu),。
??? (6)參與者及其職責(zé):模式中所有對(duì)象的列表。
??? EJB設(shè)計(jì)模式分為:數(shù)據(jù)訪問(wèn)對(duì)象模式,、值對(duì)象模式,、值對(duì)象裝配器模式、值對(duì)象列表處理程序模式,、服務(wù)定位器模式,、會(huì)話外觀模式、業(yè)務(wù)對(duì)象代表模式等7種模式,。
??? 可以根據(jù)不同的實(shí)際問(wèn)題應(yīng)用不同的模式,。值對(duì)象模式通過(guò)減少對(duì)實(shí)體Bean的精細(xì)調(diào)用而降低潛在的網(wǎng)絡(luò)通信量,同時(shí)通過(guò)簡(jiǎn)單地訪問(wèn)Bean的字段值給客戶端提供實(shí)體Bean,,特別應(yīng)用到遠(yuǎn)程客戶端訪問(wèn)實(shí)體Bean的情況,。
??? 會(huì)話外觀模式允許開發(fā)人員給客戶端和表示層通過(guò)會(huì)話Bean提供大致的EJB事務(wù)邏輯訪問(wèn)。這種模式向客戶提供了一個(gè)統(tǒng)一的訪問(wèn)層和接口,,負(fù)責(zé)定位,、創(chuàng)建執(zhí)行業(yè)務(wù)對(duì)象中的業(yè)務(wù)邏輯。使用會(huì)話Bean來(lái)封裝和隱藏參與業(yè)務(wù)流程的業(yè)務(wù)對(duì)象之間交互的復(fù)雜性,。
4 會(huì)話外觀模式
??? 采用Grinder測(cè)試工具測(cè)試開發(fā)的原型EJB,,Grinder的默認(rèn)行為是發(fā)布客戶的HTTP請(qǐng)求,然后模擬瀏覽器請(qǐng)求Web服務(wù)器,,通過(guò)建立1個(gè)輕便的分配器Servlet,,將Web服務(wù)器上的請(qǐng)求給EJB容器,。這樣可以很好地模仿的現(xiàn)實(shí)中的情況,如圖1所示,。

?


4.1 測(cè)試配置及測(cè)試腳本摘錄
??? 所有的測(cè)試在三臺(tái)機(jī)器上運(yùn)行:一臺(tái)運(yùn)行 Grinder及其線程,,另一臺(tái)運(yùn)行應(yīng)用服務(wù)器,第三臺(tái)運(yùn)行數(shù)據(jù)庫(kù)服務(wù)器,。測(cè)試在1,、5、10個(gè)用戶負(fù)載下運(yùn)行,,通過(guò)對(duì)基準(zhǔn)響應(yīng)時(shí)間和總的事務(wù)率的測(cè)試結(jié)果,,表明使用會(huì)話外觀模式的優(yōu)越性。
??? 在Grinder測(cè)試腳本中執(zhí)行的請(qǐng)求是隨著測(cè)試案例而變化的,,但本質(zhì)上類似,,因?yàn)槊總€(gè)請(qǐng)求都是調(diào)用調(diào)度器Servlet,,分析基于響應(yīng)時(shí)間和總的事務(wù)率的結(jié)果[5,,6,8,,10],。下面是基于會(huì)話外觀測(cè)試模式的測(cè)試腳本摘錄:
??? grinder.jvm.talk=base
??? #start/stop from Grinder Cart
??? grinder.receiveCartSignals=true
??? grinder.grinderAddress=192.168.0.1
??? grinder.grinderport=789
??? ...
??? grinder.test1.parameter.url=http://sun2:5026/course/Dispatcher
??? grinder.test1.parameter.header.Content=application/x-www-form-urlencoded
??? grinder.test.description=find a course title with “6a”
??? grinder.test.paramter.post=find-6a.dat
??? ...
4.2 測(cè)試說(shuō)明
??? 定義容器管理的實(shí)體Bean-CourseEJB,本文將對(duì)在CourseEJB前是否加入會(huì)話外觀模式,,說(shuō)明會(huì)話外觀模式的優(yōu)勢(shì),。因?yàn)閃eb組件對(duì)實(shí)體Bean進(jìn)行多次遠(yuǎn)程調(diào)用時(shí)開銷很大。會(huì)話外觀模式使用無(wú)狀態(tài)的會(huì)話Bean封裝了Web組件需要執(zhí)行的實(shí)體Bean-CourseEJB的業(yè)務(wù)邏輯[2,,4],。與圖2所示的不使用會(huì)話外觀模式Facadeoff序列圖相比,圖3所示會(huì)話外觀模式使Web容器和EJB容器之間的耦合大大簡(jiǎn)化了,,多個(gè)精細(xì)的遠(yuǎn)程實(shí)體存取器的調(diào)用變?yōu)檩^粗的遠(yuǎn)程調(diào)用,。即所有實(shí)體方法的調(diào)用都封裝在1個(gè)單一的會(huì)話Bean方法中:

?

?


??? public collection forCourseDescriptionLocal(String searchCourseID)
??? 該方法的實(shí)現(xiàn)等同于在FacadeOff中的實(shí)體Bean方法調(diào)用序列。
??? 可以把會(huì)話模式理解為在更大的粒度上實(shí)現(xiàn)的業(yè)務(wù)流程,,在應(yīng)用中,,底層的企業(yè)Bean雖可以實(shí)現(xiàn)多種功能模塊,但這些企業(yè)Bean的功能模塊單獨(dú)存在對(duì)于客戶是沒(méi)有意義的,,客戶需要的是一次完整的“操作”過(guò)程,,如果在這個(gè)工程中客戶對(duì)每一種方法都要依次調(diào)用,從網(wǎng)絡(luò)的負(fù)荷,、系統(tǒng)安全性及事務(wù)的集中管理等角度上都是不合理的,。因此可以將“操作”作為一個(gè)會(huì)話模式封裝具體的業(yè)務(wù)過(guò)程,客戶對(duì)象在需要業(yè)務(wù)功能時(shí)只需要調(diào)用一次遠(yuǎn)程接口,,極大減少了在網(wǎng)絡(luò)邊界上的調(diào)用過(guò)程,,同時(shí)實(shí)現(xiàn)了對(duì)安全權(quán)限和事務(wù)的集中管理,。
4.3 測(cè)試結(jié)果比較
??? (1)響應(yīng)時(shí)間對(duì)比結(jié)果如圖4所示。


??? 對(duì)于1個(gè)用戶的負(fù)載,,使用會(huì)話外觀模式中使響應(yīng)時(shí)間減少了38%,,而10個(gè)用戶的負(fù)載使響應(yīng)時(shí)間減少了81%。
??? (2)總的事務(wù)率對(duì)比結(jié)果如圖5所示,。


??? 這種影響是非常顯著的,,對(duì)于1個(gè)用戶的吞吐量增加了158%,10個(gè)用戶的吞吐量增加了392%,。
??? 本文通過(guò)對(duì)影響EJB性能因素的分析,,給出了對(duì)EJB應(yīng)用程序調(diào)優(yōu)的策略和方法。并詳細(xì)說(shuō)明了采用會(huì)話外觀模式的EJB設(shè)計(jì)模式后對(duì)系統(tǒng)性能的影響,。會(huì)話外觀模式減少了在網(wǎng)絡(luò)邊界上的調(diào)用過(guò)程,,同時(shí)實(shí)現(xiàn)了對(duì)安全權(quán)限和事務(wù)的集中管理,使Web容器和EJB容器之間的耦合大大簡(jiǎn)化了,。隨著應(yīng)用負(fù)載的增加,,從系統(tǒng)響應(yīng)時(shí)間和總的事務(wù)率都凸現(xiàn)出會(huì)話外觀模式的優(yōu)勢(shì),在更大的粒度上實(shí)現(xiàn)了業(yè)務(wù)流程,。


參考文獻(xiàn)
[1] 孫宏濱.基于J2EE三層結(jié)構(gòu)分布系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].齊齊哈爾大學(xué)學(xué)報(bào),,2002,18(4):61.
[2] 陳華軍.J2EE構(gòu)建企業(yè)級(jí)應(yīng)用解決方案[M].北京:人民郵電出版社,,2002.
[3] 班書昊.EJB企業(yè)應(yīng)用與開發(fā)實(shí)例[M].北京:北京科海電子出版社,,2003.
[4] 梁剛.面向企業(yè)信息系統(tǒng)的J2EE[J].黑龍江通信技術(shù),2002(1):38.
[5] CAVANESS Chuck,, Special edition using enterprise java beans[D].SUN公司核心技術(shù)叢書 2002:22-27.
[6] 袁國(guó)勇.EJB組件開發(fā)模型及實(shí)現(xiàn)技術(shù)[J].應(yīng)用技術(shù),,2002(12):22-23.
[7] 高奇微.分布式中間層EJB的研究與開發(fā)[J].中國(guó)農(nóng)業(yè)大學(xué)學(xué)報(bào),2001,,6(4):88.
[8] 馬廷淮.用EJB開發(fā)J2EE應(yīng)用[J].計(jì)算機(jī)應(yīng)用,,2002,22(4):109-110.
[9] 彭宏慶.基于EJB的多層分布式系統(tǒng)模型的研究與應(yīng)用[J].航空計(jì)算技術(shù),,2002,,32(4):106.
[10] 高振東.基于J2EE系統(tǒng)的EJB技術(shù)研究與應(yīng)用[J].航空計(jì)算技術(shù),2003,,33(1):71.
[11] 段江.使用EJB組件技術(shù)開發(fā)多層應(yīng)用[J].計(jì)算機(jī)輔助工程,,2003(4):29-30.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]