关键字驱动的Web服务自动组合方法与流程

文档序号:17535800发布日期:2019-04-29 13:58阅读:341来源:国知局
关键字驱动的Web服务自动组合方法与流程

本发明属于服务计算中的web服务自动组合领域,在web服务组合过程中引入关键字查询。针对关键字唯一性和关键字时序性双重约束下组合服务数量最小化的web服务自动组合问题,提出了关键字驱动的web服务自动组合方案。



背景技术:

近年来,随着面向服务架构(soa)在软件工程中的应用的快速增长,通过组合现有的web服务来构建基于服务的系统(sbs)的需求日益扩大。寻找合适的组件服务是sbs工程中的一个关键步骤,可以将其转化为面向功能请求的服务组合问题。该问题的典型解决过程是:通过分析用户的功能请求,在web服务库中进行有效的服务发现、服务选择和服务匹配来满足用户的要求,进而形成可执行的服务组合解决方案。

传统的sbs构建过程分为三个阶段:系统规划阶段、服务发现阶段和服务选择阶段。系统设计人员需要手动地依次完成上述三个阶段,且无论处于哪个阶段,设计人员都需要花费大量的时间和精力来学习相应的soa技术,以获得最终的sbs解决方案。因此,过去几年来,工业界和学术界从各种研究角度研究了web服务自动组合方法以帮助系统设计人员找到服务来快速构建sbs,而不必经历所有复杂的阶段。

现有的web服务自动组合技术主要分为两类:基于ai理论的web服务自动组合方法和基于图搜索的web服务自动组合方法。前者将服务组合问题视为一个规划问题的自动求解问题,即给定一个初始状态和目标状态,在一个服务集合中寻求一条服务组合的路径以达到从初始状态到目标状态的演变。这类方法需要过多的形式化表示方法或推理系统,因此实施起来较为困难。于是基于图搜索的web服务自动组合方法应运而生,这类方法将服务以及服务之间的关系表示成关系图,web服务组合的过程被转化为在关系图中进行遍历以寻找从输入到输出或者从输出到输入的可达路径。

这两类方法主要考虑用户提供的初始输入和用户期望的最终输出,但忽略了组合方案中包含的web服务是否精确满足用户的功能要求。因此如何缩小搜索空间以实现快速组合、同时最大限度地满足用户的个性化功能要求是web服务组合需要解决的关键问题。



技术实现要素:

本发明针对现有技术的不足,提出了一种关键字驱动的web服务自动组合方法。该方法主张用关键字来表征服务的功能信息,在i/o数据流驱动的传统图搜索方法的基础上加入关键字查询技术,进而提出一种基于动态剪枝策略的深度优先搜索算法(dp-dfs)来快速获得满足用户需求且服务数量最少的web服务组合方案。特别地,本发明设计了三种类型的索引以保证关键字的唯一性和时序性,并提出了有效的剪枝策略来提升搜索效率。

本发明方法的具体步骤是:

步骤(1).输入web服务库w、语义本体ont以及基于关键字的web服务组合请求r={ir,or,kr,qr};其中ir表示用户提供的初始输入;or表示用户期待的最终输出;kr={k1,k2,…,kn}(n≥1)是查询关键字的集合,表示web服务组合方案中应包含的服务功能;web服务库w中的每个web服务都包含对应的关键字,关键字从服务描述文件中获取,用以描述服务的功能信息;qr表示特定关键字之间的执行顺序;

步骤(2).根据ir、or以及语义本体ont对服务之间的输入输出参数进行语义匹配,将离散的web服务逐层连接,构建服务初始匹配图gi=(v,e);其中v=s∪p是节点的集合,s表示web服务节点(以下简称为服务节点)集合,p表示数据传输过程中的i/o参数节点集合;s=sr∪{so,sd},其中sr表示图中包含的相关web服务;so、sd是两个特殊的虚拟服务节点,分别对应于服务初始匹配图中的头尾节点;so不包含任何输入,它的输出是ir;sd不包含任何输出,它的输入是or;e=sp∪ps是有向边的集合,表示服务节点与i/o参数节点之间的依赖关系;

