SOA复杂网络系统可靠性评估

2019-11-18 05:23
计算机技术与发展 2019年11期
关键词:系统可靠性调用可靠性

费 琪

(江苏自动化研究所,江苏 连云港 222061)

0 引 言

SOA系统往往是由数量巨大的用户、业务、服务集成的庞大系统,由于不同用户的需求多样,使得SOA系统的结构与运行机理呈现出复杂性[1]。具体表现为:为完成一项用户请求的业务,系统中服务与服务之间需要并存在通信与互操作[2-3];根据用户需求,业务与业务之间也存在相互协作;作为SOA的一大优势(节省成本),服务可以被不同业务重复使用;随着时间的推移,用户数量的增长以及业务范围的扩大,越来越多的服务会被加入,使得系统越来越庞大[4];若干SOA子系统可以组合为一个更为庞大的系统[5-6]。

目前对复杂系统进行可靠性建模并进行可靠性评价存在很大的困难,传统的可靠性建模与分析方法如可靠性框图方法(RBD)、故障模式与影响分析方法(FMECA)、故障树分析方法(FTA)[7]等受限于系统规模,往往针对系统的静态结构进行建模分析,同时很难顾及发生在系统上的复杂动力学行为对系统造成的影响[8-9]。

文中针对复杂网络系统可靠性评估的研究框架如图1所示。

图1 整体研究框架

1 SOA复杂网络可靠性模型构建

BPEL流程在执行过程中会在不同的操作中进行转换,在WSDL中描述了一个服务所包含的操作,BPEL中描述操作时,会指明此操作的parternerlink及porttype,也即指明此操作归属的服务。因此要获取服务与服务间的关系,只需获取操作间的关系即可。

通过对BPEL规范进行分析,BPEL由8种原子类型活动(receive,reply,invoke,assign,throw,exit,wait,emty)[10]和8种结构类型的活动(sequence,if,pick,flow,while,repeatUntil,forEach,scope)[11]组成,其中assign为使用新的数据对变量的值进行更新;emty,wait,throw和exit为业务流程处理中的活动。这5个原子类型的活动既没有Web服务与之对应也没有结构化的特征,因此不予考虑。receive活动和reply活动为一个请求-应答流程,构成了WSDL中的请求-响应操作,invoke活动主要是业务流程调用由伙伴在porttype上提供的单向请求操作,即invoke活动对应于一个服务的执行需调用外界服务。invoke活动表示服务与服务之间的相互调用关系。

在BPEL的8个结构化活动中,sequence,if,while,repeatUntil和序列化的forEach活动提供活动之间的一般顺序控制;flow和并行化的forEach活动则提供活动之间的并发和同步控制;pick提供基于外部事件的不确定的选择。

sequence活动包含一个或多个需要顺序执行的操作;if活动和pick活动提供了选择控制操作;flow活动提供了多个操作的同步与并发;while活动为特定的操作重复执行,直至条件与while判定条件不符合才终止;repeatUntil活动为执行一次它所包含的活动后,再重复执行此操作,直至条件与repeatUntil判定条件不符合才终止;scope活动提供一个执行顺序对包含在其中的活动;forEach活动将所包含的scope活动执行N+1次,其中N为常数。

由上述分析可知,从一个BPEL获取操作对应的原子活动为:receive及invoke;操作间的关系取决于结构化活动描述,主要包含如下两种:顺序执行(sequence)、并行执行(处于并列地位的操作)(if、pick、flow),而while活动、repeatUntil无非是将上述结构化活动重复执行,scope与forEach活动类似,从获取操作间的关系考虑,可以忽略重复执行。

定义1:SOA复杂网络可靠性模型为(S,R),其中S=(S1,S2,…,Sn),表示服务的向量集合,Si表示第i个服务;

表示服务间的依赖关系,其中Rij表示服务Si与服务Sj间的相互调用关系,Rij的取值范围为{-1,0,1,2}。Rij=-1表示服务Sj调用服务Si;Rij=0表示服务Si与服务Sj相互间无关联;Rij=1表示服务Si调用服务Sj;Rij=2表示服务Si与服务Sj间相互调用。

定义2:操作符⊕为关系模型和算子,定义如下:

其中,a、b的取值范围为{-1,0,1,2}。

由上述定义可知,关系模型和算子⊕符合交换律及结合律:

交换律:a⊕b=b⊕a;

