APP下载

Web服务组合可适配性自动判定研究

2021-02-28

小型微型计算机系统 2021年10期
关键词:适配器语义算法

张 驰

(江西财经大学 软件与物联网工程学院,南昌 330013)

1 引 言

面向服务的计算以可复用的Web服务为基本构造单元,为解决分布式应用系统集成提供了新的计算范型[1].由于单个服务功能有限,一般不能提供完整的解决方案,为实现复杂的业务逻辑,必须对服务进行组合[2].组合的Web服务之间相互兼容才能保证服务正确交互,然后,在开放环境下组合的Web服务往往由众多不同的开发者提供,这导致Web服务在接口描述、功能实现、运行行为上存在广泛的异构性,这种异构性导致提供的服务无法直接集成,造成虽有大量的Web服务存在但实际可复用性较差,严重阻碍了面向服务计算技术的推广和应用.

Web服务适配为解决这一问题提供了可行的方法,成为推动和实施面向服务软件应用的关键技术[3].通过非介入方式构造一个被称为适配器的第三方服务,对不兼容的服务进行消息的缓存、拦截、转换、提取、合并等处理手段来消除服务间的不兼容从而保证服务间的正确交互.

Web服务适配并不能保证解决所有失配问题,因而,在没有预先的可适配性分析前提下Web服务适配总会面临失败的风险,可适配性分析则是用于在适配之前判断适配的可行性,防止进行无谓适配的一种技术.

本文首先构建包含语法、语义和行为信息的SxSTS(Semantic extended Symbolic Transition System)模型全面准确刻画Web服务,然后基于本体概念兼容建立参数之间的映射关系,在此基础上自动生成动作映射关系,通过检查所有发送动作是否都有对应接收动作以及所有接收动作中不存在缺失参数来判定组合服务的可适配性.该方法对大规模Web服务组合的可适配性判定具有重要的意义.

2 相关工作

Web服务组合可适配性分析的任务是检测导致服务失配的问题能否通过适配器解决.到目前为止,Web服务组合可适配性分析并未取得系统化成果,一些研究成果将Web服务组合可适配性分析隐含于适配器生成或正确性验证中[4-14],文献[4,5]提出基于LTS模型的适配器生成与正确性验证方法;文献[6,7]采用自动机模型研究了行为层适配器的生成;文献[8]采用CSP模型描述Web服务行为,将协作流程转换为协作子流程,检查服务是否可以通过适配机制满足兼容性要求,同时给出了适配器自动生成算法;文献[9,10]采用PI演算对服务的行为描述,采用1-1、1-n、n-1、1-0、0-1、m-n 这5种动作映射,基于PI 演算生成符合动作映射要求的适配器规约;文献[11]引入了失配模式,每种失配对应相应适配逻辑,利用面向方面的编程技术把适配逻辑作为适配方面织入到需适配的Web服务实例中,而不是生成一个独立的适配器.文献[12]将动作映射表示为同步向量,并人工设计同步向量的时序关系作为适配契约,提出了基于LTS的动态服务适配方法.文献[13]在组合和适配中将环境变化因素显式建模.上述方法在适配时只考虑了Web服务行为的控制流信息,没有考虑服务接口动作中的数据流信息,而且动作映射都是通过人工生成,自动化程度较低,上述文献中主要讨论了行为层适配器的构造方法,对于可适配性并未深入讨论.

可适配性判定是对Web服务能否通过适配实现正常交互可行性的确认,而适配器正确性验证是对生成的适配器是否满足期望的能力的验证.即前者是对未知结果的预测,后者是对结果能力的验证,所以严格来讲,后者不等同于服务组合可适配性.Tan首次明确提出了行为可适配分析的概念[14],通过构建交互服务的通信可达图来进行行为可适配性分析.该方法依赖于交互服务的通信可达图,在服务规模较大时,仍可能导致状态空间爆炸问题.文献[3]提出基于组件服务流网可达图的行为可适配分析方法,可有效避免状态空间爆炸问题,但没有考虑数据流信息,动作映射需要人工生成,未能解决可适配性自动判定问题.

