肖超恩,曾廣平,張青川,岳 洋
(北京科技大學 計算機與通信工程學院,北京100083)
“軟件人”[1]是人工智能、人工生命的一個新興領域,它是模擬、延伸、擴展人的行為和功能的軟件實體。為了解決軟件系統(tǒng)中的演化問題,文獻[2-3]依托 “軟件人”的自感知、自規(guī)劃等擬人特性,提出了 “軟件人”構件模型(softman component,SMC)。基于此模型,軟件系統(tǒng)能夠自治地調(diào)整自身行為,并通過在線演化的方式來適應外部運行環(huán)境動態(tài)變化。SMC構件為電子商務、移動網(wǎng)絡等系統(tǒng)提供較好的演化支持,隨著其在相關領域廣泛應用,其不具備分布式處理能力的局限性突顯出來,大大限制SMC的進一步應用與發(fā)展。因此,如何為以演化為著力點的SMC構件模型提供分布式處理能力,進而能應用于“真”分布的開放環(huán)境中[4],成為SMC亟須解決的問題。
現(xiàn)階段,可復用構件技術已成為網(wǎng)絡計算平臺上研建復雜系統(tǒng)的首選技術方案。OMG組織為實現(xiàn)構件級的分布式計算,以CORBA為遠程訪問通信基礎,提出了CCM(CORBA component model)中間件平臺[5]。SUN 公 司 提出了EJB(enterprise JavaBean)中間件以支持企業(yè)級應用開發(fā),該中間件以JavaBean構件為基礎,利用Java平臺的RMI技術實現(xiàn)分布式計算[6]。美國許多大學和研究機構為解決高性能科學計算軟件開發(fā)復雜、周期長等問題提出了CCA(common component architecture)中間件平臺[7]。國內(nèi)學者在基于構件的中間件平臺方面也做了不少的研究工作。北京大學王千祥教授、梅宏教授為適合企業(yè)級應用提出了一種面向領域兼容EJB規(guī)范的構件運行支撐平臺PKUAS[8]。國防科技大學的王懷民教授等人開發(fā)了符合CCM規(guī)范的構件中間件StarCCM,該平臺底層通信由遵循CORBA規(guī)范的StarBus提供支持[9]。
在前期工作中,筆者所在的研究團隊提出了一種面向開放系統(tǒng)演化的SMC構件模型[2-3],并研發(fā)了相應的運行支撐平臺。作為構件的底層執(zhí)行環(huán)境,該平臺負責將實例化后的SMC構件加載到同一地址空間。由于構件接口連接緊耦合在本地的同一上下文中,故構件實體之間尚不具備分布交互能力。為了使得同地址空間內(nèi)的SMC構件連接衍生為跨地址空間的透明互操作,我們提出了分布式綁定中間件的技術構想,以便為SMC構件提供統(tǒng)一、透明、高效的分布交互平臺。
SMC構件是一個包含相關信息并能提供服務的計算實體,它僅通過接口與外界進行交互。其中接口分為管理邏輯接口與功能邏輯接口。管理邏輯接口用于描述、控制和調(diào)整SMC構件自身的行為和結構。功能邏輯接口定義SMC構件的功能邏輯,其分為服務型接口和請求型接口兩類。服務型接口說明了SMC構件能提供的服務,而請求型接口說明了SMC構件需要的服務。SMC構件之間是采用嵌套組合來實現(xiàn)構件的重用與系統(tǒng)的構造,構件間通過服務型接口與請求型接口的綁定建立關聯(lián)并進行通信。因此,為使SMC構件模型能具有分布式的處理能力,本文提出了SMC構件分布式綁定中間件(SMC distributed binding middleware,MCDBM),如圖1所示。

