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

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

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

圖3 分布應用網絡結構
我們將計算A*A的計算構件配置于A域(A域中有三臺計算機組成,計算構件的home站點位于jsj01,計算構件根據所在計算機的內存與cpu的占用情況,自主確定是否遷移);計算B*B的計算構件配置于B域(B域有兩臺計算機組成,jsj04為home站點);計算C*C的計算構件配置于C域。系統的心跳檢測模塊與容錯恢復模塊置于D域。計算構件在每次遷移之前做一次強檢查點,并將檢查點存放在檢查點文件中。為了驗證系統的容錯性,我們將該實驗分為兩部分:
(1)在構件未遷移情況下運行。監視器如圖4所示。

圖4 構件未遷移
(2)系統在運行中,當計算構件從jsj02遷移至jsj03時,人為將jsj02關閉,以驗證系統的容錯性。系統檢測結果如圖5,圖6所示。

圖5 遷移構件失效前

圖6 遷移構件失效后
本文提出了一種面向體系結構的支持構件可遷移的容錯框架-MCFGOP。使用這種容錯框架,應用系統可以將軟件體系結構描述為一個用戶定義的圖和圖上的操作,從而為開發者提供一種顯式的體系結構。通過一組預先定義的原語實現構件的通信與操作。通訊錄和home站點機制提供了構件間的透明定位與通信,結合showdow鏈與分布式檢查點算法可以實現構件的出錯后的回卷。
[1]柳穎,陳道蓄,謝立,曹建農.基于故障敏感圖的回卷算法和故障恢復[J].軟件學報,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應用構件動態重定位模型[J].南京大學學報,2005,41(2):180-188.
[4]馬曉星,曹建農,呂建.一種面向圖的分布Web應用架構技術[J].計算機學報,2003,26(9):1104-1115.
[5]黃罡,梅宏,楊芙請.基于反射式軟件中間件的運行時軟件體系結構[J].中國科學(E輯),2004,34(2):121-138.
[6]王勇,王忠群,劉濤,吳小蘭.一種支持構件遷移的分布式系統容錯算法[J].計算機工程與設計,2007(15):3566-3568.