3 Web服务模型SxSTS

在Web服务中,消息作为通信数据的抽象类型化定义,一般有一个或者多个消息参数.

定义1.(消息)消息是一个参数序列m=,1≤i≤n,pi表示Web服务中的接口参数.对于发送消息来说是实参,对于接收消息来说为形参.

可用PL表示参数的集合,对于消息m,使用var(m)表示消息m的参数集合,若m=,则var(m)={p1,…,pn}⊆PL.对每个参数来说,既具有数据类型,也具有语义本体的概念.定义2给出了既包含语法层又包含语义层信息的Web服务语义接口的概念.

定义2.(语义接口)Web服务的语义接口是一个五元组WSS=(PL,M,ACT,type,conpt),满足如下条件:

1)PL是服务的参数集合;

2)M是服务的消息集合,满足PL=var(M),var(M)=∪m∈Mvar(m);

3)ACT是服务上的动作集合,一个动作act∈ACT,动作act可以是内部动作τ,也可以是外部可见动作(d,n,m)满足:d∈{!,?}表明动作的方向,“!”表示发送,“?”表示接收,n表示动作名,m∈M表示消息;

4)映射type:PL→DT是一个函数,表示每个参数的数据类型,其中PL是参数集合,DT是一个 XML数据类型集合;

5)conpt:PL→IC表示每个参数的概念,IC是共享本体的概念集;

消息的类型和消息的概念可用参数数据类型和概念的联合来表示,对∀m=∈M,消息的类型用type(m)表示,即:type(m)=(type(p1),…,type(pn)),消息m的概念用conpt(m)表示,即:conpt(m)=(conpt(p1),…,conpt(pn))=(C1,…,Cn),其中conpt(pi)=Ci,pi∈PL,Ci∈IC,i∈(1,…,n).

Web服务中的动作之间的时序关系称为其行为协议,通过STS模型来描述Web服务的接口语法及接口动作之间的时序关系,STS模型的操作语义见文献[15],在STS模型的基础上添加了参数的语义本体概念信息,形成SxSTS模型涵盖了Web服务的语法、语义和行为协议层的信息,形成了对Web服务精准的刻画.SxSTS是图形化的工具,简单直观、易于理解,且有成熟的语义基础和工具支持.

定义3.(SxSTS模型)一个Web服务的SxSTS模型可以表示为六元组SxSTS=(S,I,F,ACT,T,fC),其中:

1)S表示状态的集合;

2)I∈S表示初态;

3)F⊆S表示终态的集合;

4)ACT表示动作的集合,ACT=τ∪ACT!∪ ACT?,其中ACT!表示发送动作集合,ACT?表示接收动作集合;

5)T⊆S×ACT×S表示变迁的集合;

6)fC:M→C是消息集合M到本体概念集合C的映射函数.

4 失配分析

Web服务组合的系统每次交互总是由发送方发出请求动作,发送动作的执行最终会导致对偶的接收动作的执行,若没有发送动作的执行对偶的接收动作永远也不会执行.所谓对偶的动作是指发送动作和接收动作名称相同,方向相反,并且动作中的参数顺序、个数、类型以及语义兼容.

组合服务执行时每个SxSTS模型从初态开始,在每个全局状态下,所有的发送动作都有对应的接收动作,直到所有的SxSTS都到达了自己的终态表明系统兼容.然后,在开放环境下组合的Web服务往往由众多不同的开发者提供,这导致Web服务在参数声明、动作命名、动作粒度、动作时序等方面存在不同的差异,从而导致系统不兼容而不能正确交互.

语法层的失配包含参数的失配和动作失配两个方面,其中在参数层可能会出现如下失配情形:

·参数冗余:发送动作中的实参在接收动作中无对应的形参;

·参数缺失:接收动作中的形参在发送动作中无对应的实参;

·参数顺序不同:发送动作中实参顺序和接收动作中形参顺序不同