步骤(3).对服务初始匹配图进行预处理,预处理过程包括检测并去除死锁、合并等效桥接服务、去除冗余服务节点;

步骤(4).为服务初始匹配图中的每个web服务节点构建索引lnp以记录每个服务的必经前驱关键字节点集合;构建索引mnd以记录每个服务节点与头节点so之间的最短距离(最少服务个数)及最短路径上包含的服务集合;

步骤(5).在服务初始匹配图中运行dp-dfs启发式关键字搜索算法来生成最终服务组合图gf;

dp-dfs启发式关键字搜索算法的具体执行过程如下:

1)从初始匹配图的尾节点sd开始,逆向进行关键字搜索;将sd的每个输入参数添加到栈inun中;初始化键值对集合ksel<k,v>,其中k表示某个待查询的关键字,v表示关键字对应的服务节点;初始化最优组合服务个数的上限值upper-bound为无穷大;初始化当前部分解决方案gp=<inun,ssel,ksel,lns>并将其添加到栈tps中,其中ssel和ksel分别表示部分解决方案中已选择的服务集合和关键字集合,lns是为部分解决方案中每一个尚未处理的服务节点(仍含有未匹配输入的服务)构建的索引,用来记录服务节点的必经后继关键字节点;

2)从栈tps中弹出一个待扩展的部分解决方案进行如下判断:首先,根据以下预测函数计算其最少服务数量值f(gp):

f(gp)=g(gp)+h(gp)

其中,g(gp)表示部分解决方案中已包含的服务节点个数;h(gp)表示从当前部分解决方案扩展到完整解决方案的启发式预估最小成本(即将包含的最小节点个数);若f(gp)大于upper-bound,则返回步骤2);若当前部分解决方案没有未解决的输入参数且它包含了所有查询关键字,则将其作为当前最优组合方案gf并更新upper-bound值为该组合方案中包含的服务个数,返回步骤2);

3)从inun中取出一个未解决的输入参数i,并获取与i连接的所有前驱服务节点作为它的候选服务节点集合candidate(i);

4)对的每一个候选服务节点进行如下操作:若该候选服务节点的前驱必经关键字已包含在该部分解决方案中,或者该候选服务节点的前驱必经关键字与部分解决方案中已有关键字之间不符合时序要求,或者选择该候选服务节点会造成循环,则从candidate(i)中移除该服务节点;

5)在candidate(i)剩余的服务节点中选择与头节点so之间的最短距离最大的服务节点s进行如下操作:生成当前部分解决方案的副本并将该候选服务节点添加进来;更新相关变量inun、ssel、ksel以及lns;将新生成的部分解决方案压入栈tps中;

6)重复步骤5),直到candidate(i)中不存在未被处理的服务节点;

7)重复步骤2)~步骤6),直到tps中不包含任何待扩展的部分解决方案;

8)输出此时的最优web服务组合方案gf;

本发明所提出的关键字驱动的web服务自动组合方法主要分为以下几个模块进行:服务仓库构建模块、初始匹配图生成模块、初始匹配图优化模块、最终组合图生成模块。

服务仓库构建模块根据每个web服务的服务描述文件(wsdl)将web服务形式化表示为三元组<输入参数,输出参数,关键字>,从而构建出用于进行组合的web服务仓库。

初始匹配图生成模块根据用户提供的初始输入以及期望得到的最终输出,按照i/o语义匹配规则逐层连接web服务仓库中的相关服务,最终得到初始服务匹配图。

初始匹配图优化模块用来对初始匹配图进行优化以减小图的大小,优化过程包括检测并去除死锁、合并等效桥接服务、去除冗余服务节点。

最终组合图生成模块是整个组合过程中最核心的部分,该模块依据本发明提出的启发式关键字搜索算法dp-dfs生成满足用户需求且服务个数最少的最终组合图。

