王 勇,盧桂馥,王忠群
(安徽工程大學(xué) 計(jì)算機(jī)與信息學(xué)院,蕪湖 241000)
一個(gè)基于構(gòu)件的分布式軟件系統(tǒng)由許多同構(gòu)或異構(gòu)的構(gòu)件件組成。近年來已經(jīng)出現(xiàn)了許多新的構(gòu)件技術(shù)和基于構(gòu)件的應(yīng)用平臺(tái),來簡(jiǎn)化和加速分布式軟件的構(gòu)建和開發(fā),但目前這些技術(shù)存在一個(gè)共同問題,即缺乏工具來描述整個(gè)軟件架構(gòu),并根據(jù)特定的需求和運(yùn)行環(huán)境對(duì)系統(tǒng)的軟件構(gòu)件進(jìn)行動(dòng)態(tài)配置。另外,現(xiàn)有的許多中間件開發(fā)模型和產(chǎn)品大多只關(guān)心網(wǎng)絡(luò)通信和互操作,缺乏對(duì)容錯(cuò)應(yīng)用的支持,從而導(dǎo)致基于中間件開發(fā)容錯(cuò)應(yīng)用面臨困境,因?yàn)榛谥虚g件開發(fā)應(yīng)用必須遵照中間件的開發(fā)模式來實(shí)現(xiàn),如果中間件不提供容錯(cuò)支持,則開發(fā)者必須自己實(shí)現(xiàn)容錯(cuò)邏輯,這樣導(dǎo)致應(yīng)用邏輯和容錯(cuò)邏輯混合在一起,增加了開發(fā)者的工作難度。
我們針對(duì)為了適應(yīng)因特網(wǎng)環(huán)境可用資源變化而可動(dòng)態(tài)重定位應(yīng)用構(gòu)件的大規(guī)模分布應(yīng)用,感知應(yīng)用構(gòu)件間、構(gòu)件和環(huán)境的關(guān)系并且記載于通訊錄中,把通訊錄機(jī)制和表示軟件邏輯結(jié)構(gòu)的圖機(jī)制結(jié)合起來使得利用圖可表達(dá)動(dòng)態(tài)變化的體系結(jié)構(gòu),利用分布檢查點(diǎn)技術(shù)和Home站點(diǎn),實(shí)現(xiàn)能夠適應(yīng)因特網(wǎng)環(huán)境的資源動(dòng)態(tài)變化的構(gòu)件遷移、動(dòng)態(tài)配置以及出錯(cuò)恢復(fù)的容錯(cuò)框架。
軟件體系結(jié)構(gòu)是軟件系統(tǒng)的一種抽象描述。近年來人們對(duì)軟件體系結(jié)構(gòu)進(jìn)行了大量的研究,集中體現(xiàn)在各種體系結(jié)構(gòu)描述語言(ADL)及其支持系統(tǒng),然而現(xiàn)有的軟件體系結(jié)構(gòu)描述語言及其支撐系統(tǒng)大多針對(duì)相對(duì)靜態(tài)的體系結(jié)構(gòu),對(duì)internet環(huán)境下的應(yīng)用,不能保證系統(tǒng)初始結(jié)構(gòu)符合要求,還要管理和控制系統(tǒng)結(jié)構(gòu)的動(dòng)態(tài)演化,即在可追溯性和動(dòng)態(tài)性上尚存在不足。南京大學(xué)馬嘵星等提出了一種面向圖的WEB架構(gòu)技術(shù)[4],北京大學(xué)黃罡等提出一種面向體系結(jié)構(gòu)的反射中間件系統(tǒng),他們將軟件體系結(jié)構(gòu)顯式表示,使得軟件體系結(jié)構(gòu)具有可追溯性和自省性。但他們沒有考慮構(gòu)件的可移動(dòng)性。針對(duì)現(xiàn)狀,我們進(jìn)一步研究了滿足可追溯性和動(dòng)態(tài)性的面向圖的具有自省的并支持構(gòu)件可遷移的動(dòng)態(tài)軟件體系結(jié)構(gòu)。
支持可遷移構(gòu)件分布式應(yīng)用與傳統(tǒng)的分布式式應(yīng)用系統(tǒng)存在明顯的特點(diǎn):
(1)構(gòu)件的可遷移性。支持可遷移構(gòu)件的分布式系統(tǒng),系統(tǒng)配置后,構(gòu)件非靜態(tài)的,它可以根據(jù)系統(tǒng)負(fù)載和可用資源的變化等,遷移至其他目標(biāo)主機(jī)繼續(xù)運(yùn)行。
(2)系統(tǒng)體系的動(dòng)態(tài)性。構(gòu)件的物理位置為動(dòng)態(tài)性,其體系結(jié)構(gòu)自然反映為動(dòng)態(tài)性。
這些特點(diǎn)使得面向圖的軟件體系結(jié)構(gòu)不能完全適應(yīng)可遷移構(gòu)件的需求。需要解決的主要問題有:
(1)如何使得可遷移構(gòu)件的位置變化不影響整個(gè)軟件體系的邏輯結(jié)構(gòu)。
(2)如何保證可遷移構(gòu)件間的可靠通信。
(3)如何保證可遷移構(gòu)件遷移到目標(biāo)主機(jī)后,能在目標(biāo)主機(jī)繼續(xù)從斷點(diǎn)處運(yùn)行。即要保證構(gòu)件的遷移為強(qiáng)遷移。
針對(duì)以上特點(diǎn),如圖1所示,可以采用面向圖的結(jié)構(gòu)刻畫軟件的邏輯結(jié)構(gòu),將構(gòu)件轉(zhuǎn)換為圖節(jié)點(diǎn),連接子轉(zhuǎn)化為圖結(jié)構(gòu)的邊。采用HOME站點(diǎn)與通訊錄向結(jié)合的方式記錄可遷移構(gòu)件的物理節(jié)點(diǎn)并保證系統(tǒng)的可靠通信[3]。這樣實(shí)現(xiàn)了系統(tǒng)的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)向分離。構(gòu)件的移動(dòng)不影響軟件的邏輯體系結(jié)構(gòu)。