·参数类型不同:发送动作中实参和对应的接收动作中的形参类型不同;

·参数语义不同:发送动作中的实参和接收动作中的形参概念不同.

在动作层可能出现如下失配情形:

·动作命名不同:发送动作和接收动作命名不同;

·接收动作缺失1-0:发送动作无对应接收动作;

·接收动作冗余0-1:接收动作无对应发送动作;

·动作拆分1-n:一个发送动作对应多个接收动作;

·动作合并m-1:一个接收动作对应多个发送动作;

在行为层可能出现每个发送动作都有相应接收动作,但发送动作和接收动作的时序不同.

上述各种差异中有的差异可以通过适配器的缓存、拦截、转换、提取、合并等处理手段进行协调,但适配器不能“无中生有”,有的差异适配器是无法解决的.比如接收参数缺失和接收动作缺失,众所周知,Web服务组合中动作是交互的原子单位,在某个状态下一个发送动作需要发送但没有对应的接收动作则该发送动作无法执行而导致死锁.对于一个要执行的接收动作而言,如果其中的形参没有对应的实参对其赋值该接收动作也无法执行.

尽管可适配性分析并不能保证适配一定能够成功,比如对于动作的失序失配只能在适配过程中判定适配是否成功,但能够尽早发现明显不可适配的情形,避免进行无谓的适配计算.

5 动作自动映射

动作映射是可适配性分析的基础,针对当前动作映射主要通过人工生成,工作量大且容易出错,基于类型的动作映射生成方法准确性低,会产生大量的错误映射,要解决Web服务组合自动可适配性判定必须解决动作映射的自动生成并且保证动作映射的准确性.本文利用参数概念兼容性首先建立参数之间的映射关系,然后合并参数形成动作,根据参数映射关系建立动作之间的映射关系,最后剔除因委托调用而产生的冗余动作,动作自动映射通过如下步骤实现:

2)将临时动作集合中具有相同服务名和相同动作名的发送动作合并为一个发送动作,将临时动作集合中具有相同服务名和相同动作名的接收动作合并为一个接收动作;

3)检查动作的对应关系,将一个输出动作只有一个输入动作的映射归入1-1动作映射集合AM1-1中,将一个输出动作有多个输出动作的映射归入1-n动作映射集合AM1-n中,将一个输入动作有多个输入动作的映射归入n-1动作映射集合AMn-1中,剩余的动作归入m-n动作映射集合AMm-n中.然后对于AMm-n中的动作映射,以接收动作为基准,形成n个k-1的动作映射,其中1

4)剔除冗余的动作映射.对于委托调用的情况,会在AM1-1中出现一个服务的接收动作对应另外两个服务相同的发送动作,如(WSSi.act!,WSSj.act?),(WSSj.act!,WSSk.act?),(WSSi.act!,WSSk.act?),其中第3个动作映射是冗余的,可将其剔除.

依据上述步骤,可以设计算法建立Web服务输出动作和输入动作的自动映射.算法框架如算法1所示.

算法1.动作映射算法

1.输入:Web服务语义接口WSS1,WSS2,…,WSSn

2.输出:参数映射集Plist;接口动作映射集合AM

3.For each WSSisuch that i=1 to n do

5.End For

8. 初始化临时参数集PT={ };

13. End If

14. End For

15. End For

17. End For

18. End For

23.End For

25.按相同服务名的相同输入动作名合并动作映射;

26.相同服务名的相同输出动作名合并动作映射;

27.End For

28.For each 合并后的动作映射

29. If 一个输出动作对应一个输入动作

Then 将动作映射并入AM1-1;

30. Else If 一个输出动作对应多个输入动作

Then将动作映射并入AM1-n;

31. Else If一个输入动作对应多个输出动作

Then将动作映射并入AMn-1;

32. Else 剩余动作并入AMm-n;

33.End If

34.End For

35.If ∃(WSSi.act!,WSSj.act?),(WSSj.act!,WSSk.act?),(WSSi.act!,WSSk.act?)∈AM1-1