圖1 SMC構件分布式綁定中間件框架
SMC構件分布式綁定中間件由SMC注冊服務層、SMC遠程綁定層及分布式體系結構描述層三部分組成。SMC注冊服務層主要提供構件注冊、查找、注銷等分布式構件管理服務。通過注冊服務,服務構件能夠?qū)ν馓峁┳约悍招畔ⅲ煌ㄟ^查找服務,客戶構件則能查找所需的服務構件。SMC遠程綁定層主要為SMC構件提供遠程綁定服務。該服務為分布于不同節(jié)點上的SMC構件對應接口之間建立訪問鏈路。通過此鏈路,SMC構件之間能實現(xiàn)跨越進程邊界的互操作。分布式體系結構描述層通過擴展SMC構件體系結構描述語言(SMC/ADL),使得已有的構件能應用于分布環(huán)境,從而能顯式規(guī)約分布式SMC構件系統(tǒng)。
基于SMC構件分布式綁定中間件框架,本文采用構件化的方法來構造與實現(xiàn)該中間件。其中,SMC注冊服務構件(softman registry service component,SMRSC)用于實現(xiàn)分布式環(huán)境下SMC構件的注冊服務;SMC遠程綁定構件(softman remote binding component,SMRBC)用于負責為分布式SMC構件提供互操作服務,SMC/DADL解析構件(softman distributed ADL parser component,SMDPC)用于解析分布式描述文檔,并利用SMRSC和SMRBC提供的服務實例化分布式SMC構件系統(tǒng)。
SMC注冊服務構件是從服務層面為構件間的分布式綁定提供一致操作。該構件主要提供構件注冊、查找、注銷等服務功能。
注冊服務。指向SMC構件注冊中心注冊SMC構件并公布該構件提供的服務型接口信息,以便其他SMC構件能查詢到。
查找服務。指在SMC構件注冊中心上搜索已注冊的服務構件,查找出能滿足需求的SMC構件。
注銷服務。指提供服務的SMC構件要進行替換操作或者結束其生命周期時,需向注冊中心進行注銷,并撤銷其公布的服務信息。
SMC注冊服務構件通過注冊服務接口,為SMC構件提供服務注冊、查找和注銷等功能,其IDL定義如下:
module ustb_smcavs_DMW_SMComponentRegistry{
interface RegistryService{
SMComponentArray listAllSMComponent();
StringArray listAllSMComponentRegistryName();
SMComponent lookupSMComponent(in string name);
SMComponentArray lookupSMComponent(in ProvidedInterfaceTypeArray inferfaces);
boolean registrySMComponent(in ustb_smcavs_SMC_api_managementshell::
SMComponent smcomponent);
boolean registrySMComponent(in string name,in ustb_smcavs_SMC_api_managementshell::
SMComponent smcomponent);
boolean deregistrySMComponet(in string name);
boolean deregistrySMComponet(in ustb _smcavs _SMC_api_managementshell::
SMComponent smcomponent)
};
};
對于SMRSC構件而言,主要采用HashMap來存儲注冊的服務構件,并對外提供相應的查找,注銷等功能。SMRSC構件提供了兩種構件獲取的方式。一種方式是直接通過注冊的關鍵字來獲取提供服務的SMC構件;另一種方式 則 是 調(diào) 用lookupSMComponent(in ProvidedInterface-TypeArray interfaces)操作,通過向注冊中心提供所需的服務接口類型集,構件注冊中心將利用SMC構件的管理邏輯內(nèi)省功能,遍歷以注冊服務構件,查找能提供所需服務接口的所有SMC構件。
SMC遠程綁定構件主要為SMC構件提供遠程綁定服務。而對于SMC構件而言,接口是與外界進行交互的唯一入口。SMC構件接口之間的裝配連接操作,映射到對象空間,就是將構件的請求型接口對象(ItfClient)與提供服務的構件服務型接口(ItfServer)關聯(lián)(bind)在一起。所謂關聯(lián),是指在對象之間建立一條鏈路,通過該鏈路一個對象實例能訪問到另一個對象實例。當SMC構件屬于同一個上下文時,對應的ItfClient對象與ItfServer對象都存在于同一個地址空間,那么接口的關聯(lián)操作就是ItfClient能獲取到ItfServer對象的引用。當SMC構件處于分布式環(huán)境中時,ItfClient對象與ItfServer對象屬于不同的地址空間。此時,若要實現(xiàn)接口之間的連接,則需要一系列的中間對象負責將ItfClient的調(diào)用傳遞給ItfServer,并將其返回值取回來。此時,SMC遠程綁定構件負責來創(chuàng)建這些中間對象幫助接口實現(xiàn)分布式的訪問。同時,利用SMC構件管理邏輯提供的控制、內(nèi)省等服務,SMC遠程綁定構件采用通信代理動態(tài)生成策略來實現(xiàn),其模型圖2所示。
SMC遠程綁定構件由動態(tài)代理層、接口適配層、協(xié)議棧、網(wǎng)絡協(xié)議層四部分組成。動態(tài)代理層是指依據(jù)構件綁定對象動態(tài)生成遠端構件代理,此時將構件接口之間的連接分解為與代理的綁定,并由代理負責與對應的遠端構件進行交互。接口適配層依據(jù)接口的類型,構造相應的標識符,使得代理構件的接口對象能在分布式環(huán)境下被訪問到。協(xié)議棧用于定義SMC構件接口訪問協(xié)議,確保相關標識符能訪問到對應的遠程接口,且在接口操作中,傳遞的參數(shù)或返回值包含相關接口信息時,將其轉(zhuǎn)化接口適配層為對應的標識符,保證上層應用能獲取到正確的接口引用。網(wǎng)絡協(xié)議層則采用TCP等網(wǎng)絡通信協(xié)議保證上層的互聯(lián)互通。因此,該構件對外提供的服務接口IDL描述如下:

圖2 SMC遠程綁定模型
module ustb_smcavs_DMW_RemoteBinding{
Interface RemoteContext{
Interface bind(in Identifier id);
Interface bind(in string host,in int port,in int key);
Identifier export(in Interface itf,in string host,in int port,in int key);
Identifier getId(in string host,in int port,in int key);
};
};
即,接口對象Itf必須先通過分布式上下文的export操作,將自己添加到分布式上下文中,并獲取由(host,port,key)三元素構成的標識符Identifier對象。其中,host元素確定了接口對象Itf所存在的節(jié)點,port元素確定了接口對象Itf存在的進程,key元素則用于關聯(lián)該進程中對應的接口對象Itf。其他構件則能利用bind操作,通過由(host,port,key)三元素構成的標識符在分布式上下文環(huán)境中獲取與之關聯(lián)的接口對象引用。
SMC遠程綁定構件主要包括以下構造單元:
(1)ProxyFactory單元:通過SMC構件接口的反射特性相應的動態(tài)生成服務型接口對象代理和客戶型接口對象代理。
(2)TCP_Protocol單元:以TCP/IP協(xié)議為基礎,通過標識符中的(host,port)元素與外界建立會話,監(jiān)聽和接收請求者的數(shù)據(jù),并負責將上層協(xié)議的數(shù)據(jù)發(fā)送到指定節(jié)點。
(3)Itf_Protocol單元:提供了一個簡單的接口遠程訪問協(xié)議,其請求消息和回復消息格式為:

請求消息格式

回復消息格式
其中,Request key用于標識接口對象的請求者。Receive key則用于標識被請求的接口對象,即被請求接口對象在其分布式上下文中對應的標識符中的key元素。Content中保存訪問請求的相關信息(如被請求接口對象的操作、參數(shù))或者被請求接口操作的返回信息(如調(diào)用是否異常),其具體含義由Marshaller單元解析。
(4)Marshaller單元:提供了 Marshaller和 UnMarshaller兩種服務。Marshaller服務主要用于對客戶端的調(diào)用請求進行編碼操作;而UnMarshaller服務則對接收到的數(shù)據(jù)進行解碼,并返回給調(diào)用者。
SMC/ADL是面向SMC的體系結構描述語言,它利用一套XML Schema定義了軟件從設計、到運行、直至演化階段的完整的體系結構規(guī)約框架。對于分布式的SMC構件系統(tǒng),SMC/ADL語言不僅需要描述組成系統(tǒng)的各個SMC構件及其構件間的關系,還需刻畫出分布式的計算環(huán)境。因此,為了給運行期的構件系統(tǒng)實例提供分布交互支持,本文對原有的SMC/ADL進行了適應性擴展,對SMComponent元素添加了DType屬性以及相關元素刻畫構件運行的分布式環(huán)境。其中,DType屬性的Schema句法聲明如下。

因此,SMC/DADL解析構件主要完成兩部分任務。首先,利用原有的ADL解析構件解析分布式體系描述文檔,構建構件實例化任務樹。然后,在對系統(tǒng)實例化與組裝時,若解析到分布式SMC構件時,則通過SMRSC查詢并獲取相應的分布式SMC構件引用。實例化所有構件后,再對構件進行組裝,若存在分布式SMC構件則利用SMRBC將相應構件接口綁定在一起,關鍵算法如下:

()Input:smcADL output:SMComponent_Distribute_System_Load in systemADL=new ADLParseTask(smcADL)smcAdlList[]=systemADL.getSMComponetAdlList()registry=CreateSMComponet(Registry)SMComponetList[]for each sadl in smcAdlList if(sadl.DType==‘remote’)smc=registry.lookupSMComponent(sadl)SMComponetList.push(smc)else smc=CreateSMComponet(sadl)SMComponetList.push(smc)end if end for SMComponetOrchestrate(root,SMComponetList,systemADL)SMComponetItfBind(root,SMComponetList,systemADL)null Beg End
基于上述描述,SMC分布式綁定中間件的構件化實現(xiàn)如圖3所示。SMC分布式綁定中間件不僅對外提供了SMC/DADL解析功能,同時,還對SMC遠程綁定構件和SMC注冊服務構件進行封裝,對外提供一個標準的Registry接口,進一步簡化構件間的分布式訪問。Registry接口的IDL定義如下:

其中,createRegistry()操作用于創(chuàng)建注冊服務中心。其主要功能就是利用SMRBC構件提供的服務,在分布式上下文環(huán)境下,發(fā)布SMRSC構件,為構件提供注冊、查找等服務。而getRegistry()操作,則是利用SMRBC構件在分布式上下文環(huán)境下獲取指定節(jié)點的SMRSC構件引用,從而獲取 “軟件人”注冊服務構件提供的服務。

圖3 SMC分布式綁定中間件實現(xiàn)
對于分布式中間件平臺,許多學者對其性能測試方法進行了研究[10-12]。由于SMC構件具有自控制、自適應、動態(tài)演化的特性,其安全等特性尤其管理邏輯負責。因此,本文性能測試主要關注兩方面:遠程構件建立通信所消耗的時間和遠程構件調(diào)用所消耗的時間。同時,SMC構件的以JAVA平臺為參考實現(xiàn)平臺,本文選取JAVA平臺上成熟的RMI遠程方法調(diào)用和基于Java的CORBA平臺作為對比實驗對象,以此來評估SMC分布式綁定中間件的性能。
為進行性能測試,我們定義了IPerfromanceTest接口對其進行測試,并針對RMI、CORBA、SMC構件編寫了相應的實現(xiàn)。由于不同的數(shù)據(jù)類型將影響遠程的調(diào)用,因此在測試接口中對8種數(shù)據(jù)類型進行了測試,其中get-String()方法返回長度為1024字節(jié)的字符串。同時為了減少對性能測試的干擾,接口的實現(xiàn)沒有進行其他的任何操作。在測試中,使用兩臺PC機,硬件環(huán)境為2.1GHz的Inter Core Duo處理器,2GDDR2內(nèi)存。軟件環(huán)境為基于window2003操作系統(tǒng)的JDK1.6環(huán)境。兩臺電腦通過100M以太網(wǎng)連接,平均網(wǎng)絡延遲為100μs。

測試過程中進行了兩組實驗。測試過程中進行了兩組實驗:①同一節(jié)點上不同進程間的遠程訪問性能測試;②不同節(jié)點上局域網(wǎng)環(huán)境下的遠程訪問性能測試。圖4為遠程接口在本地節(jié)點和網(wǎng)絡兩種環(huán)境下建立通信所消耗的時間。圖5為在本地和局域網(wǎng)兩種環(huán)境下接口交互的性能測試結果。