圖1 體系結(jié)構(gòu)轉(zhuǎn)化為圖結(jié)構(gòu)
本文所提出的構(gòu)件可遷移的分布式應(yīng)用式系統(tǒng)存在如下假設(shè):系統(tǒng)由分布于網(wǎng)絡(luò)中的一組構(gòu)件組成。構(gòu)件可以由網(wǎng)絡(luò)中一臺(tái)主機(jī)自主遷移到另一臺(tái)主機(jī)。系統(tǒng)服從”fail-stop”形式,一旦構(gòu)件失效,該構(gòu)件將立即停止,并不會(huì)產(chǎn)生任何惡意的行為。
定義1構(gòu)件是由一個(gè)動(dòng)態(tài)變化的對(duì)象集合組成。這些對(duì)象既可以在對(duì)象內(nèi)部也可能是其接口的一部分。構(gòu)件之間可以直接交互。
定義2可遷移構(gòu)件集合為C={Ci},其中i=0…N-1,N為系統(tǒng)中可遷移構(gòu)件數(shù)目。
構(gòu)件可在網(wǎng)絡(luò)中自主的遷移,用(Ci0…Cij…Cim)表示構(gòu)件Ci的遷移集合。Ci0表示構(gòu)件Ci的初始狀態(tài)。Ci0駐留的主機(jī)稱為Home站點(diǎn),記為Mi0。
在該分布式系統(tǒng)中,每個(gè)構(gòu)件可以執(zhí)行內(nèi)部操作,發(fā)送消息send(m),接收消息receive(m)。每個(gè)構(gòu)件具有初始狀態(tài),局部狀態(tài)是由事件序列作用在初始狀態(tài)產(chǎn)生的。事件使得構(gòu)件從一個(gè)局部狀態(tài)轉(zhuǎn)到另一個(gè)局部狀態(tài)。
在MCGOP的基礎(chǔ)上加以擴(kuò)展使得它具有容錯(cuò)功能,我們將該模型稱為MCFGOP(Migratory Component Fault-tolerance GOP)。一個(gè)應(yīng)用系統(tǒng)有一組在一個(gè)“圖”中相互協(xié)作的構(gòu)件和可遷移構(gòu)件組成。這些構(gòu)件分布于INTERNET上,通過圖對(duì)象提供的操作原語相互通信和操作。系統(tǒng)模型示意如圖2所示。
一個(gè)MCFGOP系統(tǒng)由下列部件組成:
(1)一個(gè)圖對(duì)象。圖由一組節(jié)點(diǎn)及其間的有向邊組成。圖的拓?fù)浣Y(jié)構(gòu)體現(xiàn)軟件的體系結(jié)構(gòu)。
(2)一組構(gòu)件。這些構(gòu)件包括可遷移構(gòu)件及不可遷移構(gòu)件組成。這些構(gòu)件通過圖對(duì)象所提供的原語進(jìn)行操作和通信。
(3)一個(gè)通訊錄。通訊錄主要記錄可遷移構(gòu)件的HOME站點(diǎn)、遷移鏈路、當(dāng)前站點(diǎn)及各個(gè)鏈路的檢查點(diǎn)文件等相關(guān)信息。提供可遷移構(gòu)件的尋址、通信及系統(tǒng)出錯(cuò)后的回卷回復(fù)等。
(4)圖節(jié)點(diǎn)與構(gòu)件HOME節(jié)點(diǎn)的映射。并將這個(gè)映射關(guān)系記錄于HOME站點(diǎn)中。這個(gè)映射決定了整個(gè)應(yīng)用系統(tǒng)的初始分布情況。當(dāng)系統(tǒng)構(gòu)件出現(xiàn)遷移時(shí),系統(tǒng)利用通訊錄機(jī)制實(shí)現(xiàn)構(gòu)件的物理定位與通信。
(5)容錯(cuò)部件。容錯(cuò)部件包括失效檢測(cè)與出錯(cuò)后的恢復(fù)。