36. Then delete(WSSi.act!,WSSk.act?);

37.End If

38.Return AM=AM1-1∪AM1-n∪AMn-1∪AMm-n;

算法语句3-18根据概念兼容找出所有与输出参数概念兼容的输入参数形成参数映射集合.语句19-23根据参数映射集合将所有输出参数所在的动作与输入参数所在动作建立映射集合R.语句24-30将动作映射集合R中相同服务相同动作进行合并,并按照动作对应关系放入1-1动作映射子集AM1-1中,将1-n动作映射关系放入AM1-n中,将n-1动作映射关系放入AMn-1中,其余m-n动作映射放入AMm-n中.语句31-33将AM1-1集合中因委托调用而产生的一个发送对应多个接收的冗余动作剔除.

6 可适配性判定

在自动动作映射的基础上,检查是否所有发送动作都有对应的接收动作并且每个接收动作中的所有接收参数是否都有对应的发送参数来判断Web服务组合的可适配性.但是在有冗余接收动作的情况下,该冗余接收动作后可能还会有发送动作,因为该冗余接收动作不可能执行因而其后的所有动作都不会执行.

如图1所示例子中?c是冗余接收,其后的下个发送动作!d是不会执行的,所以!d是不需要有对应的接收动作映射的,同时?c也是没有发送动作与其映射,所以在判定可适配性前,我们要剔除冗余接收动作以及以该冗余接收为唯一前驱的后续动作.

图1 接收冗余示例

假定我们将剔除了冗余接收动作以及以该冗余接收动作为前驱的所有后继动作的SxSTS模型称为SxSTS′,则可定义Web服务组合的可适配性.

定义5.(可适配性)在所有SxSTSi′中,i=(1,…,n),任意一个发送动作都有对应的接收动作并且所有接收动作中的接收参数都有对应的发送动作,即:(∀act!∈SxSTSi′.ACT!,act!∈AM.ACT!)∧(∀p?∈SxSTSi′.ACT?,p?∈AM.ACT?).

据此,可以设计算法2进行Web服务组合可适配性的判定.

算法2.可适配性判定算法

1.输入:Web服务模型SxSTSi,i∈(1,…,n),接口动作映射集合AM

2.输出:Adaptability

3.Adaptability=True;

4.For each SxSTSisuch that i=1 to n do

5. For each act?∈SxSTSido

6. If(act?∉AM)Then delete act?and its succeeding actions;

7. SxSTSi′=SxSTSi;//剔除冗余接收及后继动作

8. End If

9. End For

10.End For

11.For each SxSTSi′ such that i=1 to n do

12. For each act!∈SxSTSi′.ACT!do

13. If act!∉ AM.ACT!Then

14. Adaptability=False;Break;//存在缺失接收动作

15. End If

16. End For

17.For each act?∈SxSTSi′.ACT?Such that i=1 to n do

18.For each p?∈act?do

19. If p?∉AM.ACT?Then

20.Adaptability=False;Break;//存在缺失的发送参数

21.End If

22.End For

23.End For

24.End For

25.Return Adaptability;

算法语句3先假定Adaptability为真,算法语句4-10首先检查每个服务中是否有冗余接收动作并将所有冗余接收动作及其后继动作删除.语句11-16判断是否存在缺失的接收动作.语句17-24判断是否存在缺失的发送参数.

如前文所述,行为层动作乱序的失配情形只能在适配过程中判定是否能够成功适配,算法2只能确定语法层中是否存在明显不可适配的情况,如果不存在明显不可适配情形则该算法返回True表明可以实施适配,否则无需进行适配.

7 实 例

本文以网络文件服务系统为例说明方法的可行性,该系统包含3个Web服务:FClient、FServer和FCharge,其中客户FClient可以上传或下载文件,下载分为两种类型,一种是免费下载,一种是付费下载.FServer可以接收用户登录、文件查询、文件上传和下载服务.在付费下载情况下FCharge完成付费功能.

