《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 业界动态 > 基于JMX实现中间件的构件化设计

基于JMX实现中间件的构件化设计

2008-12-22
作者:张丽娜 战守义 闫波
1. 引言
??? 隨著計算機技術(shù)迅速發(fā)展,應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序的規(guī)模不斷擴大,特別是Internet的出現(xiàn),許多應(yīng)用程序需在網(wǎng)絡(luò)環(huán)境的異構(gòu)" title="異構(gòu)">異構(gòu)平臺上運行。在這些硬件平臺上又存在各種各樣的系統(tǒng)軟件,這些硬件系統(tǒng)平臺" title="系統(tǒng)平臺">系統(tǒng)平臺還可能采用不同的網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)體系結(jié)構(gòu)連接。如何把這些系統(tǒng)集成起來并開發(fā)新的應(yīng)用是一個非常現(xiàn)實而困難的問題。如此復(fù)雜的分布環(huán)境、靈活的應(yīng)用模式、廣泛的包容性等,傳統(tǒng)的軟件設(shè)計思想已遠遠不夠。在這一背景下,中間件技術(shù)應(yīng)運而生
2.?中間件簡介
??? 中間件作為存在于系統(tǒng)軟件與應(yīng)用之間的特殊層次,抽象了典型的應(yīng)用模式,從而使應(yīng)用軟件制造者可以更多地將思路放在業(yè)務(wù)邏輯中,并基于標準的形式進行開發(fā)。一些工業(yè)標準的推出,進一步使中間件成為可復(fù)用" title="復(fù)用">復(fù)用構(gòu)件的運行框架,加速了軟件復(fù)用的進程。中間件系統(tǒng)的工作架構(gòu)如圖1所示。

圖1? 中間件系統(tǒng)的工作架構(gòu)


??? 針對不同的操作系統(tǒng)和硬件平臺,中間件可以有符合接口和協(xié)議規(guī)范的多種實現(xiàn)。從而使應(yīng)用系統(tǒng)開發(fā)人員可以更多地將精力放在業(yè)務(wù)邏輯的實現(xiàn)中。中間件主要有以下一些特點:滿足大量應(yīng)用的需要;運行于多種硬件和OS平臺;支持分布計算;提供跨網(wǎng)絡(luò)、硬件和OS平臺的透明性的應(yīng)用或服務(wù)的交互;支持標準的協(xié)議;支持標準的接口等特征。按照其功能,中間件主要分為五類:
·遠程過程調(diào)用中間件:遠程過程調(diào)用是一種廣泛使用的分布式應(yīng)用程序處理方法。一個應(yīng)用程序使用遠程調(diào)用來“遠程”執(zhí)行一個位于不同地址空間里的應(yīng)用。
·消息傳遞的中間件:消息傳遞的中間件指的是利用高效可靠的消息傳遞機制進行平臺無關(guān)的數(shù)據(jù)交互,并基于數(shù)據(jù)通信來進行分布式系統(tǒng)的集成。
·基于對象請求的中間件:對象請求代理中間件是定義異構(gòu)環(huán)境對象透明地發(fā)送請求和接收響應(yīng)的基本機制,是建立在對象之間的中間件。
·事務(wù)處理中間件:事務(wù)處理中間件界于client和server之間,進行事務(wù)管理與協(xié)調(diào)、負載平衡、錯誤恢復(fù)等,以提高系統(tǒng)的整體性能。
·數(shù)據(jù)庫中間件:在C/S環(huán)境下數(shù)據(jù)庫中間件是介于客戶機和數(shù)據(jù)庫服務(wù)器之間的中間層,通過它可以對后臺數(shù)據(jù)庫進行訪問。
3。JMX技術(shù)
JMX(Java Management Extensions)是J2EE規(guī)范中的一部分,是一套標準的代理和服務(wù)。是一個可為應(yīng)用程序植入管理功能的框架,其目的是解決分布式系統(tǒng)管理的問題,現(xiàn)在逐漸成為管理復(fù)雜軟件系統(tǒng)的解決方案。JMX是一種應(yīng)用編程接口,可擴充對象和方法的集合體,可以用于跨越一系列不同的異構(gòu)操作系統(tǒng)平臺、系統(tǒng)體系結(jié)構(gòu)和網(wǎng)絡(luò)傳輸協(xié)議,靈活的開發(fā)無縫集成的系統(tǒng)、網(wǎng)絡(luò)和服務(wù)管理應(yīng)用它提供了用戶界面指導(dǎo)、Java類和開發(fā)集成系統(tǒng)、網(wǎng)絡(luò)及網(wǎng)絡(luò)管理應(yīng)用的規(guī)范。管理對象是JMX應(yīng)用程序的核心。JMX結(jié)構(gòu)包括:支持Java的Web瀏覽器用戶接口,管理運行模塊ARM(Admin Runtime Module)和應(yīng)用。這三個部件之間通過RMI(Remote Method Invocation)進行通信。JMX的體系架構(gòu)被分為三個層次,分別是Instrumentation層、Agent層和Distributed Service層。圖2是JMX的體系架構(gòu)圖。

