王 勇,卢桂馥,王忠群
(安徽工程大学 计算机与信息学院,芜湖 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.