本发明提出的方法综合考虑了用户的个性化功能需求和服务数量两个重要因素。针对关键字唯一性和关键字时序性双重约束下组合服务个数最小化的自动web服务组合问题,提出了关键字驱动的web服务自动组合方法。特别地,该方法通过构造三个索引来实现了一系列有效的剪枝策略。为了实现高效的查询处理,本发明还提出了一系列图优化策略。

附图说明

图1服务初始匹配图示例;

图2最终服务组合图示例;

图3dp-dfs算法流程图;

具体实施方式

下面将对本发明所提供的关键字驱动的web服务自动组合方案做具体说明。

为叙述方便,定义相关符号如下:

w:web服务库。

ont:语义本体,用来对输入输出参数进行语义匹配。

s:web服务库中的某个服务。

ir:用户提供的初始输入。

or:用户期待的最终输出。

k:表示某个服务的关键字。

kr:查询关键字的集合(kr={k1,k2,…,kn}(n≥1)),表示组合方案中应包含的关键任务。

qr:关键字之间的执行顺序。

gi=(v,e):服务初始匹配图,其中v=s∪p是节点的集合,s表示web服务节点集合,p表示数据传输过程中的i/o参数节点集合;s=sr∪{so,sd},其中sr表示图中包含的web服务节点;so、sd是两个特殊的虚拟服务节点,分别对应于服务初始匹配图中的头尾节点;so不包含任何输入,它的输出是ir;sd不包含任何输出,它的输入是or;e=sp∪ps是有向边的集合,表示服务节点与i/o参数节点之间的依赖关系。

gf=(v,e):最终服务组合图,作为最终的web服务组合方案。

ins:服务s的输入参数集合。

cout:服务初始匹配图生成过程中的可用输出参数集合。

gp:部分解决方案,表示最终服务组合图生成过程中的中间状态。

inun:用来存储当前部分解决方案中尚未被处理的输入的栈。

i:当前部分解决方案中的某个待处理输入。

candidate(i):待处理输入i的前驱候选服务集合。

ksel<k,v>:查询关键字索引,其中k表示某个待查询的关键字,v表示关键字对应的服务节点。

ssel:部分解决方案中已包含的web服务节点。

ksel:部分解决方案中已包含的关键字。

tps:用来存储一系列部分解决方案的栈。

upper-bound:最优服务组合方案中服务个数的上限值。

步骤(1):输入由n个服务构成的w、ont以及基于关键字的服务组合请求r={ir,or,kr,qr}。w包含一系列用来组合的web服务,每个web服务由输入参数、输出参数、关键字三部分组成。请求中包含用户提供的初始输入、用户期待的最终输出、用户查询的关键字以及这些关键字之间的执行顺序。

步骤(2):根据ir、or以及ont对服务之间的输入输出参数进行语义匹配,将离散的web服务逐层连接,构建服务初始匹配图gi(如图1所示)。图中矩形代表web服务节点,圆代表web服务的参数节点。实际上,服务初始匹配图是一个与或图,它拥有以下条件特征:

1)“与”条件:图中的服务节点是“与节点”,对于任何服务节点来说,连向它的所有有向边都是逻辑“与”的关系。换句话说,一个服务能够被执行当且仅当它所有的输入参数都被满足。

2)“或”条件:图中的参数节点是“或节点”,对于任何参数节点来说,连向它的所有有向边都是逻辑“或”的关系。换句话说,可能存在多个服务的输出参数匹配同一个输入参数,但是在最终的服务组合方案中只能选择其中一个。

服务初始匹配图的构建过程具体分为以下步骤:

1)将so、sd分别作为服务初始匹配图的第一层和最后一层服务节点,同时将so的输出参数,即ir,添加到cout中;

2)对于w中的每个服务节点s,计算ins与cout之间的匹配度。匹配度的计算方式分为以下三种情况:

a.若ins中的所有参数都能在cout中找到,即ins是cout的子集,则认为ins与cout完全匹配;