FClient行为如图2所示,FClient先输入用户名!user()然后输入密码!password(),此后决定进行上传文件!upload()或者查找文件!search(),在获得上传成功后?ACK()可以退出也可以进行查找文件!search()并获得查找结果?list(),用户在结果中选择要下载的文件!request(),如果文件无需付费则直接下载?download(),若需付费则收到付费要求?reqpay()后发送自己的银行卡号!sendcard()付费成功后收到付费确认?payack()最后退出系统.

图2 FClient行为模型

FServer行为模型如图3所示,文件服务器首先期望收到用户登录请求?Login(),然后可以接收用户上传文件?upload()请求并返回成功通知!ACK(),如果收到查找文件请求?search(),则返回查找结果!list(),收到用户请求下载文件?request()后如果该文件不需收费则可直接下载?download()否则通知用户付费!pay()后接收用户银行卡号?getcard(),然后请求支付服务进行转账!transfer()成功后收到转账成功通知?notice(),此后用户可下载文件!download(),收到用户登出?logout()后通知用户支付成功!payack().

图3 FServer行为模型

FCharge行为模型如图4所示,可以接收用户查询余额申请?query()并返回查询结果!resule()结束,如果收到用户转账申请?charge()执行后通知文件服务器!notice()和用户转账成功!payack().

图4 FCharge行为模型

通过表1中动作对应关系可以看出,尽管系统中存在动作合并,如FClient.!user()和FClient.!Password()合并为FServer.?Login(),命名不同,如FClient.!searh()和FServer.?find(),FClient.?reqpay()和FServer.!pay(),FClient.!sendcard()和FServer.?getcard(),FServer.!transfer()和FCharge.?charge()等,对于这些失配都可以通过适配器的缓存和转换得到解决.对于FClient.?payack(),FClient.?download(),FClient.!logout()动作序列和FServer.!download(),FServer.?logout(),FServer.!payack()动作序列不同,但是这些失配也是可以通过适配器缓存可以进行适配的.对于因委托调用而产生的FClient.?payack()同时对应FCharge.!payack()和FServer.!payack(),在动作映射集合中删除冗余动作映射(FCharge.!payack(),FClient.?payack())即可.FCharge.!result()没有对应的接收动作是因为其前驱动作FCharge.?query()是冗余的接收动作,不会影响适配.通过检查可知该系统满足定义5的条件,所以是可适配的.

表1 动作对应关系

如果将图2FClient改为图5FClient1,图5中增加了发送动作!modify()以请求对文件的修改,但是FServer并不运行对文件进行修改,因而无对应接收动作,所以!modify()为接收动作缺失类型的失配而无法适配.在接收动作?list()中增加了接收参数filetype,由于FServer中!list()中并无对应的发送参数,属于发送参数缺失类型的失配,尽管有对应的发送动作但?list()依然无法执行.可见FClient1与FServer以及FCharge的服务组合是不可适配的.

图5 FClient1行为模型

8 总 结

本文基于Web服务接口动作自动映射,通过检查所有发送动作是否有对应的接收动作以及接收动作中是否所有的接收参数都有对应的发送动作来实现Web服务组合可适配性的自动判定.尽管可适配性未必一定能够生产适配器,但是当Web服务组合规模较大时,适配并生成 Web服务组合适配器需要很大的计算开销.为减少Web服务适配失败的风险,在Web服务组合适配之前,进行服务组合的可适配性分析是值得的.正确的动作映射是适配的前提,在本文动作映射和可适配性判定之后,研究Web服务组合的自动适配问题将是进一步的工作.

猜你喜欢

适配器语义算法
真实场景水下语义分割方法及数据集
Travellng thg World Full—time for Rree
基于3D打印的轻型导弹适配器
学习算法的“三种境界”
算法框图的补全
算法初步知识盘点
电源适配器怎么选
6款电力线网络适配器横向评测
美国麦格普公司新型M—LOK相机三脚架适配器
汉语依凭介词的语义范畴