???Instrumentation層定義了實現(xiàn)JMX可管理資源的需求。JMX可管理資源可以是包括應(yīng)用程序、服務(wù)組件、設(shè)備等任何對象。可管理的資源通過暴露一個JAVA對象或包裝器來描述自身的一些可管理的特性,這些特性使得資源對外部表現(xiàn)出來,以便被JMX兼容的應(yīng)用程序進行調(diào)用和管理。用戶通過使用一個或多個MBean(Manageable Bean)來提供要管理資源的對外表現(xiàn),目前MBean的有四種類型,分別是standard, dynamic, model, open MBean。Instrumentation還定義了一種通知機制,目的是允許MBean與環(huán)境就其改變進行交互,類似與JAVABEAN中的屬性改變通知機制。Agent層,此層定義了實現(xiàn)代理的需求,代理的職責是控制和暴露注冊的管理資源,缺省情況下,管理資源代理與其所管理的資源位于同一個主機下。代理需求使用Instrumentation層來定義標準的MBean服務(wù)器管理代理、支持服務(wù)和連接器。J2EE規(guī)范中提供了HTML適配器和RMI適配器。當一個JAVA虛擬機可用時,JMX代理可以通過主機管理資源定位,JMX代理不必知道它為哪一個資源服務(wù)。JMX管理資源可以使用任何提供服務(wù)的JMX代理。管理人員可以通過分布Instrumentation層中描述的協(xié)議適配器和連接器來與MBean進行交互。代理不需要知道關(guān)于連接器活交互應(yīng)用程序的任何事情。Distributed Service層:此層的目的是為實現(xiàn)JMX管理應(yīng)用定義一些接口,以下幾點概括了分布層的功能。為管理應(yīng)用程序提供一個接口,可以透明的與代理和要管理的資源通過連接器進行交互;把代理和MBean進行語義級映射到豐富數(shù)據(jù)協(xié)議的構(gòu)造中,來對代理和MBean暴露一個管理視圖;將來自于高層管理平臺的管理信息分布到大量的JMX代理中;把大量來自于JMX代理中的管理信息融進邏輯視圖中,這些邏輯視圖與終端用戶的業(yè)務(wù)邏輯操作是相關(guān)的;提供安全機制;
??? 目前,JMX逐漸成為復(fù)雜應(yīng)用管理的解決方案,可以非常容易的使應(yīng)用程序具有被管理的功能;提供具有高度伸縮性的架構(gòu);每個JMX Agent服務(wù)可以很容易的放入到Agent中,每個JMX的實現(xiàn)都提供幾個核心的Agent服務(wù),用戶也可以根據(jù)特定的需求定制編寫服務(wù),服務(wù)可以很容易的部署和撤銷部署,同時還集成了現(xiàn)有的一些管理解決方案,如SNMP。
4. 基于JMX實現(xiàn)中間件的構(gòu)件化設(shè)計
4.1 中間件設(shè)計要求