從性能測試可以看出,SMC構件遠程綁定器在建立連接時與JAVA RMI、CORBA相比耗時較長。這是由于JAVA RMI的stub及skeleton是通過接口實現(xiàn)類的繼承來實現(xiàn),CORBA依據(jù)IDL,預先生成了客戶端stub以及服務端的skeleton,而SMC遠程綁定器采用的是輕量的通信代理動態(tài)生成策略,故導致在建連階段兩者性能差異較大。在隨后的交互通信階段,遠程綁定器在本地節(jié)點遠程訪問與JAVA RMI和CORBA相比耗時高4%~19%,在網(wǎng)絡遠程訪問中耗時高1%~8%,盡管也有性能下降,但耗損都在可接受的范圍內(nèi)。因此,分布式遠程綁定器在實際應用中是行之有效的。
針對SMC構件的分布式交互問題,本文設計并實現(xiàn)了一個適用于SMC構件的分布式綁定中間件。該中間件提供了構件注冊與遠程綁定服務及分布式操作約束機制。利用構件注冊服務,能有效的管理分布式環(huán)境中的SMC構件;借助遠程綁定機制,同地址空間內(nèi)的構件連接平滑衍生為跨地址空間的遠程綁定。同時借助SMC/DADL,原有的集中式構件系統(tǒng)能無縫的融入到分布式計算環(huán)境中。通過對比實驗,驗證了分布式綁定中間件的可行性和實用性。由于遠程綁定構件采用通信代理動態(tài)生成策略,使得構件間在第一次建立通信階段的耗時較高,故如何建立高效的代理動態(tài)生成機制有待進一步的研究。
[1]ZENG Guangping,TU Xuyan,WANG Hongbo.SoftMan research and applications[M].Beijing:Science Press,2007:9-22(in Chinese).[曾廣平,涂序彥,王洪泊.“軟件人”研究及應用[M].北京:科學出版社,2007:9-22.]
[2]Yue Yang,Ai Dongmei,Zeng Guangping.A Dynamic evolution framework for softman system[C]//International Confe-rence on Computer Application and System Modeling.Shanxi,Taiyuan,China:IEEE Computer Society,2011:262-266.
[3]Yue Yang,Zeng GuangPing.A component model supporting dynamic evolution of Internetware[C]//International Conference on Materials,Mechatronics and Automation.Melbourne,VIC,Australia:Trans Tech Publications Ltd,2011:956-961.
[4]YANG Fuqing.Thinking on the development of software engineering technology[J].Journal of Software,2005,16(1):1-7(in Chinese).[楊芙清.軟件工程技術發(fā)展思索[J].軟件學報,2005,16(1):1-7.]
[5]XU Haitao,ZHANG Jianwei,ZHENG Canxiang.Improved communication of DRS system based on CORBA and DDS technology[J].Computer Engineering and Design,2012,33(1):357-361(in Chinese).[許海濤,張建偉,鄭燦祥.基于CORBA與DDS技術改進DRS系統(tǒng)通信[J].計算機工程與設計,2012,33(1):357-361.]
[6]CHEN Liyan,GAO Qing.Research for improving EJB s performance based on design patterns[J].Computer Engineering and Design,2009,30(8):2067-2070(in Chinese).[陳立巖,高青.基于設計模式改善EJB性能的應用研究[J].計算機工程與設計,2009,30(8):2067-2070.]
[7]Yin Jian,Agarwal Khushbu.Implementing high performance remote method invocation in CCA[C]//IEEE International Conference on Cluster Computing.Austin,TX,United states:Institute of Electrical and Electronics Engineers Inc,2011:547-551.
[8]Hong Mei,LIU Xuan-Zhe.Internetware:An emerging software paradigm for internet computing[J].Journal of Compu-ter Science & Technology,2011,26(4):587-599.
[9]AN Jingbin,JIA Yan,WANG Zhiying,et al.Design and implementation of a persistence framework for software component platforms[J].Computer Engineering & Science,2008,30(6):111-114(in Chinese).[安靜斌,賈焰,王志英,等.軟件構件平臺持久框架的設計與實現(xiàn)[J].計算機工程與科學,2008,30(6):111-114.]
[10]Jalali Seyed Saber,Rashidi Hassan,Nazemi Eslam.A new approach to evaluate performance of component-based software architecture[C]//UKSim 5th European Modelling Symposium on Computer Modelling and Simulation.Madrid,Spain:IEEE Computer Society,2011:451-456.
[11]Liu Zhipiao,Sun Qibo,Wang Shangguang,et al.The performance prediction of cloud pervice via JOGM(1,1)Model[J].Advances in information sciences and service sciences,2012,4(5):70-77.
[12]Matjaz B Juric,Bostjan Kezmah,Marjan Hericko,et al.Java RMI,RMI tunneling and Web services comparison and performance analysis[J].ACM SIGPLAN Notices,2004,39(5):58-65.