王 勇,盧桂馥,王忠群
(安徽工程大學(xué) 計算機(jī)與信息學(xué)院,蕪湖 241000)
一個基于構(gòu)件的分布式軟件系統(tǒng)由許多同構(gòu)或異構(gòu)的構(gòu)件件組成。近年來已經(jīng)出現(xiàn)了許多新的構(gòu)件技術(shù)和基于構(gòu)件的應(yīng)用平臺,來簡化和加速分布式軟件的構(gòu)建和開發(fā),但目前這些技術(shù)存在一個共同問題,即缺乏工具來描述整個軟件架構(gòu),并根據(jù)特定的需求和運行環(huán)境對系統(tǒng)的軟件構(gòu)件進(jìn)行動態(tài)配置。另外,現(xiàn)有的許多中間件開發(fā)模型和產(chǎn)品大多只關(guān)心網(wǎng)絡(luò)通信和互操作,缺乏對容錯應(yīng)用的支持,從而導(dǎo)致基于中間件開發(fā)容錯應(yīng)用面臨困境,因為基于中間件開發(fā)應(yīng)用必須遵照中間件的開發(fā)模式來實現(xiàn),如果中間件不提供容錯支持,則開發(fā)者必須自己實現(xiàn)容錯邏輯,這樣導(dǎo)致應(yīng)用邏輯和容錯邏輯混合在一起,增加了開發(fā)者的工作難度。
我們針對為了適應(yīng)因特網(wǎng)環(huán)境可用資源變化而可動態(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á)動態(tài)變化的體系結(jié)構(gòu),利用分布檢查點技術(shù)和Home站點,實現(xiàn)能夠適應(yīng)因特網(wǎng)環(huán)境的資源動態(tài)變化的構(gòu)件遷移、動態(tài)配置以及出錯恢復(fù)的容錯框架。
軟件體系結(jié)構(gòu)是軟件系統(tǒng)的一種抽象描述。近年來人們對軟件體系結(jié)構(gòu)進(jìn)行了大量的研究,集中體現(xiàn)在各種體系結(jié)構(gòu)描述語言(ADL)及其支持系統(tǒng),然而現(xiàn)有的軟件體系結(jié)構(gòu)描述語言及其支撐系統(tǒng)大多針對相對靜態(tài)的體系結(jié)構(gòu),對internet環(huán)境下的應(yīng)用,不能保證系統(tǒng)初始結(jié)構(gòu)符合要求,還要管理和控制系統(tǒng)結(jié)構(gòu)的動態(tài)演化,即在可追溯性和動態(tài)性上尚存在不足。南京大學(xué)馬嘵星等提出了一種面向圖的WEB架構(gòu)技術(shù)[4],北京大學(xué)黃罡等提出一種面向體系結(jié)構(gòu)的反射中間件系統(tǒng),他們將軟件體系結(jié)構(gòu)顯式表示,使得軟件體系結(jié)構(gòu)具有可追溯性和自省性。但他們沒有考慮構(gòu)件的可移動性。針對現(xiàn)狀,我們進(jìn)一步研究了滿足可追溯性和動態(tài)性的面向圖的具有自省的并支持構(gòu)件可遷移的動態(tài)軟件體系結(jié)構(gòu)。
支持可遷移構(gòu)件分布式應(yīng)用與傳統(tǒng)的分布式式應(yīng)用系統(tǒng)存在明顯的特點:
(1)構(gòu)件的可遷移性。支持可遷移構(gòu)件的分布式系統(tǒng),系統(tǒng)配置后,構(gòu)件非靜態(tài)的,它可以根據(jù)系統(tǒng)負(fù)載和可用資源的變化等,遷移至其他目標(biāo)主機(jī)繼續(xù)運行。
(2)系統(tǒng)體系的動態(tài)性。構(gòu)件的物理位置為動態(tài)性,其體系結(jié)構(gòu)自然反映為動態(tài)性。
這些特點使得面向圖的軟件體系結(jié)構(gòu)不能完全適應(yīng)可遷移構(gòu)件的需求。需要解決的主要問題有:
(1)如何使得可遷移構(gòu)件的位置變化不影響整個軟件體系的邏輯結(jié)構(gòu)。
(2)如何保證可遷移構(gòu)件間的可靠通信。
(3)如何保證可遷移構(gòu)件遷移到目標(biāo)主機(jī)后,能在目標(biāo)主機(jī)繼續(xù)從斷點處運行。即要保證構(gòu)件的遷移為強遷移。
針對以上特點,如圖1所示,可以采用面向圖的結(jié)構(gòu)刻畫軟件的邏輯結(jié)構(gòu),將構(gòu)件轉(zhuǎn)換為圖節(jié)點,連接子轉(zhuǎn)化為圖結(jié)構(gòu)的邊。采用HOME站點與通訊錄向結(jié)合的方式記錄可遷移構(gòu)件的物理節(jié)點并保證系統(tǒng)的可靠通信[3]。這樣實現(xiàn)了系統(tǒng)的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)向分離。構(gòu)件的移動不影響軟件的邏輯體系結(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ò)中一臺主機(jī)自主遷移到另一臺主機(jī)。系統(tǒng)服從”fail-stop”形式,一旦構(gòu)件失效,該構(gòu)件將立即停止,并不會產(chǎn)生任何惡意的行為。
定義1構(gòu)件是由一個動態(tài)變化的對象集合組成。這些對象既可以在對象內(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站點,記為Mi0。
在該分布式系統(tǒng)中,每個構(gòu)件可以執(zhí)行內(nèi)部操作,發(fā)送消息send(m),接收消息receive(m)。每個構(gòu)件具有初始狀態(tài),局部狀態(tài)是由事件序列作用在初始狀態(tài)產(chǎn)生的。事件使得構(gòu)件從一個局部狀態(tài)轉(zhuǎn)到另一個局部狀態(tài)。
在MCGOP的基礎(chǔ)上加以擴(kuò)展使得它具有容錯功能,我們將該模型稱為MCFGOP(Migratory Component Fault-tolerance GOP)。一個應(yīng)用系統(tǒng)有一組在一個“圖”中相互協(xié)作的構(gòu)件和可遷移構(gòu)件組成。這些構(gòu)件分布于INTERNET上,通過圖對象提供的操作原語相互通信和操作。系統(tǒng)模型示意如圖2所示。
一個MCFGOP系統(tǒng)由下列部件組成:
(1)一個圖對象。圖由一組節(jié)點及其間的有向邊組成。圖的拓?fù)浣Y(jié)構(gòu)體現(xiàn)軟件的體系結(jié)構(gòu)。
(2)一組構(gòu)件。這些構(gòu)件包括可遷移構(gòu)件及不可遷移構(gòu)件組成。這些構(gòu)件通過圖對象所提供的原語進(jìn)行操作和通信。
(3)一個通訊錄。通訊錄主要記錄可遷移構(gòu)件的HOME站點、遷移鏈路、當(dāng)前站點及各個鏈路的檢查點文件等相關(guān)信息。提供可遷移構(gòu)件的尋址、通信及系統(tǒng)出錯后的回卷回復(fù)等。
(4)圖節(jié)點與構(gòu)件HOME節(jié)點的映射。并將這個映射關(guān)系記錄于HOME站點中。這個映射決定了整個應(yīng)用系統(tǒng)的初始分布情況。當(dāng)系統(tǒng)構(gòu)件出現(xiàn)遷移時,系統(tǒng)利用通訊錄機(jī)制實現(xiàn)構(gòu)件的物理定位與通信。
(5)容錯部件。容錯部件包括失效檢測與出錯后的恢復(fù)。
圖2 MCFGOP模型示意圖
動態(tài)配置包括預(yù)期和非預(yù)期式兩種形式,而出錯可以認(rèn)為是一種非預(yù)期的非正常情況的動態(tài)配置。一般來說,配置是指可以增加、刪除、替換構(gòu)件。面向圖的分布軟件動態(tài)配置和容錯機(jī)制是基于由用戶指定的或者缺省的映射關(guān)系將表達(dá)分布應(yīng)用結(jié)構(gòu)的邏輯圖部署到底層的物理網(wǎng)絡(luò)實現(xiàn)的。一方面,面向圖的容錯沒有考慮應(yīng)用構(gòu)件為了適應(yīng)環(huán)境、可用資源或者為了提高系統(tǒng)性能等遷移構(gòu)件問題,另一方面,通過用戶指定和缺省進(jìn)行映射分布應(yīng)用的邏輯圖到網(wǎng)絡(luò)站點難以解決允許應(yīng)用構(gòu)件遷移(應(yīng)用構(gòu)件間的邏輯依賴關(guān)系保持不變而只是其駐留物理站點發(fā)生變化)的容錯問題。
面向圖結(jié)構(gòu)的動態(tài)配置框架,人為干預(yù)的工作較多。通過把感知并記載于通訊錄中的應(yīng)用構(gòu)件間依賴關(guān)系轉(zhuǎn)換為圖形式表達(dá)軟件體系結(jié)構(gòu),提供通訊錄和表達(dá)體系結(jié)構(gòu)的圖的映射。并且借助Home站點使得分布應(yīng)用任意擴(kuò)展增加系統(tǒng)功能。依據(jù)體系結(jié)構(gòu)所具有的高層抽象機(jī)制以及其使能全局推理,結(jié)合通訊錄機(jī)制使得通信對象知道直接通信對方,提供分布應(yīng)用程序運行支撐平臺;同時提供系統(tǒng)動態(tài)配置框架的可編程API,一方面實現(xiàn)容錯的透明支持,另一方面幫助程序員實現(xiàn)可容錯的應(yīng)用邏輯的編碼,以減少編程人員的編碼工作量。
實驗平臺采用的linux fedora 5.+JikesRVM 2.4.5,cpu為IA32的Intel p4 2.8G。每個可遷移構(gòu)件分為兩大模塊,分別為功能模塊與系統(tǒng)檢測模塊。功能模塊負(fù)責(zé)功能實現(xiàn)的執(zhí)行體;檢測模塊負(fù)責(zé)檢測cpu與內(nèi)存的占用情況,并設(shè)置閥值。一旦在設(shè)定的時間內(nèi)超過預(yù)先設(shè)定的閥值,則將執(zhí)行體遷移至下一臺可用主機(jī)中繼續(xù)執(zhí)行。
由于矩陣的計算量較大、屬于計算密集類型,可以作為我們的實驗對象。設(shè)計一個簡化的矩陣(N×N)相乘的實驗方案,矩陣分解算法為:C=[A1T,A2T…][B1,B2,…]。我們假設(shè)計算矩陣相乘:A*A、B*B、C*C,其中A、B、C大小分別為:640,計算任務(wù)是計算A*A、B*B、C*C然后把三個結(jié)果矩陣中最大元素相加。在數(shù)據(jù)源端(三個體積不同的矩陣分布在不同站點上)計算矩陣相乘,計算構(gòu)件可以感知系統(tǒng)負(fù)載的變化從一個站點遷移到另一個站點進(jìn)行矩陣相乘。某一構(gòu)件遷移到其目標(biāo)主機(jī)后,可以人為使主機(jī)失效,容錯塊檢測構(gòu)件失效后,立即觸發(fā)恢復(fù)機(jī)制。為驗證MCF-GOP模型的正確性與有效性,為了系統(tǒng)簡化我們設(shè)計如下實驗,系統(tǒng)分布網(wǎng)絡(luò)示意圖如圖3所示。
圖3 分布應(yīng)用網(wǎng)絡(luò)結(jié)構(gòu)
我們將計算A*A的計算構(gòu)件配置于A域(A域中有三臺計算機(jī)組成,計算構(gòu)件的home站點位于jsj01,計算構(gòu)件根據(jù)所在計算機(jī)的內(nèi)存與cpu的占用情況,自主確定是否遷移);計算B*B的計算構(gòu)件配置于B域(B域有兩臺計算機(jī)組成,jsj04為home站點);計算C*C的計算構(gòu)件配置于C域。系統(tǒng)的心跳檢測模塊與容錯恢復(fù)模塊置于D域。計算構(gòu)件在每次遷移之前做一次強檢查點,并將檢查點存放在檢查點文件中。為了驗證系統(tǒng)的容錯性,我們將該實驗分為兩部分:
(1)在構(gòu)件未遷移情況下運行。監(jiān)視器如圖4所示。
圖4 構(gòu)件未遷移
(2)系統(tǒng)在運行中,當(dāng)計算構(gòu)件從jsj02遷移至jsj03時,人為將jsj02關(guān)閉,以驗證系統(tǒng)的容錯性。系統(tǒng)檢測結(jié)果如圖5,圖6所示。
圖5 遷移構(gòu)件失效前
圖6 遷移構(gòu)件失效后
本文提出了一種面向體系結(jié)構(gòu)的支持構(gòu)件可遷移的容錯框架-MCFGOP。使用這種容錯框架,應(yīng)用系統(tǒng)可以將軟件體系結(jié)構(gòu)描述為一個用戶定義的圖和圖上的操作,從而為開發(fā)者提供一種顯式的體系結(jié)構(gòu)。通過一組預(yù)先定義的原語實現(xiàn)構(gòu)件的通信與操作。通訊錄和home站點機(jī)制提供了構(gòu)件間的透明定位與通信,結(jié)合showdow鏈與分布式檢查點算法可以實現(xiàn)構(gòu)件的出錯后的回卷。
[1]柳穎,陳道蓄,謝立,曹建農(nóng).基于故障敏感圖的回卷算法和故障恢復(fù)[J].軟件學(xué)報,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)件動態(tài)重定位模型[J].南京大學(xué)學(xué)報,2005,41(2):180-188.
[4]馬曉星,曹建農(nóng),呂建.一種面向圖的分布Web應(yīng)用架構(gòu)技術(shù)[J].計算機(jī)學(xué)報,2003,26(9):1104-1115.
[5]黃罡,梅宏,楊芙請.基于反射式軟件中間件的運行時軟件體系結(jié)構(gòu)[J].中國科學(xué)(E輯),2004,34(2):121-138.
[6]王勇,王忠群,劉濤,吳小蘭.一種支持構(gòu)件遷移的分布式系統(tǒng)容錯算法[J].計算機(jī)工程與設(shè)計,2007(15):3566-3568.