?? ?中間件,從本質(zhì)上是對分布式應(yīng)用的抽象,因而拋開了與應(yīng)用相關(guān)的業(yè)務(wù)邏輯的細節(jié),保留了典型的分布交互模式的關(guān)鍵特征。經(jīng)過抽象,將紛繁復(fù)雜的分布式系統(tǒng)經(jīng)過提煉和必要的隔離后,以統(tǒng)一的層面形式呈現(xiàn)給應(yīng)用。應(yīng)用在中間件提供的環(huán)境中可以更好地集中于業(yè)務(wù)邏輯上,并以構(gòu)件化的形式存在,在異構(gòu)環(huán)境中實現(xiàn)良好的協(xié)同工作。構(gòu)件是可獨立配置的單元,因此構(gòu)件必須自包容,強調(diào)與環(huán)境和其他構(gòu)件的分離,因此構(gòu)件的實現(xiàn)是嚴格封裝的,外界沒機會或沒必要知道構(gòu)件內(nèi)部的實現(xiàn)細節(jié),可以在適當?shù)沫h(huán)境中被復(fù)合使用,因此需要提供清楚的接口規(guī)范,可以與環(huán)境交互,此外構(gòu)件不應(yīng)當是持續(xù)的,即構(gòu)件沒有個體特有的屬性,理解為構(gòu)件不應(yīng)當與自身副本區(qū)別,在任何環(huán)境中,最多僅有特定構(gòu)件的一份副本?;跇?gòu)件化的中間件是面向底層的,跟企業(yè)的應(yīng)用業(yè)務(wù)邏輯無關(guān)。
4.2 中間件的構(gòu)件化設(shè)計
??? 基于構(gòu)件化的設(shè)計思想,考慮到中間件所處的多平臺異構(gòu)環(huán)境以及客戶定制需求,決定了中間件從設(shè)計是基于構(gòu)件化的,即系統(tǒng)各功能模塊是可拼裝的,系統(tǒng)的核心功能所占的比重非常小,而大多數(shù)的功能模塊作為一種構(gòu)件根據(jù)需要來“插入”到系統(tǒng)中,各功能模塊自身是獨立的,核心模塊根據(jù)系統(tǒng)配置文件決定哪一個功能組件作為插件插入進系統(tǒng)來提供服務(wù),這樣的設(shè)計保持了系統(tǒng)核心" title="系統(tǒng)核心">系統(tǒng)核心的精練,同時也使得各模塊之間是一種松散的關(guān)系,符合構(gòu)件化設(shè)計的原則。而功能模塊的設(shè)計是基于MBean的,采用JMX作為底層實現(xiàn),因此可以跨越一系列不同的異構(gòu)操作系統(tǒng)平臺、系統(tǒng)體系結(jié)構(gòu)和網(wǎng)絡(luò)傳輸協(xié)議,最大限度的實現(xiàn)組件的復(fù)用,例如基于構(gòu)件設(shè)計事務(wù)處理、安全、遠端訪問、死鎖檢測、實體同步、數(shù)據(jù)庫訪問等功能模塊幾乎可以不用修改就可以移植到JMX兼容的結(jié)構(gòu)中。圖3是遵循這種思想的中間件系統(tǒng)的概念圖。