结合律:a⊕b⊕c=a⊕(b⊕c)。

获取SOA复杂网络可靠性模型算法如下:

Step1:获取SOA架构复杂网络系统中所有的WSDL文件,每个WSDL对应一个服务,从而获取SOA网络模型中的服务向量集合S,针对每个WSDL文件获取各服务下所含的operation。

Step2:对服务间的依赖关系进行初始化,R=0表示各服务相互间无依赖关系。

Step3:对第一个BPEL进行遍历,获取BPEL文件所涵盖操作及操作归属服务间的依赖关系。

操作获取主要通过读取BPEL中的receive原子活动及invoke活动所调用的操作,通过partnerlink及porttype获取操作所归属的服务。操作间的关系主要通过读取BPEL中的sequence及if、pick、flow结构活动进行获取,从结构图的角度进行考虑,无外乎图2~图4几种结构。

图2 单顺序结构

图3 单并列结构

图4 混合结构

对于图2,依据服务间关系定义可知:R(op1,op2)=-1,R(op2,op3)=-1;对于图3,op1,op2,op3相互间不存在调用,故相互间依赖关系值为0;对于图4可知:R(op1,op2)=-1,R(op1,op3)=-1,R(op2,op4)=-1,R(op3,op5)=-1,R(op4,op5)=-1。

依据Step1及Step3获取操作所对应的服务,并分别将结构图中的操作修正为服务,从而可获取服务与服务间的依赖关系,并更新步骤2中的R,R=R1。

Step4:对SOA架构复杂网络系统中所有的BPEL类似于Step3进行遍历,获取由每个BPEL获取的服务与服务间的依赖关系,即R2,R3,…,Rn。

Step5:SOA复杂网络可靠性模型中的服务间依赖关系为R=R1⊕R2⊕…⊕Rn。

经Step1~Step5即可构建出SOA复杂网络可靠性模型。

2 SOA复杂网络可靠性脆弱性分析

解决网络可靠问题的有效方法为对网络进行脆弱性分析[12]。在简单网络拓扑图中,单个网络节点是可靠的,但在复杂网络环境下,单个网络节点不一定可靠,因此单节点可靠,不代表整个网络可靠。通过对复杂网络环境进行网络脆弱性分析可以评估网络整体的可靠性[13-14]。SOA架构的软件往往服务节点数多、结构复杂,因此通过对SOA复杂网络进行脆弱性分析找到影响系统的关键节点,提高关键节点的可靠度从而可提高系统的可靠度。

2.1 可靠性模型静态信息度量

影响系统的脆弱性参数有很多,例如介数、出度、入度等[13],文中选取节点的出度来衡量节点的重要程度。节点的出度越大,表明调用该节点的节点个数越多,因此该节点的可靠性更易影响系统的可靠度。

由第1节获取的服务间依赖关系R可计算出各服务的出度,如服务Si的出度计算公式为:矩阵R的第i行大于0的个数。

2.2 可靠性模型动态分析—故障相关性的脆弱性分析

在考虑复杂网络故障相关性的脆弱性分析工作中,依次对各服务注入故障,采用蒙特卡洛仿真实验对系统的动态过程进行计算机仿真,观察此服务的故障对系统最终造成的影响。该方法采用的评价指标为系统中受影响的服务的数目(或比例),且假设各服务间调用概率已知。

故障相关性脆弱性分析算法如下:

Step1:对服务Si注入故障,即假设服务Si节点运行不正常。

Step2:对调用服务Si的所有节点进行故障传播仿真实验。假设P(Si,Sj)≤Random(0,1)表示服务Si故障不能传播到服务Sj,P(Si,Sj)>Random(0,1)表示服务Si故障能传播到服务Sj,若Si故障传播到服务Sj,则继续对服务Sj做故障传播仿真实验,直至当前故障节点后续无节点或通过仿真实验当前故障节点不能传播到调用其服务的节点为止。计算服务Si所影响到的服务个数。为更好地仿真系统实际运行,重复Step2实验n次,对n次实验服务Si所影响到的服务个数求和并取平均值即可得到服务Si所影响到的服务个数。(P(Si,Sj)表示服务Sj调用服务Si的概率,Random(0,1)表示在(0,1)间的随机生成数)

Step3:对所有的服务做Step2实验,对各服务所影响的服务个数进行排序,服务故障所影响的服务个数越多,表明此服务在SOA系统中越关键,需提高其可靠度。

