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

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

???Instrumentation層定義了實(shí)現(xiàn)JMX可管理資源的需求。JMX可管理資源可以是包括應(yīng)用程序、服務(wù)組件、設(shè)備等任何對(duì)象??晒芾淼馁Y源通過暴露一個(gè)JAVA對(duì)象或包裝器來描述自身的一些可管理的特性,這些特性使得資源對(duì)外部表現(xiàn)出來,以便被JMX兼容的應(yīng)用程序進(jìn)行調(diào)用和管理。用戶通過使用一個(gè)或多個(gè)MBean(Manageable Bean)來提供要管理資源的對(duì)外表現(xiàn),目前MBean的有四種類型,分別是standard, dynamic, model, open MBean。Instrumentation還定義了一種通知機(jī)制,目的是允許MBean與環(huán)境就其改變進(jìn)行交互,類似與JAVABEAN中的屬性改變通知機(jī)制。Agent層,此層定義了實(shí)現(xiàn)代理的需求,代理的職責(zé)是控制和暴露注冊(cè)的管理資源,缺省情況下,管理資源代理與其所管理的資源位于同一個(gè)主機(jī)下。代理需求使用Instrumentation層來定義標(biāo)準(zhǔn)的MBean服務(wù)器管理代理、支持服務(wù)和連接器。J2EE規(guī)范中提供了HTML適配器和RMI適配器。當(dāng)一個(gè)JAVA虛擬機(jī)可用時(shí),JMX代理可以通過主機(jī)管理資源定位,JMX代理不必知道它為哪一個(gè)資源服務(wù)。JMX管理資源可以使用任何提供服務(wù)的JMX代理。管理人員可以通過分布Instrumentation層中描述的協(xié)議適配器和連接器來與MBean進(jìn)行交互。代理不需要知道關(guān)于連接器活交互應(yīng)用程序的任何事情。Distributed Service層:此層的目的是為實(shí)現(xiàn)JMX管理應(yīng)用定義一些接口,以下幾點(diǎn)概括了分布層的功能。為管理應(yīng)用程序提供一個(gè)接口,可以透明的與代理和要管理的資源通過連接器進(jìn)行交互;把代理和MBean進(jìn)行語(yǔ)義級(jí)映射到豐富數(shù)據(jù)協(xié)議的構(gòu)造中,來對(duì)代理和MBean暴露一個(gè)管理視圖;將來自于高層管理平臺(tái)的管理信息分布到大量的JMX代理中;把大量來自于JMX代理中的管理信息融進(jìn)邏輯視圖中,這些邏輯視圖與終端用戶的業(yè)務(wù)邏輯操作是相關(guān)的;提供安全機(jī)制;
??? 目前,JMX逐漸成為復(fù)雜應(yīng)用管理的解決方案,可以非常容易的使應(yīng)用程序具有被管理的功能;提供具有高度伸縮性的架構(gòu);每個(gè)JMX Agent服務(wù)可以很容易的放入到Agent中,每個(gè)JMX的實(shí)現(xiàn)都提供幾個(gè)核心的Agent服務(wù),用戶也可以根據(jù)特定的需求定制編寫服務(wù),服務(wù)可以很容易的部署和撤銷部署,同時(shí)還集成了現(xiàn)有的一些管理解決方案,如SNMP。
4. 基于JMX實(shí)現(xiàn)中間件的構(gòu)件化設(shè)計(jì)
4.1 中間件設(shè)計(jì)要求
?? ?中間件,從本質(zhì)上是對(duì)分布式應(yīng)用的抽象,因而拋開了與應(yīng)用相關(guān)的業(yè)務(wù)邏輯的細(xì)節(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)境中實(shí)現(xiàn)良好的協(xié)同工作。構(gòu)件是可獨(dú)立配置的單元,因此構(gòu)件必須自包容,強(qiáng)調(diào)與環(huán)境和其他構(gòu)件的分離,因此構(gòu)件的實(shí)現(xiàn)是嚴(yán)格封裝的,外界沒機(jī)會(huì)或沒必要知道構(gòu)件內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),可以在適當(dāng)?shù)沫h(huán)境中被復(fù)合使用,因此需要提供清楚的接口規(guī)范,可以與環(huán)境交互,此外構(gòu)件不應(yīng)當(dāng)是持續(xù)的,即構(gòu)件沒有個(gè)體特有的屬性,理解為構(gòu)件不應(yīng)當(dāng)與自身副本區(qū)別,在任何環(huán)境中,最多僅有特定構(gòu)件的一份副本?;跇?gòu)件化的中間件是面向底層的,跟企業(yè)的應(yīng)用業(yè)務(wù)邏輯無關(guān)。
4.2 中間件的構(gòu)件化設(shè)計(jì)
??? 基于構(gòu)件化的設(shè)計(jì)思想,考慮到中間件所處的多平臺(tái)異構(gòu)環(huán)境以及客戶定制需求,決定了中間件從設(shè)計(jì)是基于構(gòu)件化的,即系統(tǒng)各功能模塊是可拼裝的,系統(tǒng)的核心功能所占的比重非常小,而大多數(shù)的功能模塊作為一種構(gòu)件根據(jù)需要來“插入”到系統(tǒng)中,各功能模塊自身是獨(dú)立的,核心模塊根據(jù)系統(tǒng)配置文件決定哪一個(gè)功能組件作為插件插入進(jìn)系統(tǒng)來提供服務(wù),這樣的設(shè)計(jì)保持了系統(tǒng)核心" title="系統(tǒng)核心">系統(tǒng)核心的精練,同時(shí)也使得各模塊之間是一種松散的關(guān)系,符合構(gòu)件化設(shè)計(jì)的原則。而功能模塊的設(shè)計(jì)是基于MBean的,采用JMX作為底層實(shí)現(xiàn),因此可以跨越一系列不同的異構(gòu)操作系統(tǒng)平臺(tái)、系統(tǒng)體系結(jié)構(gòu)和網(wǎng)絡(luò)傳輸協(xié)議,最大限度的實(shí)現(xiàn)組件的復(fù)用,例如基于構(gòu)件設(shè)計(jì)事務(wù)處理、安全、遠(yuǎn)端訪問、死鎖檢測(cè)、實(shí)體同步、數(shù)據(jù)庫(kù)訪問等功能模塊幾乎可以不用修改就可以移植到JMX兼容的結(jié)構(gòu)中。圖3是遵循這種思想的中間件系統(tǒng)的概念圖。

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

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