??? 如上圖,JMX的MBean服務(wù)器在單獨的服務(wù)實現(xiàn)中成為一條調(diào)用總線(Invocation Bus),系統(tǒng)的功能模塊通過MBean來展現(xiàn)其管理接口,服務(wù)與服務(wù)之間的關(guān)系相對獨立,一個服務(wù)(即一個功能模塊)通過MBean服務(wù)器來尋找和定位另外一個需要調(diào)用的服務(wù),因此可以減少這種服務(wù)之間緊密的集成關(guān)系,這使得服務(wù)器的設(shè)計更松散模塊化更強,
??? 目前,在中間件中各功能模塊通過可管理的注冊到MBean Server上的MBean來實現(xiàn),MBean服務(wù)器通過Agent來對用戶作展現(xiàn),可以把Agent看作MBean服務(wù)器。一個MBean就是一個JAVA對象,它遵循在JMX規(guī)范的Instrumentation level中所闡述的設(shè)計模式。一個MBean可以表現(xiàn)一個設(shè)備、一個應(yīng)用或需要管理的任何資源。MBean暴露一些管理接口,例如一系列可讀寫的屬性或可以調(diào)用的方法,以及一些自描述符。管理接口在MBean實例的生存期內(nèi)不會改變。標準的MBean通過包含的方法名靜態(tài)的定義管理接口,而動態(tài)的MBean實現(xiàn)一個特定的JAVA接口,在運行時暴露其屬性和操作。
??? 在一個JAVA虛擬機里只啟動了一個MBean服務(wù)器,每一個服務(wù)是一個MBean,通過MBean服務(wù)器來管理,服務(wù)可以通過MBean作為一個構(gòu)件來插入到中間件的內(nèi)核中。實際上,在應(yīng)用服務(wù)器啟動時,除了實例化一個JMX MBean服務(wù)器之外什么也沒做。所有的服務(wù)同MBean配置文件來裝載進系統(tǒng)和作為一個MBean注冊到服務(wù)器上,從而保持系統(tǒng)核心的精練,即核心模塊少,并且是基于構(gòu)件化設(shè)計的,大多數(shù)服務(wù)作為一種插件根據(jù)配置來調(diào)入,配置文件由XML來實現(xiàn),用戶可以根據(jù)具體情況來定制配置決定調(diào)入不同的服務(wù)。下面介紹一下系統(tǒng)核心的模塊化實現(xiàn)描述,首先在主應(yīng)用程序中啟動一個ServerLoader,由它來生成一個MBean服務(wù)器的實例,啟動后自動創(chuàng)建幾個必須的內(nèi)部的服務(wù)和初始配置,一般要創(chuàng)建一個日志模塊和一個服務(wù)控制器模塊,日志管理模塊的作用是記錄MBean服務(wù)器所做的全部操作,以便進行系統(tǒng)監(jiān)測和錯誤分析,服務(wù)控制器模塊的功能是讀取ServiceConfiguration.xml文件,此文件中包含所有的可以被中間件管理和使用的服務(wù)。因此將服務(wù)以插件的方式裝載到服務(wù)器中。核心構(gòu)件化設(shè)計的優(yōu)勢是內(nèi)核程序只負責提供一系列必須的核心功能,通過這些核心功能將其他的外圍系統(tǒng)級服務(wù)組合到一起。圖4是中間件的設(shè)計概念圖。

??? 如上圖所示,基于JMX中間件的構(gòu)件化設(shè)計提供一種通用的類似于系統(tǒng)總線的結(jié)構(gòu)來集成模塊、和其他的插件。構(gòu)件通過MBean服務(wù)來聲明然后被裝載進服務(wù)器,可以使用JMX對組件進行管理。由于整個系統(tǒng)的架構(gòu)是基于構(gòu)件化的,通過插件集成到內(nèi)核中,模塊化的實現(xiàn)是通過JMX來完成的,作為一種工業(yè)標準接口,它可以管理內(nèi)部組件和部署在上面的應(yīng)用程序。高度模塊化對應(yīng)用開發(fā)人員有很多好處,它可以使緊湊的代碼變得更為簡潔來支持應(yīng)用程序,例如在應(yīng)用中EJB的鈍化(passivation)如果用戶認為沒有必要,就可以修改配置文件的某些特性使其鈍化操作不生效,這樣在進行服務(wù)裝載時則略過此功能模塊不進行裝載,如果后來決定使用鈍化操作,則將服務(wù)器的鈍化功能激活即可。同時JMX為所有不同的來自JAVA的軟件和硬件組件提供管理和監(jiān)測的標準,為大量現(xiàn)存的管理標準提供集成。
5.結(jié)束語
?? ?JMX具有良好的跨平臺特性和構(gòu)件化思想,提供統(tǒng)一的接口而不依賴于任何的生產(chǎn)廠商,采用JMX作為中間件底層設(shè)計,可以屏蔽多樣的系統(tǒng)資源,保證良好的互操作性。基于構(gòu)件化的設(shè)計可以降低模塊間的耦合度,提高系統(tǒng)的伸縮性。

參考文獻
[1] David Wells, Jose Blakeley, Craig Thompson. "Architecture of an Open Object-Oriented Database Management System."[J] IEEE Computer, October 1992.
[2] Thompson, C., P. Pazandak, V. Vasudevan, F. Manola, M. Palmer, G. Hansen, T. Bannon, "Intermediary Architecture: Interposing Middleware Services between Web Client and Server", http://www.objs.com/OSA/Intermediary-Architecture.html, 1998.
[3] Loyd G. Williams, Connie U. Smith, Performance Evaluation of Software Architecture, WOSP 98, Santa Fe.N.M
[4] David Garlan and Mary Shaw, An Introduction to Software Architecture, CMU Software Engineering Institute Technical Report, 1994

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