b.若ins中的部分参数与cout重合,则认为ins与cout部分匹配;

c.若ins中的所有参数都不包含在cout中,则认为ins与cout不匹配。当ins与cout的匹配度满足a情况时,将s添加到图中,同时将s的输出添加到cout中;当ins与cout的匹配度满足b情况时,即服务节点仍具有未被匹配的输入,则将这些输入记录下来以进行下一轮匹配验证。

3)逐层重复步骤2),直到不能再添加新的服务节点为止。

4)补充连接图中所有输入和输出参数之间的匹配关系以生成完整的服务初始匹配图。

如此生成的服务初始匹配图可能包含循环和冗余服务节点,这些问题将在以下步骤中被解决。

步骤(3):对服务初始匹配图进行优化预处理,预处理过程包括检测并去除死锁、合并等效桥接服务、去除冗余服务节点三个过程。每个过程的具体操作如下:

1)检测并去除死锁

当许多服务端到端连接并形成循环等待关系时,会产生死锁。要删除初始匹配图中导致死锁的服务,需从图中的每个服务开始,以广度优先的方式执行正向遍历方法,以确定是否存在仅依赖于此服务的其他服务(即连接两个服务的参数节点上没有其他分支)。如果是这样,继续此过程,直到返回到形成死锁的初始服务。最后,删除构成死锁的所有服务以及连接它们的有向边。

2)合并等效桥接服务

服务初始匹配图中位于两个服务节点之间的服务称为桥接服务。由于存在或节点,因此可能存在多个等效的桥接服务。即存在多个服务的输入(输出)节点匹配同一个输出(输入)节点。事实上,具有类似功能的服务通常共享相同的输入和输出。然而,这种重叠服务的出现大大增加了图形的复杂性,导致不必要的时间浪费。为了解决这个问题,本专利提出了一种等效桥接服务的合并策略。首先根据以下三个指标确定某些服务是否为等效桥接服务:输入参数,输出参数和关键字。如果所有三个指标都相同,我们将它们抽象为一个新服务。

3)去除冗余服务节点

经过上述两个优化步骤后,图中将生成许多冗余服务。冗余服务分为两种类型:一种是无法执行的服务,这意味着此类服务存在未解决的输入。另一种是对组合的预期产出没有贡献的服务。毫无疑问,冗余服务不能出现在最终组合图中。

删除第一类冗余服务的方法是:检查图中每个服务是否有未被匹配的输入。如果有,删除该服务以及连接到它的有向边。这可能会导致新的冗余服务的出现。因此,重复此过程直到没有可删除的服务。类似地,删除第二类冗余服务的方法是:检查图中每个服务是否有后继服务。如果没有,则表示此服务的所有输出都不能匹配图中任何服务的任何输入。删除此服务以及连接到它的有向边。同样地,这可能会导致新的冗余服务的出现。因此,重复此过程直到没有可移动服务。

步骤(4):构建索引列表lnp以记录图中每个服务节点的必经前驱关键字节点集合。lnp索引中的每个元素由两部分组成(preknode,keyword),其中preknode表示某个服务节点的必经前驱关键字节点的id、keyword表示关键字节点中包含的关键字,列表中的元素按添加顺序排序。

构建索引列表mnd以记录图中每个服务节点与头节点so之间的最短距离(最小服务个数)及最短路径上包含的服务节点集合。对于图中的任意服务节点,mnd存储两个值(dist,prenodeset),其中dist表示so和该服务节点之间的最小服务节点个数,prenodeset表示包含在最短路径上的服务节点集合。两个索引的具体构建过程如下:

1)lnp索引的构建方法

首先从每个关键字节点开始进行基于广度优先的正向扩展以寻找专属于该关键字节点的后继服务节点。然后,为这些后继服务节点创建列表,并将其preknode字段设置为相应关键字节点的id,将其keyword字段设置为关键字节点中包含的关键字。该过程将重复进行,直到遇到带分支的参数节点。

2)mnd索引的构建

