专利名称:基于变粒度索引的服务流程搜索和重用方法
基于变粒度索引的服务流程搜索和重用方法技术领域
本发明属于服务计算领域,具体涉及一种基于变粒度索引的服务流程搜索和重用 方法。
背景技术:
Web服务作为一种标准的、跨平台的通用模型已经成为网络化软件发展的重要组 成部分。而服务组合就是通过基本Web服务之间的相互通信和协作,把相对独立及简单的 原子服务组合成具有新功能的大粒度服务的过程,以产生满足服务请求者更高需求的“增 值”服务。这种根据用户需求,将单一 Web服务,甚至以往成功组合过的服务作为组件,按照 一定规则和模式重新组合起来的技术已经成为未来网络化软件的研究热点,它能大幅提高 原子服务和服务流程的可重用性和利用率,提高软件开发的效率,为服务提供者和服务使 用者均带来受益。
通过对原子服务进行服务组合得到组合服务。然而,传统的组合服务流程搜索只 能返回整个服务流程实例,即将组合服务视为单一服务进行检索,不能实现对服务流程实 例片段的定位,这势必很大程度上限制服务化所带来的优势。此外,自动服务组合在近几年 的迅猛发展,已经能够实现一定程度的按需服务,即根据用户需求动态高效地搜索、择优、 组合互联网上的Web服务,满足用户更为复杂的软件需求。但是,自动服务组合的结果只是 构建了理论上的服务可组合关系,尽管已经大幅缩减了软件开发的时间,但它还无法直接 被用户使用,需要一定程度的后期编程。这就使得基于自动服务组合的结果,再经过编码加 工,并且可以直接调用的组合流程显得更为珍贵,如何有效利用或重用这些可调用的组合 服务流程实例片段成为挑战性问题。
传统的服务搜索一般是通过数据库进行存储,然后建立全文索引提高查询效率, 由于无法利用组合服务的自身特性,在服务的搜索过程中,传统服务查询的方式和效率都 受到了制约。发明内容
针对现有技术存在的不足,本发明通过引入变粒度索引来充分利用组合服务的自 身特性,将组合服务的查询问题转换成子图匹配问题,并通过字符编码和建立搜索结构对 服务流程实例片段进行高效定位,从而实现对海量组合服务流程片段的高效查询。同时,本 发明还针对服务流程的特性制定了不同查询方式,以满足用户的不同需求。
为了解决上述技术问题,本发明的技术方案如下
—种针对海量服务流程的变粒度索引机制的构建方法,包括步骤
步骤一,采用分层建模方法统一管理获取的服务实体,所述的服务实体为原子服 务实体和/或组合服务实体;
步骤二,将服务实体包含的输入、输出参数名称转换为对应的二进制编码,并根据 所得二进制编码获得对应的服务实体的数字签名;
步骤三,根据服务实体包含的输入、输出参数是否存在交集来判断服务实体对是 否存在调用关系,将存在调用关系的服务实体对包含的输入、输出参数名称转换为对应的 二进制编码,并根据所得二进制编码获得该服务实体对调用关系的数字签名;
步骤四,根据服务流程实例中服务实体和服务实体间调用关系的数字签名构建该 服务流程实例的变粒度索引结构;
步骤五,根据各服务流程实例的变粒度索引结构构建散列索引。
上述步骤一进一步包括以下子步骤
1.1定义原子服务和组合服务实体存储的三个层次服务、参数和路径,具体如 下
服务定义为{服务ID,服务名称,描述};
参数定义为{参数ID,参数名称,所属服务,输入还是输出,描述};
路径定义为{路径ID,路径起始服务,起始参数,路径结束服务,结束参数,描 述};
1. 2将获取的服务实体均采用以上定义分层存储到数据库中,所述的服务实体为 原子服务实体和/或组合服务实体。
上述步骤二进一步包括以下子步骤
2.1使用哈希函数对服务实体包含的所有输入、输出参数名称分别进行散列,得到 各输入、输出参数对应的二进制编码;
2. 2将服务实体包含的所有输入参数对应的二进制编码按位或运算得到该服务实 体输入参数的数字签名,将服务实体包含的所有输出参数对应的二进制编码按位或运算得 到该服务实体输出参数的数字签名;
2. 3将服务实体输入参数和输出参数的数字签名串接,即得到该服务实体的数字 签名。
假设服务实体V1,其数字签名Sign(V1)可表示为Sign (V1) = [Sign (V1) · in, Sign(V1). out],其中,Sign(V1).1n表示服务实体V1的输入参数的数字签名,其为服务实体 V1所包含的所有输入参数对应的二进制编码按位或运算得到Jign(V1)-OUt表示服务实体 V1的输出参数的数字签名,其为服务实体V1所包含的所有输出参数对应的二进制编码按位 或运算得到。
为了避免后期索引的错误,上述步骤2.1中可采用复合哈希函数对服务实体包含 的各输入、输出参数名称进行散列,所述的复合哈希函数是指使用不少于两个的哈希函数 对同一个对象进行散列操作,以避免不同服务实体的输入、输出参数名称被散列为相同的 二进制编码,造成后期索引的错误。
上述步骤三进一步包括以下子步骤
3.1根据服务实体包含的输入、输出参数是否存在交集来判断服务实体之间是否 存在调用关系,所包含的输入、输出参数存在交集的服务实体对即为存在调用关系的服务 实体对;
3. 2采用哈希函数对存在调用关系的服务实体对中起始服务所包含的输入参数名 称和被调服务所包含的输出参数名称分别进行散列,得到起始服务各输入参数和被调服务 各输出参数对应的二进制编码;
3. 3将存在调用关系的服务实体对中起始服务包含的所有输入参数对应的二进制 编码按位或运算得到起始服务输入参数的数字签名,将存在调用关系的服务实体对中被调 服务包含的所有输出参数对应的二进制编码按位或运算得到被调服务输出参数的数字签 名;
3. 4将起始服务输入参数的数字签名和被调服务输出参数的数字签名串接,得到 对应的服务实体对调用关系的数字签名。
对于服务流程实例中一对存在调用关系的服务实体V1和V2,其中,V2为起始服务, V1为被调服务,则该服务实体对调用关系的数字签名Sign (e) = LSign(V1) .out,Sign(V2).1n],其中,e表不起始服务V2和被调服务V1之间的调用关系;Sign (V1). out表不被调服务 V1输出参数的数字签名,其为被调服务V1包含的所有输出参数对应的二进制编码按位或运 算得到;Sign(V2).1n表示起始服务V2输入参数的数字签名,其为起始服务%所包含的所有 输入参数对应的二进制编码按位或运算得到。
为了避免后期索引的错误,上述步骤3. 2中可采用复合哈希函数对存在调用关系 的服务实体对中起始服务所包含的输入参数名称和被调服务所包含的输出参数名称进行 散列,所述的复合哈希函数是指使用不少于两个的哈希函数对同一个对象进行散列操作, 以避免不同服务实体的输入、输出参数名称被散列为相同的二进制编码,造成后期索引的错误。
上述步骤四进一步包括以下子步骤
4.1根据服务流程实例中服务实体的数字签名,构建服务流程实例的数字签名树 S-Tree (Signature Tree)结构。
S-Tree结构的构建是叶子节点的重复插入过程,包括叶子节点插入位置的选取、 非叶子节点分裂、数字签名自底向上的更新。
叶子节点插入位置的选取是一个自顶向下的匹配过程,该匹配过程是待插入的叶 子节点和S-Tree结构中已有的非叶子节点的数字签名的位与运算,保证插入的叶子节点 和S-Tree结构中已有的非叶子节点的数字签名之间满足最短海明距离。在S-Tree结构中 叶子节点为各服务实体的数字签名,叶子节点即可代表服务实体。
在叶子节点的插入过程中,若叶子节点已满,就必须进行非叶子节点分裂,在已生 成的S-Tree结构基础上,确保分裂得到的非叶子节点之间满足最大海明距离。
完成叶子节点插入后,整棵S-Tree结构的数字签名都需自下而上进行更新,保证 各父节点的数字签名是其子节点数字签名的“位或”计算结果。
4. 2根据服务流程实例中服务实体对调用关系的数字签名,构建基于矢量的数字 签名树结构,本发明中,将基于矢量的数字签名树结构简称为VS-Tree结构。
根据组合服务流程中服务实体对调用关系的数字签名,将该调用关系数字签名添 加到步骤4.1生成的S-Tree结构中用以标明服务实体之间的调用关系。同时根据叶子节点 所对应的服务实体调用关系的数字签名来生成非叶节点之间边的数字签名,对于每一对非 叶节点,彼此之间边的数字签名都是其子节点之间调用关系的数字签名“位或”计算结果。 这样就生成了服务流程实例的VS-Tree (Vector Signature Tree,矢量数字签名树)结构。
4. 3基于VS-Tree结构构建基于矢量的数字签名组合树结构,即得到服务流程实 例的变粒度索引结构VSC-Tree。
将web服务中所有服务流程实例的VS-Tree结构根节点作为服务实体,以VS-Tree 结构根节点和web服务中所有其他原子服务的数字签名为叶子节点构建数字签名树 S-Tree,并在VS-Tree结构根节点对应的叶子节点上加入一条指向自己的边,采用步骤三 中所述的方法计算该边所对应的数字签名,具体为将上述根节点看成起始服务和被调服 务均为自己的组合服务实体对进行数字签名计算,并用来标识上述指向自己的边。采用该 方法来区分原子服务和组合服务。凡是子节点包含有指向自己的边,其父节点同样包含有 指向自己的边,且父节点的指向自己的边的数字签名为子节点的指向自己的边的数字签名 的“位或”结果。
采用上述方法,从而得到服务流程实例的变粒度索引结构VSC-Tree。
VSC-Tree结构是结合了数字签名和S-Tree结构各自特点的一种树形变粒度索引 结构,其实质为层次化网状结构,其特点是各叶子节点为各原子服务的数字签名,而任何一 个父节点的数字签名是其所有子节点数字签名的“位或”计算结果,VSC-Tree的数据结构保 证了对组合服务查询的线性时间复杂度。
上述步骤五根据各服务流程实例的VSC-Tree结构根节点,采用S-Tree结构构建 散列索引,
该步骤进一步包括以下子步骤
5-1以各服务流程实例VSC-Tree结构的根节点为叶子节点构建S-Tree结构;
5-2构建的S-Tree结构的叶子节点存储的是所有与该叶子节点具有相同数字签 名的服务流程实例的集合。
一种基于上述构建的变粒度索引VSC-Tree的服务流程搜索方法,可实现服务组 合的快速查询,可针对不同查询条件给出不同的搜索方法,包含
(I)以原子服务为查询条件的原子服务搜索方法;
(2)以输入、输出为查询条件的搜索方法;
(3)以组合服务片段为查询条件的组合服务片段搜索方法。
上述以原子服务为查询条件的搜索方法,包括步骤
1-1基于作为查询条件的原子服务的输入、输出参数名,获取该原子服务的数字签 名Sign (Q),获取该原子服务的数字签名的方法与构建VSC-Tree时获取服务实体数字签名 的方法相同;
1. 2采用“位与”操作将查询条件对应的数字签名与变粒度索引结构的散列索引进 行匹配,得到包含有符合查询条件的原子服务的VSC-Tree结构根节点的集合;对该集合中 的各VSC-Tree结构,采用“位与”操作自VSC-Tree结构顶层向下逐层与数字签名Sign(Q) 进行匹配,当符合匹配条件Sign (Q) &Sign (V) =Sign (Q)时,匹配成功,其中,Sign (Q)为作为 查询条件的原子服务的数字签名,Sign(V)为VSC-Tree结构中各节点的数字签名;
1. 3将与数字签名Sign(Q)匹配成功的非叶节点的子节点继续与数字签名 Sign(Q)按“位与”操作匹配,直至成功匹配到叶子节点,将匹配成功的叶子节点所对应的原 子服务作为搜索结果返回;若无法成功匹配到叶子节点,则搜索失败。
上述以输入、输出为查询条件的组合服务片段搜索方法,包括步骤
2-1分别获取作为查询条件的输入、输出参数对应的数字签名,所获取的输入参数 的数字签名长度为M,所获取的输出参数的数字签名长度为N ;
2. 2将输入和输出参数的数字签名进行位扩展,用“I”补足输入参数数字签名的 后部和输出参数数字签名的前部,得到长度均为N+M的输入参数数字签名Sign(Q.1N)和输 出参数数字签名Sign (Q. OUT);
2. 3采用“位与”操作将查询条件对应的数字签名与变粒度索引结构的散列索 引进行匹配,得到包含有符合查询条件的VSC-Tree结构根节点的集合;对该集合中的各 VSC-Tree结构,采用“位与”操作将输入和输出参数的数字签名同时自顶向下逐层匹配 VSC-Tree 结构,当同时符合匹配条件 L1. di&Sign (Q.1N) ==Sign (Q.1N)和 L1. di&Sign (Q. OUT) ==Sign(Q. OUT)时,匹配成功,其中,L1. di为VSC-Tree结构中各非叶节点的数字签 名;
2. 4判断所有匹配成功的非叶节点是否为只包含了原子服务的非叶子节点,若是, 则进行以原子服务为查询条件的搜索;否则,进行以组合服务片段为查询条件的组合服务 片段搜索。
上述以组合服务片段为查询条件的组合服务片段搜索方法包含如下步骤
3-1对VSC-Tree中S-Tree部分的匹配查询,其步骤为
(I)根据作为查询条件的组合服务片段中服务实体的输入和输出参数,获取服务 实体对应的数字签名,所获取的输入参数的数字签名长度为M,所获取的输出参数的数字签 名长度为N ;补足输入参数数字签名的后部和输出参数数字签名的前部,得到长度均为N+M 的输入参数数字签名和输出参数数字签名;
(2)采用“位与”操作将查询条件对应的数字签名与变粒度索引结构的散列索 引进行匹配,得到包含有符合查询条件的VSC-Tree结构根节点的集合;对该集合中的各 VSC-Tree结构,采用“位与”操作将各服务实体的数字签名自VSC-Tree结构顶层向下逐层 进行匹配,当搜索到与所有服务实体的数字签名均匹配、且包含了指向自身的边的叶子节 点,即匹配成功;
3-2对片段进行整体的详细匹配查询,其步骤为
(I)获取以匹配成功的叶子节点数字签名为根节点的VS-Tree,采用“位与”操作 将各服务实体的数字签名自VS-Tree结构顶层向下逐层进行匹配,获得当前查询的匹配列 表,所述的匹配列表包含各服务实体及与其匹配成功的叶子节点;
(2)基于作为查询条件的组合服务片段中各服务实体的边的关系,对匹配列表中 各匹配成功的叶子节点进行多路匹配查询得到匹配成功的输入和输出参数对集合,从而获 取匹配成功的服务实体集,根据实际调用关系裁剪匹配成功的服务实体集;
(3)对裁剪后的服务实体集进行多路连接查询,就可得到满足查询条件的服务组 合片段。
与现有技术相比,本发明具有以下特点
本发明通过构建变粒度索引机制,提出的基于构建的变粒度索引机制的服务搜索 和重用方法中,操作的对象将不再局限于单一服务,而是任意粒度的服务流程;同时,自动 服务组合的操作单元也能够有效利用以往被编辑可调用的组合服务流程片段,去掉反复的 服务组合验证、匹配和调试过程,直接从大量的服务流程实例片段中选取最合适的片段,快 速组合形成更大粒度、满足用户更复杂需求的网络化软件,反过来提高自动服务组合结果 的实际可执行程度,从而最终形成良性循环。
本发明方法可以大幅度提高服务查询效率,在网络化软件开发环境下具有重要意 义。同时,由于变粒度索引机制的特点,这样的服务流程片段的查询,大大丰富了搜索结果 的内容。为更大粒度的服务组合和重用奠定基础,
图1 是 Web IDE (Integerated Development Environment,集成开发环境)功能示意图2是组合服务实例;
图3是具体实施中所构建的S-Tree结构示例;
图4是具体实施中所构建的基于VSC-Tree的变粒度索引示例;
图5是具体实施中所构建的VS-Tree结构示例。
具体实施方式
为实现针对海量服务流程的变粒度索引机制,本发明定义了服务实例和服务组合的形式化描述,实现了统一的数字化签名编码方案,并在这两者的基础上设计了 VSC-Tree (Vector Signature Combination Tree,矢量数字签名组合树)数据结构,解决了原子服务 和组合服务的统一存储与维护问题,最终能够按需实现针对百万、甚至千万级别的原子服 务和组合服务流程的高效检索、最大化重用,并能综合服务的非功能性约束(响应时间、吞 吐量、价格等),提供给用户最佳的服务流程。
本发明提出了一种基于变粒度索引的服务流程搜索和重用方法,其中的变粒度索 引是基于数字签名和层次化网状结构来构建的,本发明方法的基本原理及其特点为
传统的组合服务流程搜索主要通过数据库进行存储,然后通过建立全文索引来实 现查询效率的提高,这种搜索方法无法利用服务组合的自身特性,搜索的方式和效率都受 到了制约。将变粒度索引用于海量服务流程检索,将组合服务的查询问题转化为子图匹配 问题,结合服务组合之间的相互关系以及包含数字签名的层次化网状结构的特点构建变粒 度索引结构;以构建的变粒度索引结构为基础,用户根据现有组合服务片段或者输入输出 需求在已有的原子服务和组合服务库中检索需要的组合服务片段,从而可实现不同粒度的 检索结果和高效的检索效率。
给定一个服务流程实例,将其表示为图2所示的有向无环图的形式。首先构建该 服务流程实例的变粒度索引结构,具体步骤如下
—、实现统一的服务存储模式
步骤1. 1,Web服务的获取
在变粒度索引体系结构中,Web服务主要来源于网络爬虫的爬取和对爬取到的 WSDL (Web Services Description Language)的解析,解析得到的是单一的Web服务及其 包含的输入、输出参数;所得的Web服务实体包括不少于I个的原子服务和/或组合服务。
步骤1. 2,对解析得到的Web服务实体实现统一的存储模式
假设解析得到的Web服务实体为图2给出的Web组合服务实例,下面将选取一个 服务、一个参数和一条路径来说明Web服务的存储模式
选取的服务为getCityRestaurant,该服务可表示为
{ID=1,服务名称getCityRestaurant,描述获取对应城市的参观信息,其他};
选取上述服务的输出参数faddress,该输出参数可表示为
{ID=1,参数名称faddress,所属服务ID=1,输入或输出输出,描述相应餐馆的地址};
选取的路径的起始服务为getCityRestaurant,结束服务为getTripRoute,该路径可表示为{ID=1,路径起始服务getCityRestaurant,起始参数faddress,路径结束服务getTripRoute,结束参数faddress,描述获取餐馆地址传递给决定旅行路线的服务}。
将Web服务实体中各服务描述为上述统一模式,按统一模式将分散的、独立的Web 服务实体分层次地、关联存储于一个关系型数据库中,实现了对服务的持久化存储,也奠定了构建变粒度索引和服务流程检索的基础。
二、将各服务实体包含的输入输出参数转换为对应的二进制编码,并根据二进制编码获得服务实体的数字签名。
步骤2. 1,对每一个服务实体,即步骤1.1所获取的各单一 Web服务,对其包含的输入、输出参数名称使用复合哈希函数分别进行散列,生成各输入、输出参数对应的二进制编码;所述的复合哈希函数是指使用不少于两个的哈希函数对同一个对象进行散列操作,可避免不同的参数名称被散列为相同的二进制编码,避免后期索引出错,提高查询的准确性。
在利用哈希函数对参数名称进行散列时,引进2个变量m和M,M表示生产的二进制编码的位数,m表示生成二进制编码中I的位数。在进行散列前,先将参数名称划分为等长的η位小段,例如,对名称为faddress的输出参数,取n=3,则可以划分为如下的6个3位小段{(fad), (add), (ddr),(dre),(res), (ess)}。对每个小段均用同一哈希函数分别进行散列得到对应的一组二进制编码{gl,g2, g3,…g6}。将长度为M的二进制编码的第{gi MOD Μ}位设置为1,其他为0,i = 1,2,…,6,MOD为取余数操作。
选定Simple_hash哈希函数,取M=12,得到的faddress参数对应的二进制编码 Signl(faddress)
Signl (faddress)=1000 0010 1101
以此对服务实体中的其余输入、输出参数名称散列成对应的二进制编码,根据所得二进制编码的中“I”的个数来判断散列结果是否理想,在本具体实施中,若所得二进制编码中“I”的个数超过了总位数的60%,则认为散列结果不理想。若得到不理想的散列结果, 可再选取另一个哈希函数对该参数名称进行散列,串接两种散列结果作为该参数的新数字签名,这样就可以大大避免不同参数产生相同数字签名的情况。
例如,可再选取RS_hash哈希函数对faddress参数进行散列,取M=12,得到的 faddress 对应的二进制编码 Sign2 (faddress)
Sign2(faddress)=1001 1010 0001
将Signl (faddress)、Sign2 (faddress)]串接后作为输出参数 faddress 的数字签名。
步骤2. 2,将服务实体包含的所有输入参数对应的二进制编码按位或运算得到该服务实体输入参数的数字签名,将服务实体包含的所有输出参数对应的二进制编码按位或运算得到该服务实体输出参数的数字签名;
步骤2. 3,服务实体的数字签名为它的输入参数和输出参数的数字签名的串接。
下面将以服务实体getCityResturant为例来详细说明其数字签名的获取过程, 服务实体getCityResturant为图2所示的组合服务中的服务实体。
参见图2,服务实体getCityResturant的输入参数有city和cookstyle,输出参 数有faddress、restaurant和comment,假定采用哈希函数散列后各参数的数字签名为
输入参数city 的数字签名 Sign(City)=IOOO 0010 1100 ;
输入参数cookstyle 的数字签名 Sign (cookstyle) =0100 0010 1101 ;
输出参数faddress 的数字签名 Sign (faddress) =1000 0010 1101 ;
输出参数restaurant 的数字签名 Sign (resturant) =1000 0010 1110 ;
输出参数commentSign(comment) =1000 0010 1001。
将服务实体getCityResturant的各输入参数的数字签名进行位或运算,得到 getCityResturant 的输入参数的数字签名 Sign (getCityResturant) · in
Sign (getCityResturant).1n=Sign (city) Sign (cookstyle)=1000 0010 1100|0100 0010 1101
=1100 0010 1101
将服务实体getCityResturant的各输出参数的数字签名进行位或运算,得到 getCityResturant 的输出参数的数字签名 Sign (getCityResturant) · out
Sign (getCityResturant). out=Sign (faddress) Sign (resturant) Sign (commen t)
=1000 0010 110111000 0010 1110 11000 0010 1001
=1000 0010 1111
将服务实体getCityResturant的输入参数和输出参数的数字签名串接,即得到 的 getCityResturant 的数字签名 Sign (getCityResturant) =1100 0010 1101 1000 0010 1111。
按照上述方法获得组合服务中各服务实体的数字签名。
三、将组合服务中服务与服务之间的调用关系转化为对应的二进制编码,作为服 务实体之间调用关系的数字签名。
步骤3. 1,对组合服务中每一对服务(包括起始服务和被调服务),采用复合哈希函 数分别对起始服务的输入参数和被调服务的输出参数进行散列,得到各参数对应的二进制 编码。所述的复合哈希函数是指使用不少于两个的哈希函数对同一个对象进行散列操作, 可避免不同的参数名称被散列为相同的二进制编码,避免后期索引出错,提高查询的准确 性。
步骤3. 2,对起始服务的所有输入参数对应的二进制编码按位或运算得到起始服 务输出参数的数字签名,该数字签名为该服务实体对调用关系的数字签名Sign(e)的前N 位;对被调服务的所有输入参数对应的二进制编码按位或运算得到被调服务输出参数的数 字签名,该数字签名为该服务实体调用关系的数字签名Sign(e)的后M位。
对于给定的服务组合实现对边WSC.1N — getCityResturan,采用哈希函数对起 始服务WSC.1N输出参数city和cookstyle分别进行散列得到各自对应的二进制编码 Sign (city)和 Sign (cookstyle),对 Sign (city)和 Sign (cookstyle)进行位或运算,得到起始服务WSC.1N输出参数的数字签名Sign(WSC). out
Sign (WSC). out=Sign(city) |Sign (cookstyle)=1000 0010 1100|0100 0010 1101
=1100 0010 1101
采用哈希函数对被调服务getCityResturant输入参数city和cookstyle分别进行散列得到各自对应的二进制编码Sign(city)和Sign (cookstyle),对Sign (city)和 Sign (cookstyle)进行位或运算,得到被调服务getCityResturant输入参数的数字签名 Sign(getCityResturant).1n
Sign (getCityResturant).1n=Sign (city) Sign (cookstyle) =1000 0010 1100|0100 0010 1101
=1100 0010 1101
步骤3. 3,将起始服务输入参数和被调服务输出参数的数字签名串接,最终得到 N+M长度的组合服务内服务实体对调用关系的数字签名。
对于服务流程中的一条服务调用关系边e=〈Vl,V2>,其中,Vl为被调服务,V2为起始服务该调用关系所对应的数字签名为Vl输出参数数字签名和V2输入参数数字签名的串接。
对服务调用关心边e=〈WSC.1N, getCityResturant〉,其数字签名Sign(e)为
Sign(e) = [Sign (WSC). out, Sign(getCityResturant).1n]=1100 0010 1101 1100 0010 1101。
对组合服务中各服务之间的所有调用关系均进行相应的编码,分别得到各服务之间调用关系对应的数字签名。
四、构建服务流程实例的变粒度索引结构。
步骤4. 1,根据服务实体的数字签名构建S-Tree结构,S-Tree是一种经典的能够实现高速查询且保持平衡性的树形结构。
构建过程中,在插入叶子节点前需选取合适的叶子节点插入点,本发明中保证插入的叶子节点和S-Tree结构中已有的非叶子节点的数字签名之间满足最短海明距离 δ (s, s')
δ (s, S,) = τ (s V S,)- τ (s Λ S,)
其中,
s表示待插入S-Tree结构的某叶子节点的数字签名;
S,表示S-Tree结构中已有的某非叶子节点的数字签名;
δ (s,s,)表示s和S,之间的海明距离,为一具体数值;
τ (s V s’)表示s和S,做“位或”操作得到的二进制编码中I的数量;
τ (s Λ s’)表示s和S,做“位与”操作得到的二进制编码中I的数量。
保证最短海明距离的目的是为了保证服务实体间相近的数字签名能够被维护在同样的父节点之下,这样就能保证生成的S-Tree结构能够维护起尽量多的服务实体,在实现快速匹配查询时可以保证查询效率。自顶向下遍历S-Tree匹配最短海明距离的非叶节点,直到找到合适叶子节点,该位置就为待插入的位置。
在叶子节点的插入过程中,若S-Tree结构中叶子节点已满,则需要进行节点分裂来保证整棵S-Tree树的平衡性。针对包含了三个参数K..L,h(K..k,hCNo)的个多路高度平衡树,N0为自然数集合,K、k为预设的数值,其中
( I)所有从树的根节点到叶子节点的路径都有同样的长度h ;
(2)树的根节点至少有2个孩子,至多有K个孩子,除非它是叶子节点;
(3)除了根节点以外,所有的节点最少有k个孩子,最多有K个孩子;
(4)所有叶子或非叶子节点的数字签名在进行插入分裂操作的过程中都遵循最小海明距离。
完成叶子节点的插入后,针对整个树的数字签名从插入点位置自底向上实现数字签名的更新。对给定的服务组合构造的S-Tree的构建完成情况可以参见图3,由于S-Tree 的特点,其只能支持对于原子服务的快速查询。
步骤4. 2,在现有的S-Tree结构的基础上,结合服务实体之间调用关系的数字签名构建VS-Tree结构。VS-Tree结构叶子节点之间调用关系生成非叶节点之间边的数字签名,对于每一组非叶节点,彼此之间的数字签名都是其子节点之间数字签名的“位或”计算结果,自底向上构建出每一个层次中非叶节点之间的编码关系,本例中构建出的VS-Tree 可参见图5。所构建的VS-Tree中,存在边关系的叶子节点对,其父节点之间也存在边的关系O
步骤4. 3,将web服务中所有服务流程实例对应的VS-Tree结构根节点作为服务实体,以VS-Tree结构根节点和web服务中所有其他原子服务的数字签名为叶子节点构建数字签名树S-Tree,并在VS-Tree结构根节点对应的叶子节点上加入一条指向自己的边, 采用步骤三中所述的方法计算该边所对应的数字签名,具体为将上述根节点看成起始服务和被调服务均为自己的组合服务实体对进行数字签名计算,并用来标识上述指向自己的边。这样就可以有效区分原子服务和组合服务,从而原子服务和组合服务共同维护到一种数据结构中。凡是子节点包含有指向自己的边,其父节点同样包含有指向自己的边,且父节点的指向自己的边的数字签名为子节点的指向自己的边的数字签名的“位或”结果。
采用上述方法,从而得到服务流程实例的变粒度索引结构VSC-Tree,图4为所构建的VSC-Tree示意图,参见图4,凡是带有指向自己的边的节点即为组合服务或包含了组合服务的非叶子节点。
下面将以图3 5为例,来简单说明叶子节点的插入过程。参见图3,图3为构建的S — Tree结构,GcTG2层的节点为非叶节点,G3层的节点为叶子节点,叶子节点代表的是单一原子服务实体对应的数字签名,GcTG2层的节点数字签名由其子节点的数字签名按运算見合而成。
若要向该S - Tree结构插入数字签名0010 0110,将按以下步骤操作
a、自顶向下匹配找到插入的位置;
对Gtl层的根节 点,将待插入数字签名按位与操作匹配,0010 0110&1111 1111=00100110,匹配成功,该根节点的所有子节点入栈;
对Gtl层根节点的所有子节点,即图3中G1层的两个节点的数字签名0011 1110和 11100011,将待插入数字签名按位与操作分别匹配
0010 0110&0011 1110=0010 0110,匹配成功,所有子节点入栈;
0010 0110&1110 0011 ^ 0010 0110,匹配不成功,不做操作。
对6:层数字签名为0011 1110的节点的所有子节点,将待插入数字签名按位与操 作分别匹配,最后与数字签名为0010 1110和0011 0110的两个节点匹配成功。此时采用 海明距离公式获取到底选取那个节点,将待插入节点插入与其数字签名的海明威距离最短 的非叶节点下计算待插入节点与数字签名为0010 1110的非叶节点的海明威距离6 (0010 0110, 0010 1110)= x (0010 0110 V 0010 1110)- x (0010 0110 A 0010 1110)=4-3 =1计算待插入节点与数字签名为0011 0110的非叶节点的海明威距离6 (0010 0110,0011 0110)= x (0010 0110 V 0011 0110)- x (0010 0110 八 0011 0110)
=4-3=1根据上述结果,待插入节点与上述两个非叶节点的海明威距离相等,任取其中一 个非叶节点,将待插入节点插入。五、根据服务流程实例的变粒度索引结构构建散列索引。本步骤是根据各服务流程实例的VSC-Tree结构根节点,采用S-Tree结构构建散 列索引,具体为步骤5. 1,根据各不同服务流程实例的VSC-Tree结构的根节点数字签名构建出 S-Tree ;例如构建了 n棵VSC-Tree,其根节点数字签名分别为{Sigr^,Sign2,……,SignJ, 则根据这一组根节点数字签名的集合再次构建出一棵S-Tree,该S-Tree的叶节点保存的 是所有与该叶子节点具有相同数字签名的服务流程实例的集合;步骤2,自顶向下对构建的S-Tree结构用位与操作进行数字签名进行匹配,从而 可快速找到需要查找的服务所在的VSC-Tree ;对多个VSC-Tree根节点的散列索引的建立实现了对数字签名的分层次存储,避 免了 VSC-Tree过高的层次结构,同时可以有效减少数字签名在多次位与操作之后生成全1 而使得检索匹配失效的情况。基于上述构件的针对海量服务流程的变粒度索引机制,本发明提出了一种服务流 程搜索方法,针对不同查询条件给出不同的搜索方法,包含(1)以原子服务为查询条件的 原子服务搜索;(2)以输入、输出为查询条件的组合服务片段搜索;(3)以组合服务片段为 查询条件的组合服务片段搜索。一、基于构建的VSC-Tree结构,进行以原子服务为查询条件的原子服务搜索,包 括步骤步骤1,以原子服务作为查询条件,依据待查询原子服务的输入、输出参数获取该 原子服务的数字签名,具体方法同前述获取服务实体数字签名的方法。假设所获取的待查 询原子服务的数字签名为Sign(Q) =0011 1000。步骤2,依据待查询原子服务的数字签名匹配VSC-Tree结构中的节点,下面将以 附图4为例进一步说明本步骤。本步骤的匹配是自VSC-Tree结构顶层向下对数字签名采用“& “操作(位与操作)实现匹配。附图4中VSC-Tree结构为根节点数字签名为1111 1111的三层VSC-Tree结构, 当符合Sign (Q)&Sign (V) =Sign (Q)条件时,匹配成功,这里,Sign (Q)为待查询原子服务的数字签名,Sign(V)为VSC-Tree结构中各节点的数字签名。
假设待查询原子服务的数字签名Sign(Q)=OOll 1000,将其与附图4中根节点数字签名进行匹配,Sign(Q)&1111 Illl=Sign(Q),匹配成功,则该根节点的所有子节点都加入待匹配队列,继续匹配队列中的元素。
G1层中节点的数字签名分别为0011 1110和1110 0011,分别与该两个节点的数字签名匹配。Sign(Q)&0011 IllO=Sign(Q),匹配成功,将0011 1110对应的节点的子节点加入待匹配队列;Sign(Q)&1110 0011!=Sign(Q),匹配不成功,不做任何操作。
进入G2层,分别与该层中数字签名为0010 1110,0011 1100,0011 0110进行匹配。Sign(Q)&0011 IlOO=Sign(Q),则与0011 1100对应的节点匹配成功,将该节点的子节点加入待匹配队列。
继续匹配待匹配队列中的叶子节点,与Sign(Q)匹配成功的叶子节点即为满足查询条件的原子服务,可作为搜索结果返回。
二、基于构建的VSC-Tree结构,进行以输入、输出参数为查询条件的组合服务片段搜索。
针对以输入、输出参数为查询条件的组合服务片段查询,特点是查询的对象不再是单一的服务,一种可能存在的匹配包含了一个服务实体的输入、另一个服务实体的输出加上他们之间的服务链形成的完整的服务组合的某个片段,这个片段的长度是不一定的, 所以这种查询会根据查询条件而得到变粒度的查询结果。
组合服务片段查询的过程分成两个部分一部分是针对VSC-Tree结构的自顶向下的服务实体匹配查询过程,另一部分是针对服务组合实例的服务片段探索。
步骤1,针对VSC-Tree结构的自顶向下的服务实体匹配查询过程,包括步骤
1.1分别获取作为查询条件的输入、输出参数对应的数字签名Sign(Q).1n和 Sign(Q). out,方法同构建VSC-Tree结构时获取输入、输出参数数字签名的方法;所获得数字签名Sign (Q) · in和Sign (Q) · out的长度分别为M和N。在输入参数的数字签名Sign (Q) · in后补足N位“ I ”,在输出参数的数字签名Sign (Q). out前补足M位“ I ”,分别生产两组M+N 位的数字签名 Sign(Q.1N)和 Sign(Q. OUT)。
1. 2以Sign(Q.1N)和Sign(Q. OUT)作为查询条件的数字签名,同时自顶向下逐层匹配VSC-Tree结构中的非叶节点,当同时符合合匹配条件L1. di&Sign (Q.1N) ==Sign (Q.1N)和 L1. di&Sign(Q. OUT) ==Sign(Q. OUT)时,匹配成功,其中,L1. di 为 VSC-Tree 结构中非叶节点的数字签名。VSC-Tree结构中某层某非叶子节点必须同时匹配Sign(Q.1N)和 Sign(Q. OUT)时,才算匹配成功,将匹配成功的非叶子节点加入候选队列H。
1. 3遍历候选队列H,判断其中的非叶子节点是否为只包含了原子服务的非叶子节点,若是,则表示该节点的子节点中不会存在任何一个服务组合的`片段(即组合服务构成的VS-Tree的根节点),此时,采用以原子服务为查询条件的原子服务搜索方法搜索满足查询条件的原子服务作为搜索结果;否则,采用以组合服务片段为查询条件的组合服务片段搜索方法搜索满足满足查询条件的组合服务片段作为搜索结果。
步骤2,以组合服务片段为查询条件的组合服务片段搜索方法搜索过程,包括步骤
如果步骤I中匹配成功的节点包含了指向自己的边,则可以分为3种情况进行处 理
(I)该节点可能存在两组子节点,其中一组节点集合SI都匹配Sign(Q.1N),另一 组节点集合S2都匹配Sign(Q. OUT),且任取SI中某一节点S1.1,存在一条从S1.1指向集 合S2中某一节点S2. j的边。
(2)该节点可能存在不少于一个子节点同时匹配Sign(Q.1N)和Sign(Q. OUT),且 该节点包含指向自己的边的信息。
(3)该节点可能存在不少于一个子节点同时匹配Sign(Q.1N)和Sign(Q. OUT),且 该节点不包含指向自己的边的信息。
三种情况中(I)和(2)必然会出现一种,因为他们的存在才能使该节点有自己指 向子自己的边。
对于情况(3),进行以原子服务为查询条件的原子服务搜索找到满足查询条件的 原子服务作为搜索结果。
对于情况(2),继续针对VSC-Tree结构进行自顶向下的服务实体匹配查询。
对于情况(1),遍历集合SI,任取一个节点S1.1,同时根据边的关系,找到集合S2 中的满足边的关系的节点S2. j,这里满足边的关系是指存在S1.1的输出参数和S2. j的输 入参数相同,该相同的输出/输入参数用来表示S1.1和S2. j之间的联系。
S2. j 一定是匹配Sign(Q. OUT)的,此时继续自顶向下匹配,Sign(Q.1N)最终会匹 配S1.1的某个位于叶子节点的孩子,设为ENDl,Sign(Q. OUT)最终也会匹配S2. j的某个 位于叶子节点的孩子,设为END2,由于END1、END2都位于一个服务组合实例当中,因此他们 一定存在关联,此时我们对最终匹配Sign (Q.1N)成功的服务实体ENDl进行正向扩展,即从 ENDl开始搜索到END2为止,此时我们根据边的信息一路从ENDl探寻到END2,然后裁减掉 多余分支,得到ENDl到END2的完整组合服务实例片段,这样一直遍历完集合SI的所有节 点为止,最终可以找到所有的组合服务实例片段作为搜索结果返回。
如果从ENDl —路探寻到服务服务实例的输出都没有探索到END2,则不存在这样 的服务片段。
权利要求
1.一种针对海量服务流程的变粒度索引机制的构建方法,其特征是,包括步骤步骤一,采用分层建模方法统一管理获取的服务实体,所述的服务实体为原子服务实体和/或组合服务实体;步骤二,将服务实体包含的输入、输出参数名称转换为对应的二进制编码,并根据所得二进制编码获得对应的服务实体的数字签名;步骤三,根据服务实体包含的输入、输出参数是否存在交集来判断服务实体对是否存在调用关系,将存在调用关系的服务实体对包含的输入、输出参数名称转换为对应的二进制编码,并根据所得二进制编码获得该服务实体对调用关系的数字签名;步骤四,根据服务流程实例中服务实体及服务实体间调用关系的数字签名构建该服务流程实例的变粒度索引结构;步骤五,根据各服务流程实例的变粒度索引结构构建散列索引。
2.如权利要求1所述的针对海量服务流程的变粒度索引机制的构建方法,其特征是 步骤二进一步包括以下子步骤2.1使用哈希函数对服务实体包含的所有输入、输出参数名称分别进行散列,得到各输入、输出参数对应的二进制编码;2.2将服务实体包含的所有输入参数对应的二进制编码按位或运算得到该服务实体输入参数的数字签名,将服务实体包含的所有输出参数对应的二进制编码按位或运算得到该服务实体输出参数的数字签名;2.3将服务实体输入参数和输出参数的数字签名串接,即得到该服务实体的数字签名。
3.如权利要求1所述的针对海量服务流程的变粒度索引机制的构建方法,其特征是 步骤三进一步包括以下子步骤3.1根据服务实体包含的输入、输出参数是否存在交集来判断服务实体之间是否存在调用关系,所包含的输入、输出参数存在交集的服务实体对即为存在调用关系的服务实体对;3. 2采用哈希函数对存在调用关系的服务实体对中起始服务所包含的输入参数名称和被调服务所包含的输出参数名称分别进行散列,得到起始服务各输入参数和被调服务各输出参数对应的二进制编码;3.3将存在调用关系的服务实体对中起始服务包含的所有输入参数对应的二进制编码按位或运算得到起始服务输入参数的数字签名,将存在调用关系的服务实体对中被调服务包含的所有输出参数对应的二进制编码按位或运算得到被调服务输出参数的数字签名;3.4将起始服务输入参数的数字签名和被调服务输出参数的数字签名串接,得到对应的服务实体对调用关系的数字签名。
4.如权利要求2或3所述的针对海量服务流程的变粒度索引机制的构建方法,其特征是所述的哈希函数为复合哈希函数,所述的复合哈希函数是指使用不少于两个的哈希函数对同一个对象进行散列操作。
5.如权利要求1所述的针对海量服务流程的变粒度索引机制的构建方法,其特征是 步骤四是针对服务流程实例进行,进一步包括以下子步骤·4.1以服务流程实例中各服务实体的数字签名为叶子节点构建服务流程实例的数字签名树 S-Tree ;.4.2根据服务流程实例中各服务实体间的调用关系及调用关系的数字签名在S-Tree 中对应的叶子节点之间生成边及边的数字签名,并根据叶子节点之间的边及边的数字签名生成非叶节点之间的边及边的数字签名,从而得到服务流程实例的基于矢量的数字签名树 VS-Tree ;.4.3将web服务中各服务流程实例的VS-Tree结构根节点作为服务实体,以VS-Tree 结构根节点和web服务中所有其他原子服务的数字签名为叶子节点构建数字签名树 S-Tree ;在VS-Tree结构根节点对应的叶子节点上加入一条指向自己的边,并将该叶子节点看成起始服务和被调服务均为自己的服务实体对获取其调用关系的数字签名作为边的数字签名;凡是子节点包含有指向自己的边,其父节点同样包含有指向自己的边,且父节点的指向自己的边的数字签名依据其子节点的指向自己的边的数字签名得到;从而得到服务流程实例的变粒度索引结构VSC-Tree。
6.如权利要求1所述的针对海量服务流程的变粒度索引机制的构建方法,其特征是步骤五具体为以服务流程实例VSC-Tree结构的根节点为叶子节点构建S-Tree结构,即得到的变粒度索引结构的散列索引。
7.基于上述权利要求1 6中任一项所述的变粒度索引机制的服务流程搜索方法,是以原子服务为查询条件的原子服务搜索,其特征是,包括步骤步骤一,基于作为查询条件的原子服务的输入、输出参数名,获取该原子服务的数字签名Sign (Q),获取该原子服务数字签名的方法与构建VSC-Tree时获取服务实体数字签名的方法相同;步骤二,采用“位与”操作与变粒度索引结构的散列索引进行匹配,得到包含有符合查询条件的原子服务的VSC-Tree结构根节点的集合;采用“位与”操作自VSC-Tree结构顶层向下逐层与数字签名Sign(Q)进行匹配,当符合匹配条件Sign (Q) &Sign (V) =Sign (Q)时,匹配成功,其中,Sign(Q)为作为查询条件的原子服务的数字签名,Sign(V)为VSC-Tree结构中各节点的数字签名;步骤三,将与数字签名Sign(Q)匹配成功的非叶节点的子节点继续与数字签名 Sign(Q)按“位与”操作匹配,直至成功匹配到叶子节点,将匹配成功的叶子节点所对应的原子服务作为搜索结果返回;若无法成功匹配到叶子节点,则搜索失败。
8.基于上述权利要求1 6中任一项所述的变粒度索引机制的服务流程搜索方法,是以组合服务片段为查询条件的组合服务片段搜索,其特征是,包括步骤步骤一,根据作为查询条件的组合服务片段中各服务实体的输入和输出参数,获取服务实体对应的数字签名;步骤二,采用“位与”操作将查询条件对应的数字签名与变粒度索引结构的散列索引进行匹配,得到包含有符合查询条件的VSC-Tree结构根节点的集合;采用“位与”操作将各服务实体的数字签名自VSC-Tree结构顶层向下逐层进行匹配,当搜索到与所有服务实体的数字签名均匹配、且包含了指向自身的边的叶子节点,即匹配成功;步骤三,获取以匹配成功的叶子节点数字签名为根节点的VS-Tree,采用“位与”操作将各服务实体的数字签名自VS-Tree结构顶层向下逐层进行匹配,获得当前查询的匹配列表,所述的匹配列表包含各服务实体及与其匹配成功的叶子节点;步骤四,基于作为查询条件的组合服务片段中各服务实体的边的关系,对匹配列表中各匹配成功的叶子节点进行多路匹配查询得到匹配成功的输入和输出参数对集合,从而获取匹配成功的服务实体集,根据实际调用关系裁剪该服务实体集;步骤五,对裁剪后的服务实体集进行多路连接查询,就可得到满足查询条件的服务组合片段。
9.基于上述权利要求1 5中任一项所述的变粒度索引机制的服务流程搜索方法,是以原子服务为查询条件的组合服务片段搜索,其特征是,包括步骤步骤一,分别获取作为查询条件的输入、输出参数对应的数字签名;步骤二,采用“位与”操作将查询条件对应的数字签名与变粒度索引结构的散列索引进行匹配,得到包含有符合查询条件的VSC-Tree结构根节点的集合;采用“位与”操作将输入和输出参数的数字签名同时自顶向下逐层匹配VSC-Tree结构中的非叶子节点,当同时符合匹配条件 L1. di&Sign (Q.1N) ==Sign(Q.1N)和 L1. di&Sign (Q. OUT) ==Sign (Q. OUT)时,匹配成功,其中,L1. di为VSC-Tree结构中非叶节点的数字签名;步骤三,判断所有匹配成功的非叶节点是否为只包含了原子服务的非叶子节点,若是, 则采用权利要求6所述的方法,进行以原子服务为查询条件的搜索;否则,采用权利要求7 所述的方法,进行以组合服务片段为查询条件的组合服务片段搜索。
全文摘要
本发明公开了一种基于变粒度索引的服务流程搜索和重用方法,该方法通过构建变粒度索引机制,提出的基于构建的变粒度索引机制的服务搜索和重用方法中,操作的对象将不再局限于单一服务,而是任意粒度的服务流程;同时,自动服务组合的操作单元也能够有效利用以往被编辑可调用的组合服务流程片段,去掉反复的服务组合验证、匹配和调试过程,直接从大量的服务流程实例片段中选取最合适的片段,快速组合形成更大粒度、满足用户更复杂需求的网络化软件,反过来提高自动服务组合结果的实际可执行程度,从而最终形成良性循环。
文档编号G06F17/30GK103064952SQ20121058391
公开日2013年4月24日 申请日期2012年12月28日 优先权日2012年12月28日
发明者曾承, 卢舟 申请人:武汉大学