圖2 MCFGOP模型示意圖
動(dòng)態(tài)配置包括預(yù)期和非預(yù)期式兩種形式,而出錯(cuò)可以認(rèn)為是一種非預(yù)期的非正常情況的動(dòng)態(tài)配置。一般來說,配置是指可以增加、刪除、替換構(gòu)件。面向圖的分布軟件動(dòng)態(tài)配置和容錯(cuò)機(jī)制是基于由用戶指定的或者缺省的映射關(guān)系將表達(dá)分布應(yīng)用結(jié)構(gòu)的邏輯圖部署到底層的物理網(wǎng)絡(luò)實(shí)現(xiàn)的。一方面,面向圖的容錯(cuò)沒有考慮應(yīng)用構(gòu)件為了適應(yīng)環(huán)境、可用資源或者為了提高系統(tǒng)性能等遷移構(gòu)件問題,另一方面,通過用戶指定和缺省進(jìn)行映射分布應(yīng)用的邏輯圖到網(wǎng)絡(luò)站點(diǎn)難以解決允許應(yīng)用構(gòu)件遷移(應(yīng)用構(gòu)件間的邏輯依賴關(guān)系保持不變而只是其駐留物理站點(diǎn)發(fā)生變化)的容錯(cuò)問題。
面向圖結(jié)構(gòu)的動(dòng)態(tài)配置框架,人為干預(yù)的工作較多。通過把感知并記載于通訊錄中的應(yīng)用構(gòu)件間依賴關(guān)系轉(zhuǎn)換為圖形式表達(dá)軟件體系結(jié)構(gòu),提供通訊錄和表達(dá)體系結(jié)構(gòu)的圖的映射。并且借助Home站點(diǎn)使得分布應(yīng)用任意擴(kuò)展增加系統(tǒng)功能。依據(jù)體系結(jié)構(gòu)所具有的高層抽象機(jī)制以及其使能全局推理,結(jié)合通訊錄機(jī)制使得通信對(duì)象知道直接通信對(duì)方,提供分布應(yīng)用程序運(yùn)行支撐平臺(tái);同時(shí)提供系統(tǒng)動(dòng)態(tài)配置框架的可編程API,一方面實(shí)現(xiàn)容錯(cuò)的透明支持,另一方面幫助程序員實(shí)現(xiàn)可容錯(cuò)的應(yīng)用邏輯的編碼,以減少編程人員的編碼工作量。
實(shí)驗(yàn)平臺(tái)采用的linux fedora 5.+JikesRVM 2.4.5,cpu為IA32的Intel p4 2.8G。每個(gè)可遷移構(gòu)件分為兩大模塊,分別為功能模塊與系統(tǒng)檢測(cè)模塊。功能模塊負(fù)責(zé)功能實(shí)現(xiàn)的執(zhí)行體;檢測(cè)模塊負(fù)責(zé)檢測(cè)cpu與內(nèi)存的占用情況,并設(shè)置閥值。一旦在設(shè)定的時(shí)間內(nèi)超過預(yù)先設(shè)定的閥值,則將執(zhí)行體遷移至下一臺(tái)可用主機(jī)中繼續(xù)執(zhí)行。
由于矩陣的計(jì)算量較大、屬于計(jì)算密集類型,可以作為我們的實(shí)驗(yàn)對(duì)象。設(shè)計(jì)一個(gè)簡(jiǎn)化的矩陣(N×N)相乘的實(shí)驗(yàn)方案,矩陣分解算法為:C=[A1T,A2T…][B1,B2,…]。我們假設(shè)計(jì)算矩陣相乘:A*A、B*B、C*C,其中A、B、C大小分別為:640,計(jì)算任務(wù)是計(jì)算A*A、B*B、C*C然后把三個(gè)結(jié)果矩陣中最大元素相加。在數(shù)據(jù)源端(三個(gè)體積不同的矩陣分布在不同站點(diǎn)上)計(jì)算矩陣相乘,計(jì)算構(gòu)件可以感知系統(tǒng)負(fù)載的變化從一個(gè)站點(diǎn)遷移到另一個(gè)站點(diǎn)進(jìn)行矩陣相乘。某一構(gòu)件遷移到其目標(biāo)主機(jī)后,可以人為使主機(jī)失效,容錯(cuò)塊檢測(cè)構(gòu)件失效后,立即觸發(fā)恢復(fù)機(jī)制。為驗(yàn)證MCF-GOP模型的正確性與有效性,為了系統(tǒng)簡(jiǎn)化我們?cè)O(shè)計(jì)如下實(shí)驗(yàn),系統(tǒng)分布網(wǎng)絡(luò)示意圖如圖3所示。