构建mnd索引的本质就是求出每个服务节点与so之间的最短路径。从服务节点出发,逆向进行广度优先扩展,每扩展一步就将当前子路径存储在一个优先队列中,队列中的元素按服务节点个数由小到大排列。接下来再继续从队列头中取出某个子路径来扩展。重复此过程直到队头元素已扩展到so且该路径中没有未被匹配的输入参数。则该路径为该服务与so之间的最短路径,将dist字段设置为最短路径的服务节点个数,将prenodeset设置为最短路径上包含的服务节点集合。

步骤(5):在服务初始匹配图中运行dp-dfs启发式关键字搜索算法来生成最终服务组合图gf。

dp-dfs启发式关键字搜索算法的具体执行过程分为以下步骤:

1)从初始匹配图的尾节点sd开始,逆向进行关键字搜索。将sd的每个输入参数添加到用栈inun中,初始化键值对集合ksel<k,v>,初始化upper-bound的值为无穷大,初始化gp=<inun,ssel,ksel,lns>并将其添加到栈tps中,lns是为部分解决方案中每一个尚未处理的服务构建的索引列表,用来记录服务节点的必经后继关键字节点。lns索引中的每个元素由两部分组成(postknode,keyword),其中postknode表示某个服务节点的必经后继关键字节点的id、keyword表示关键字节点中包含的关键字,列表中的元素按添加顺序排序。它的构建方法如下:

首先从包含在当前部分解决方案中的每个具有时序约束的关键字节点开始,沿其输入进行逆向扩展以找到其前驱服务节点。然后,为每个前驱服务节点创建相应的lns索引,并将其postknode字段设置为相应关键字节点的id,将其keyword字段设置为关键字节点中包含的关键字。按照此过程继续为前驱服务节点的前驱服务节点构建索引,直到无法构建为止。

2)从栈tps中弹出一个待扩展的部分解决方案进行如下判断:首先,根据以下预测函数计算其最少服务数量值f(gp):

f(gp)=g(gp)+h(gp)

其中,g(gp)表示部分解决方案中已包含的服务节点个数。h(gp)表示从当前部分解决方案扩展到完整解决方案的启发式预估最小成本(即将包含的最小节点个数)。若f(gp)大于upper-bound,则返回步骤2)。若当前部分解决方案没有未解决的输入参数且它包含了所有查询关键字,则将其作为当前最优组合方案gf并更新upper-bound值为该组合方案中包含的服务个数,返回步骤2)。

3)从inun中取出一个未解决的输入参数i,并获取与i连接的所有前驱服务节点作为它的候选服务节点集合candidate(i)。

4)对i的每一个候选服务节点进行如下操作:根据lnp索引判断该候选服务节点的前驱必经关键字是否已包含在该部分解决方案中,若已包含则从candidate(i)中移除该服务节点。根据lns索引判断该候选服务节点的前驱必经关键字与部分解决方案中已有关键字之间是否符合时序要求,若不符合则从candidate(i)中移除该服务节点。最后判断选择该候选服务节点是否会造成循环,会造成循环则从candidate(i)中移除该服务节点。

5)在candidate(i)剩余的服务节点中选择与头节点so之间的最短距离最大的服务节点s进行如下操作:生成当前部分解决方案的副本并将该候选服务节点添加进来。更新相关变量inun、ssel、ksel以及lns。将新生成的部分解决方案压入栈tps中。

6)重复步骤5),直到candidate(i)中不存在未被处理的服务节点。

7)重复步骤2)~步骤6),直到tps中不包含任何待扩展的部分解决方案。

8)输出此时的最优web服务组合方案gf。

针对图1中展示的服务初始匹配图执行上述dp-dfs算法后得到的最终服务组合图如图2所示。其中,假设用户查询的关键字为k1、k2、k3,且k3要在k2之前执行。黑色实线部分构成的就是满足用户需求且包含服务个数最少的最优web服务组合方案。

整个dp-dfs算法的执行过程如图3所示。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1