故障相关性的脆弱性分析流程如图 5所示。

3 SOA复杂网络系统可靠性评估

目前主要是通过建立剖面,对软件进行测试,获取失效数据,选取可靠性模型,从而得到系统可靠度。针对复杂网络系统,因其系统大,测试耗费时间较长,对其组成的各服务经过测试,可利用传统可靠性评估方法获取各服务的可靠度,利用各服务的可靠度结合复杂网络可靠性评估模型可求得系统可靠度。该方法相比传统可靠性评估方法所得结果精确、耗费时间少。

复杂网络系统可靠性评估输入为:复杂网络系统可靠性模型、复杂网络系统各服务可靠度、复杂网络系统各服务间调用概率;输出为:复杂网络系统可靠度。该方法假设复杂网络系统各服务可靠度已通过传统可靠性评估方法求得;复杂网络系统各服务间调用概率已知。

图5 故障相关性脆弱性分析

复杂网络系统可靠性评估算法如下:

Step1:在构建的复杂网络系统可靠性模型基础上,根据各服务的可靠度,通过蒙特卡洛仿真实验获取系统失效的服务,即得到系统的故障源。

Step2:利用2.2节“故障相关性的脆弱性分析方法”获取Step1中系统故障源所影响的服务个数,计算所影响服务个数所占比例G。

Step4:对Step1~Step3重复n次,记录系统运行失效的次数为nf。

复杂网络系统可靠性评估流程如图6所示。

图6 复杂网络系统可靠性评估流程

4 应用验证

以在某SOA项目测试中的模型为依据说明文中方法的有效性。该SOA系统由5个服务节点组成,基于WSDL文件及BPEL文件构建出的可靠性模型如图7所示。

图7 某项目SOA可靠性模型

假设服务A、B、C、D、E间调用关系服从等概率事件:即在调用关系图中,任一服务调用其他服务概率相等。则服务A故障传播到服务B的概率为1/2,服务A故障传播到服务C的概率为1,服务A故障传播到服务D的概率为1,服务A故障传播到服务E的概率为1/3;服务C故障传播到服务E的概率为1/3;服务D故障传播到服务B的概率为1/2,服务D故障传播到服务E的概率为1/3。

依据2.1 “可靠性模型静态信息度量”,求得各服务的出度,如表1所示。

表1 服务出度度量

依据2.2“可靠性模型动态分析—故障相关性的脆弱性分析”对上述模型进行仿真实验,各节点仿真1 000次,求得的各节点故障后平均影响的服务数如表2所示。

表2 服务脆弱性分析

服务B及服务E后继无节点,故二者故障后,平均影响的服务数为自身,结合服务的出度及服务故障传播所影响的服务数,可定性地认为服务重要程度排序为:服务A>服务D>服务C>服务B(服务E)。如果要提升系统的可靠性,首先需保障服务A的可靠度足够大。

假设服务A的可靠度为0.98,服务B的可靠度为0.95,服务C的可靠度为0.89,服务D的可靠度为0.85,服务E的可靠度为0.8,利用第3节“复杂网络系统可靠性评估”所求得的可靠度曲线如图8所示。

图8 系统可靠度

由图8可知,所有服务故障时才算系统失效,对应的系统可靠度趋近于1,所有服务正常才算系统正常,对应的系统可靠度接近于0。

5 结束语

文中给出了基于复杂网络系统可靠性评估方法,首先通过分析SOA架构系统软件的WSDL文件及BPEL文件构建可靠性模型;其次通过对可靠性模型进行静态信息度量及动态故障传播,获取对复杂网络系统可靠性影响程度由高到低的节点排序;最后通过系统仿真实验给出SOA架构软件的可靠度计算方法。

猜你喜欢
系统可靠性调用可靠性
基于AK-IS法的航空齿轮泵滑动轴承可靠性分析
大口径舰炮弹药储供系统可靠性研究
某重卡线束磨损失效分析与可靠性提升
讨论如何提高建筑电气设计的可靠性和经济性
公路山岭隧道施工期衬砌及结构系统可靠性研究
系统虚拟化环境下客户机系统调用信息捕获与分析①
GO-FLOW法在飞机EHA可靠性分析中的应用
智能变电站继电保护系统可靠性分析
基于属性数据的系统调用过滤方法
利用RFC技术实现SAP系统接口通信