圖3 分布應(yīng)用網(wǎng)絡(luò)結(jié)構(gòu)
我們將計(jì)算A*A的計(jì)算構(gòu)件配置于A域(A域中有三臺(tái)計(jì)算機(jī)組成,計(jì)算構(gòu)件的home站點(diǎn)位于jsj01,計(jì)算構(gòu)件根據(jù)所在計(jì)算機(jī)的內(nèi)存與cpu的占用情況,自主確定是否遷移);計(jì)算B*B的計(jì)算構(gòu)件配置于B域(B域有兩臺(tái)計(jì)算機(jī)組成,jsj04為home站點(diǎn));計(jì)算C*C的計(jì)算構(gòu)件配置于C域。系統(tǒng)的心跳檢測(cè)模塊與容錯(cuò)恢復(fù)模塊置于D域。計(jì)算構(gòu)件在每次遷移之前做一次強(qiáng)檢查點(diǎn),并將檢查點(diǎn)存放在檢查點(diǎn)文件中。為了驗(yàn)證系統(tǒng)的容錯(cuò)性,我們將該實(shí)驗(yàn)分為兩部分:
(1)在構(gòu)件未遷移情況下運(yùn)行。監(jiān)視器如圖4所示。

圖4 構(gòu)件未遷移
(2)系統(tǒng)在運(yùn)行中,當(dāng)計(jì)算構(gòu)件從jsj02遷移至jsj03時(shí),人為將jsj02關(guān)閉,以驗(yàn)證系統(tǒng)的容錯(cuò)性。系統(tǒng)檢測(cè)結(jié)果如圖5,圖6所示。

圖5 遷移構(gòu)件失效前

圖6 遷移構(gòu)件失效后
本文提出了一種面向體系結(jié)構(gòu)的支持構(gòu)件可遷移的容錯(cuò)框架-MCFGOP。使用這種容錯(cuò)框架,應(yīng)用系統(tǒng)可以將軟件體系結(jié)構(gòu)描述為一個(gè)用戶定義的圖和圖上的操作,從而為開發(fā)者提供一種顯式的體系結(jié)構(gòu)。通過一組預(yù)先定義的原語實(shí)現(xiàn)構(gòu)件的通信與操作。通訊錄和home站點(diǎn)機(jī)制提供了構(gòu)件間的透明定位與通信,結(jié)合showdow鏈與分布式檢查點(diǎn)算法可以實(shí)現(xiàn)構(gòu)件的出錯(cuò)后的回卷。
[1]柳穎,陳道蓄,謝立,曹建農(nóng).基于故障敏感圖的回卷算法和故障恢復(fù)[J].軟件學(xué)報(bào),2000,11(2):235-239.
[2]Krivokapic N,Islinger M,Kemper A,et al.Migrating Autonomous Objects in a WAN Environment[J].Journal of Intelligent Information Systems,2000,15(2):221-251.
[3]王忠群,謝曉東.一種基于Java應(yīng)用構(gòu)件動(dòng)態(tài)重定位模型[J].南京大學(xué)學(xué)報(bào),2005,41(2):180-188.
[4]馬曉星,曹建農(nóng),呂建.一種面向圖的分布Web應(yīng)用架構(gòu)技術(shù)[J].計(jì)算機(jī)學(xué)報(bào),2003,26(9):1104-1115.
[5]黃罡,梅宏,楊芙請(qǐng).基于反射式軟件中間件的運(yùn)行時(shí)軟件體系結(jié)構(gòu)[J].中國科學(xué)(E輯),2004,34(2):121-138.
[6]王勇,王忠群,劉濤,吳小蘭.一種支持構(gòu)件遷移的分布式系統(tǒng)容錯(cuò)算法[J].計(jì)算機(jī)工程與設(shè)計(jì),2007(15):3566-3568.