摘 要: 通過對影響EJB性能因素的分析,給出了對EJB應用程序調優的策略和方法,并詳細說明了采用會話外觀模式的EJB設計模式后對系統性能的影響。會話外觀模式簡化了Web容器和EJB容器之間的耦合,減少了在網絡邊界上的調用過程,同時實現了對安全權限和事務的集中管理。
關鍵詞: EJB;性能優化;會話外觀模式;耦合
?
目前,軟件設計大多采用多層體系架構,實現了應用層與用戶層分離,這種架構形式具有更強的通用性和兼容性,提高了系統的性能和功能。
??? 在多層體系架構的應用層中,由于傳統的COM+(Component Object Model)組件技術的移植性和通用性比較有限,一般都采用J2EE的關鍵技術——EJB組件技術,該技術已得到世界上大多數廠家的支持,使系統的升級、開發過程中有更大的選擇空間。
由于EJB組件技術作為J2EE系統技術的基礎,所以選擇不同的EJB組件模型和設計模式,在很大程度上可以影響EJB應用程序的整體性能,通常整體性能是被很小的一部分的代碼所決定。本文通過對影響EJB性能因素的分析,給出了EJB應用程序調優的策略和方法。并詳細說明了采用一種會話外觀模式的EJB設計模式后對系統性能的影響。
1 影響EJB性能的因素
影響EJB應用程序性能的因素包括以下幾點:
??? (1)網絡帶寬和網絡業務的數量:如果網絡帶寬偏低而網絡業務較高,則應用服務器上的最優化的EJB應用程序也變得低效。
??? (2)硬件和操作系統:硬件和操作環境直接影響應用服務器的可伸縮性和性能,從而影響EJB應用程序的性能。
??? (3)應用服務器(和它們的配置)專有特性、可伸縮性的性能:應用程序的運行也依賴于運行應用程序的應用服務器,應用服務器的品牌、配置和設置都會影響應用服務器的性能和伸縮性,從而影響EJB應用程序的性能和伸縮性。
??? (4)EJB應用程序部署商為特定的應用服務器優化應用程序的知識和經驗:如果部署商沒有為操作環境和應用程序服務器優化地設置、部署參數,那么即使是最優化的EJB應用程序也會拙劣的執行。
??? (5)EJB應用程序的設計和實現:一般情況下,Bean開發人員無法控制網絡帶寬、使用的硬件類型和應用服務器的品牌。但能夠做的是:盡力地優化EJB以實現提高性能;分析裝配參數的優化設置向裝配商和部署商提供盡可能多的信息。
2 EJB應用程序的設計決策
??? 所謂EJB設計決策主要是如何選擇3種Bean:實體Bean、會話Bean和消息驅動Bean;如何選擇BMP和CMP;如何選擇本地接口和遠程接口[1,2,9]。
??? 3種Bean的選擇:如果事務中要編譯和維護數據,就要選擇實體Bean,如果數據時間上是數據的瞬像,則可使用無狀態的會話Bean,并從實體Bean中取得信息,返回數值對象。會話Bean表示業務過程,可以維護所有的業務邏輯,包括數據驗證。消息驅動Bean主要用于異步通信的過程中。
??? 有狀態的會話Bean和無狀態的會話Bean的選擇:有狀態的會話Bean需要更多的服務器資源,它在方法調用之間維護數據。無狀態的會話Bean需要更多的網絡資源,每次調用遠程方法時,需要的所有相關數據都要以參數的形式傳入。
??? BMP和CMP的選擇:CMP可以減少代碼的編寫量,而且允許容器進行很多優化,用容器實現持久性處理邏輯,具有較強的移植性。而BMP中包含數據庫訪問代碼,可以更好地控制數據實現,但額外的代碼編寫量大,移植性差。
??? 遠程接口和本地接口的選擇:本地接口可以減少開銷量,允許本地組件進行本地通信,在調用方法和參數中按引用對象傳遞,本地接口的對象不需要支持RMI-IIOP協議,傳遞速度快。遠程接口的對象在調用中按數值傳遞,提供了一個遠程的、與位置無關的視圖必須實現RMI接口,造成較大的延遲。
3 調優EJB應用程序的策略
3.1 減少遠程調用
和EJB的分布式結構有關的主要性能的關注點就是它所需要的網絡通信量。當遠程客戶機對EJB進行調用時,需要借助RMI-IIOP協議,從而需要一定量的網絡開銷。其中包括客戶機與容器之間通過網絡傳遞數據的開銷。減少網絡開銷的方法有兩種:一種是將會話Bean作為實體Bean的前端,前端會話Bean通過對實體Bean的調用是本地方法調用,從而可以避免大量網絡通信的開銷。另外這樣可以將表示邏輯與業務邏輯分離,從而降低了EJB的復雜性。另一種是盡量使用本地接口,使用引用傳遞參數避免了調用和解調用的開銷,從而減少了不必要的網絡業務[3,7,10]。
3.2 使用適當的EJB設計模式[4,7,11]
??? 設計模式可以認為是藍圖或模板解決方案,這些解決方案可以容易地修改以解決在環境中重復發生的問題。設計模式的使用可以節省時間和精力。使用驗證過的設計模式解決特定類型的問題。模式由以下元素組成:
??? (1)模式名稱:簡潔地表達了模式的本質。
??? (2)背景:問題發生的環境。
??? (3)問題:對待解決問題的細節描述。
??? (4)用途:有關形成模式的動機和基本原理的列表。
??? (5)解決方案:描述解決問題的方式,用類圖和順序圖解釋它們的結構。
??? (6)參與者及其職責:模式中所有對象的列表。
??? EJB設計模式分為:數據訪問對象模式、值對象模式、值對象裝配器模式、值對象列表處理程序模式、服務定位器模式、會話外觀模式、業務對象代表模式等7種模式。
??? 可以根據不同的實際問題應用不同的模式。值對象模式通過減少對實體Bean的精細調用而降低潛在的網絡通信量,同時通過簡單地訪問Bean的字段值給客戶端提供實體Bean,特別應用到遠程客戶端訪問實體Bean的情況。
??? 會話外觀模式允許開發人員給客戶端和表示層通過會話Bean提供大致的EJB事務邏輯訪問。這種模式向客戶提供了一個統一的訪問層和接口,負責定位、創建執行業務對象中的業務邏輯。使用會話Bean來封裝和隱藏參與業務流程的業務對象之間交互的復雜性。
4 會話外觀模式
??? 采用Grinder測試工具測試開發的原型EJB,Grinder的默認行為是發布客戶的HTTP請求,然后模擬瀏覽器請求Web服務器,通過建立1個輕便的分配器Servlet,將Web服務器上的請求給EJB容器。這樣可以很好地模仿的現實中的情況,如圖1所示。
?
4.1 測試配置及測試腳本摘錄
??? 所有的測試在三臺機器上運行:一臺運行 Grinder及其線程,另一臺運行應用服務器,第三臺運行數據庫服務器。測試在1、5、10個用戶負載下運行,通過對基準響應時間和總的事務率的測試結果,表明使用會話外觀模式的優越性。
??? 在Grinder測試腳本中執行的請求是隨著測試案例而變化的,但本質上類似,因為每個請求都是調用調度器Servlet,分析基于響應時間和總的事務率的結果[5,6,8,10]。下面是基于會話外觀測試模式的測試腳本摘錄:
??? 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 測試說明
??? 定義容器管理的實體Bean-CourseEJB,本文將對在CourseEJB前是否加入會話外觀模式,說明會話外觀模式的優勢。因為Web組件對實體Bean進行多次遠程調用時開銷很大。會話外觀模式使用無狀態的會話Bean封裝了Web組件需要執行的實體Bean-CourseEJB的業務邏輯[2,4]。與圖2所示的不使用會話外觀模式Facadeoff序列圖相比,圖3所示會話外觀模式使Web容器和EJB容器之間的耦合大大簡化了,多個精細的遠程實體存取器的調用變為較粗的遠程調用。即所有實體方法的調用都封裝在1個單一的會話Bean方法中:
?
?
??? public collection forCourseDescriptionLocal(String searchCourseID)
??? 該方法的實現等同于在FacadeOff中的實體Bean方法調用序列。
??? 可以把會話模式理解為在更大的粒度上實現的業務流程,在應用中,底層的企業Bean雖可以實現多種功能模塊,但這些企業Bean的功能模塊單獨存在對于客戶是沒有意義的,客戶需要的是一次完整的“操作”過程,如果在這個工程中客戶對每一種方法都要依次調用,從網絡的負荷、系統安全性及事務的集中管理等角度上都是不合理的。因此可以將“操作”作為一個會話模式封裝具體的業務過程,客戶對象在需要業務功能時只需要調用一次遠程接口,極大減少了在網絡邊界上的調用過程,同時實現了對安全權限和事務的集中管理。
4.3 測試結果比較
??? (1)響應時間對比結果如圖4所示。
??? 對于1個用戶的負載,使用會話外觀模式中使響應時間減少了38%,而10個用戶的負載使響應時間減少了81%。
??? (2)總的事務率對比結果如圖5所示。
??? 這種影響是非常顯著的,對于1個用戶的吞吐量增加了158%,10個用戶的吞吐量增加了392%。
??? 本文通過對影響EJB性能因素的分析,給出了對EJB應用程序調優的策略和方法。并詳細說明了采用會話外觀模式的EJB設計模式后對系統性能的影響。會話外觀模式減少了在網絡邊界上的調用過程,同時實現了對安全權限和事務的集中管理,使Web容器和EJB容器之間的耦合大大簡化了。隨著應用負載的增加,從系統響應時間和總的事務率都凸現出會話外觀模式的優勢,在更大的粒度上實現了業務流程。
參考文獻
[1] 孫宏濱.基于J2EE三層結構分布系統的設計與實現[J].齊齊哈爾大學學報,2002,18(4):61.
[2] 陳華軍.J2EE構建企業級應用解決方案[M].北京:人民郵電出版社,2002.
[3] 班書昊.EJB企業應用與開發實例[M].北京:北京科海電子出版社,2003.
[4] 梁剛.面向企業信息系統的J2EE[J].黑龍江通信技術,2002(1):38.
[5] CAVANESS Chuck, Special edition using enterprise java beans[D].SUN公司核心技術叢書 2002:22-27.
[6] 袁國勇.EJB組件開發模型及實現技術[J].應用技術,2002(12):22-23.
[7] 高奇微.分布式中間層EJB的研究與開發[J].中國農業大學學報,2001,6(4):88.
[8] 馬廷淮.用EJB開發J2EE應用[J].計算機應用,2002,22(4):109-110.
[9] 彭宏慶.基于EJB的多層分布式系統模型的研究與應用[J].航空計算技術,2002,32(4):106.
[10] 高振東.基于J2EE系統的EJB技術研究與應用[J].航空計算技術,2003,33(1):71.
[11] 段江.使用EJB組件技術開發多層應用[J].計算機輔助工程,2003(4):29-30.