專利名稱:基于變粒度索引的服務流程搜索和重用方法
基于變粒度索引的服務流程搜索和重用方法技術(shù)領域
本發(fā)明屬于服務計算領域,具體涉及一種基于變粒度索引的服務流程搜索和重用 方法。
背景技術(shù):
Web服務作為一種標準的、跨平臺的通用模型已經(jīng)成為網(wǎng)絡化軟件發(fā)展的重要組 成部分。而服務組合就是通過基本W(wǎng)eb服務之間的相互通信和協(xié)作,把相對獨立及簡單的 原子服務組合成具有新功能的大粒度服務的過程,以產(chǎn)生滿足服務請求者更高需求的“增 值”服務。這種根據(jù)用戶需求,將單一 Web服務,甚至以往成功組合過的服務作為組件,按照 一定規(guī)則和模式重新組合起來的技術(shù)已經(jīng)成為未來網(wǎng)絡化軟件的研究熱點,它能大幅提高 原子服務和服務流程的可重用性和利用率,提高軟件開發(fā)的效率,為服務提供者和服務使 用者均帶來受益。
通過對原子服務進行服務組合得到組合服務。然而,傳統(tǒng)的組合服務流程搜索只 能返回整個服務流程實例,即將組合服務視為單一服務進行檢索,不能實現(xiàn)對服務流程實 例片段的定位,這勢必很大程度上限制服務化所帶來的優(yōu)勢。此外,自動服務組合在近幾年 的迅猛發(fā)展,已經(jīng)能夠?qū)崿F(xiàn)一定程度的按需服務,即根據(jù)用戶需求動態(tài)高效地搜索、擇優(yōu)、 組合互聯(lián)網(wǎng)上的Web服務,滿足用戶更為復雜的軟件需求。但是,自動服務組合的結(jié)果只是 構(gòu)建了理論上的服務可組合關(guān)系,盡管已經(jīng)大幅縮減了軟件開發(fā)的時間,但它還無法直接 被用戶使用,需要一定程度的后期編程。這就使得基于自動服務組合的結(jié)果,再經(jīng)過編碼加 工,并且可以直接調(diào)用的組合流程顯得更為珍貴,如何有效利用或重用這些可調(diào)用的組合 服務流程實例片段成為挑戰(zhàn)性問題。
傳統(tǒng)的服務搜索一般是通過數(shù)據(jù)庫進行存儲,然后建立全文索引提高查詢效率, 由于無法利用組合服務的自身特性,在服務的搜索過程中,傳統(tǒng)服務查詢的方式和效率都 受到了制約。發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)存在的不足,本發(fā)明通過引入變粒度索引來充分利用組合服務的自 身特性,將組合服務的查詢問題轉(zhuǎn)換成子圖匹配問題,并通過字符編碼和建立搜索結(jié)構(gòu)對 服務流程實例片段進行高效定位,從而實現(xiàn)對海量組合服務流程片段的高效查詢。同時,本 發(fā)明還針對服務流程的特性制定了不同查詢方式,以滿足用戶的不同需求。
為了解決上述技術(shù)問題,本發(fā)明的技術(shù)方案如下
—種針對海量服務流程的變粒度索引機制的構(gòu)建方法,包括步驟
步驟一,采用分層建模方法統(tǒng)一管理獲取的服務實體,所述的服務實體為原子服 務實體和/或組合服務實體;
步驟二,將服務實體包含的輸入、輸出參數(shù)名稱轉(zhuǎn)換為對應的二進制編碼,并根據(jù) 所得二進制編碼獲得對應的服務實體的數(shù)字簽名;
步驟三,根據(jù)服務實體包含的輸入、輸出參數(shù)是否存在交集來判斷服務實體對是 否存在調(diào)用關(guān)系,將存在調(diào)用關(guān)系的服務實體對包含的輸入、輸出參數(shù)名稱轉(zhuǎn)換為對應的 二進制編碼,并根據(jù)所得二進制編碼獲得該服務實體對調(diào)用關(guān)系的數(shù)字簽名;
步驟四,根據(jù)服務流程實例中服務實體和服務實體間調(diào)用關(guān)系的數(shù)字簽名構(gòu)建該 服務流程實例的變粒度索引結(jié)構(gòu);
步驟五,根據(jù)各服務流程實例的變粒度索引結(jié)構(gòu)構(gòu)建散列索引。
上述步驟一進一步包括以下子步驟
1.1定義原子服務和組合服務實體存儲的三個層次服務、參數(shù)和路徑,具體如 下
服務定義為{服務ID,服務名稱,描述};
參數(shù)定義為{參數(shù)ID,參數(shù)名稱,所屬服務,輸入還是輸出,描述};
路徑定義為{路徑ID,路徑起始服務,起始參數(shù),路徑結(jié)束服務,結(jié)束參數(shù),描 述};
1. 2將獲取的服務實體均采用以上定義分層存儲到數(shù)據(jù)庫中,所述的服務實體為 原子服務實體和/或組合服務實體。
上述步驟二進一步包括以下子步驟
2.1使用哈希函數(shù)對服務實體包含的所有輸入、輸出參數(shù)名稱分別進行散列,得到 各輸入、輸出參數(shù)對應的二進制編碼;
2. 2將服務實體包含的所有輸入?yún)?shù)對應的二進制編碼按位或運算得到該服務實 體輸入?yún)?shù)的數(shù)字簽名,將服務實體包含的所有輸出參數(shù)對應的二進制編碼按位或運算得 到該服務實體輸出參數(shù)的數(shù)字簽名;
2. 3將服務實體輸入?yún)?shù)和輸出參數(shù)的數(shù)字簽名串接,即得到該服務實體的數(shù)字 簽名。
假設服務實體V1,其數(shù)字簽名Sign(V1)可表示為Sign (V1) = [Sign (V1) · in, Sign(V1). out],其中,Sign(V1).1n表示服務實體V1的輸入?yún)?shù)的數(shù)字簽名,其為服務實體 V1所包含的所有輸入?yún)?shù)對應的二進制編碼按位或運算得到Jign(V1)-OUt表示服務實體 V1的輸出參數(shù)的數(shù)字簽名,其為服務實體V1所包含的所有輸出參數(shù)對應的二進制編碼按位 或運算得到。
為了避免后期索引的錯誤,上述步驟2.1中可采用復合哈希函數(shù)對服務實體包含 的各輸入、輸出參數(shù)名稱進行散列,所述的復合哈希函數(shù)是指使用不少于兩個的哈希函數(shù) 對同一個對象進行散列操作,以避免不同服務實體的輸入、輸出參數(shù)名稱被散列為相同的 二進制編碼,造成后期索引的錯誤。
上述步驟三進一步包括以下子步驟
3.1根據(jù)服務實體包含的輸入、輸出參數(shù)是否存在交集來判斷服務實體之間是否 存在調(diào)用關(guān)系,所包含的輸入、輸出參數(shù)存在交集的服務實體對即為存在調(diào)用關(guān)系的服務 實體對;
3. 2采用哈希函數(shù)對存在調(diào)用關(guān)系的服務實體對中起始服務所包含的輸入?yún)?shù)名 稱和被調(diào)服務所包含的輸出參數(shù)名稱分別進行散列,得到起始服務各輸入?yún)?shù)和被調(diào)服務 各輸出參數(shù)對應的二進制編碼;
3. 3將存在調(diào)用關(guān)系的服務實體對中起始服務包含的所有輸入?yún)?shù)對應的二進制 編碼按位或運算得到起始服務輸入?yún)?shù)的數(shù)字簽名,將存在調(diào)用關(guān)系的服務實體對中被調(diào) 服務包含的所有輸出參數(shù)對應的二進制編碼按位或運算得到被調(diào)服務輸出參數(shù)的數(shù)字簽 名;
3. 4將起始服務輸入?yún)?shù)的數(shù)字簽名和被調(diào)服務輸出參數(shù)的數(shù)字簽名串接,得到 對應的服務實體對調(diào)用關(guān)系的數(shù)字簽名。
對于服務流程實例中一對存在調(diào)用關(guān)系的服務實體V1和V2,其中,V2為起始服務, V1為被調(diào)服務,則該服務實體對調(diào)用關(guān)系的數(shù)字簽名Sign (e) = LSign(V1) .out,Sign(V2).1n],其中,e表不起始服務V2和被調(diào)服務V1之間的調(diào)用關(guān)系;Sign (V1). out表不被調(diào)服務 V1輸出參數(shù)的數(shù)字簽名,其為被調(diào)服務V1包含的所有輸出參數(shù)對應的二進制編碼按位或運 算得到;Sign(V2).1n表示起始服務V2輸入?yún)?shù)的數(shù)字簽名,其為起始服務%所包含的所有 輸入?yún)?shù)對應的二進制編碼按位或運算得到。
為了避免后期索引的錯誤,上述步驟3. 2中可采用復合哈希函數(shù)對存在調(diào)用關(guān)系 的服務實體對中起始服務所包含的輸入?yún)?shù)名稱和被調(diào)服務所包含的輸出參數(shù)名稱進行 散列,所述的復合哈希函數(shù)是指使用不少于兩個的哈希函數(shù)對同一個對象進行散列操作, 以避免不同服務實體的輸入、輸出參數(shù)名稱被散列為相同的二進制編碼,造成后期索引的錯誤。
上述步驟四進一步包括以下子步驟
4.1根據(jù)服務流程實例中服務實體的數(shù)字簽名,構(gòu)建服務流程實例的數(shù)字簽名樹 S-Tree (Signature Tree)結(jié)構(gòu)。
S-Tree結(jié)構(gòu)的構(gòu)建是葉子節(jié)點的重復插入過程,包括葉子節(jié)點插入位置的選取、 非葉子節(jié)點分裂、數(shù)字簽名自底向上的更新。
葉子節(jié)點插入位置的選取是一個自頂向下的匹配過程,該匹配過程是待插入的葉 子節(jié)點和S-Tree結(jié)構(gòu)中已有的非葉子節(jié)點的數(shù)字簽名的位與運算,保證插入的葉子節(jié)點 和S-Tree結(jié)構(gòu)中已有的非葉子節(jié)點的數(shù)字簽名之間滿足最短海明距離。在S-Tree結(jié)構(gòu)中 葉子節(jié)點為各服務實體的數(shù)字簽名,葉子節(jié)點即可代表服務實體。
在葉子節(jié)點的插入過程中,若葉子節(jié)點已滿,就必須進行非葉子節(jié)點分裂,在已生 成的S-Tree結(jié)構(gòu)基礎上,確保分裂得到的非葉子節(jié)點之間滿足最大海明距離。
完成葉子節(jié)點插入后,整棵S-Tree結(jié)構(gòu)的數(shù)字簽名都需自下而上進行更新,保證 各父節(jié)點的數(shù)字簽名是其子節(jié)點數(shù)字簽名的“位或”計算結(jié)果。
4. 2根據(jù)服務流程實例中服務實體對調(diào)用關(guān)系的數(shù)字簽名,構(gòu)建基于矢量的數(shù)字 簽名樹結(jié)構(gòu),本發(fā)明中,將基于矢量的數(shù)字簽名樹結(jié)構(gòu)簡稱為VS-Tree結(jié)構(gòu)。
根據(jù)組合服務流程中服務實體對調(diào)用關(guān)系的數(shù)字簽名,將該調(diào)用關(guān)系數(shù)字簽名添 加到步驟4.1生成的S-Tree結(jié)構(gòu)中用以標明服務實體之間的調(diào)用關(guān)系。同時根據(jù)葉子節(jié)點 所對應的服務實體調(diào)用關(guān)系的數(shù)字簽名來生成非葉節(jié)點之間邊的數(shù)字簽名,對于每一對非 葉節(jié)點,彼此之間邊的數(shù)字簽名都是其子節(jié)點之間調(diào)用關(guān)系的數(shù)字簽名“位或”計算結(jié)果。 這樣就生成了服務流程實例的VS-Tree (Vector Signature Tree,矢量數(shù)字簽名樹)結(jié)構(gòu)。
4. 3基于VS-Tree結(jié)構(gòu)構(gòu)建基于矢量的數(shù)字簽名組合樹結(jié)構(gòu),即得到服務流程實 例的變粒度索引結(jié)構(gòu)VSC-Tree。
將web服務中所有服務流程實例的VS-Tree結(jié)構(gòu)根節(jié)點作為服務實體,以VS-Tree 結(jié)構(gòu)根節(jié)點和web服務中所有其他原子服務的數(shù)字簽名為葉子節(jié)點構(gòu)建數(shù)字簽名樹 S-Tree,并在VS-Tree結(jié)構(gòu)根節(jié)點對應的葉子節(jié)點上加入一條指向自己的邊,采用步驟三 中所述的方法計算該邊所對應的數(shù)字簽名,具體為將上述根節(jié)點看成起始服務和被調(diào)服 務均為自己的組合服務實體對進行數(shù)字簽名計算,并用來標識上述指向自己的邊。采用該 方法來區(qū)分原子服務和組合服務。凡是子節(jié)點包含有指向自己的邊,其父節(jié)點同樣包含有 指向自己的邊,且父節(jié)點的指向自己的邊的數(shù)字簽名為子節(jié)點的指向自己的邊的數(shù)字簽名 的“位或”結(jié)果。
采用上述方法,從而得到服務流程實例的變粒度索引結(jié)構(gòu)VSC-Tree。
VSC-Tree結(jié)構(gòu)是結(jié)合了數(shù)字簽名和S-Tree結(jié)構(gòu)各自特點的一種樹形變粒度索引 結(jié)構(gòu),其實質(zhì)為層次化網(wǎng)狀結(jié)構(gòu),其特點是各葉子節(jié)點為各原子服務的數(shù)字簽名,而任何一 個父節(jié)點的數(shù)字簽名是其所有子節(jié)點數(shù)字簽名的“位或”計算結(jié)果,VSC-Tree的數(shù)據(jù)結(jié)構(gòu)保 證了對組合服務查詢的線性時間復雜度。
上述步驟五根據(jù)各服務流程實例的VSC-Tree結(jié)構(gòu)根節(jié)點,采用S-Tree結(jié)構(gòu)構(gòu)建 散列索引,
該步驟進一步包括以下子步驟
5-1以各服務流程實例VSC-Tree結(jié)構(gòu)的根節(jié)點為葉子節(jié)點構(gòu)建S-Tree結(jié)構(gòu);
5-2構(gòu)建的S-Tree結(jié)構(gòu)的葉子節(jié)點存儲的是所有與該葉子節(jié)點具有相同數(shù)字簽 名的服務流程實例的集合。
一種基于上述構(gòu)建的變粒度索引VSC-Tree的服務流程搜索方法,可實現(xiàn)服務組 合的快速查詢,可針對不同查詢條件給出不同的搜索方法,包含
(I)以原子服務為查詢條件的原子服務搜索方法;
(2)以輸入、輸出為查詢條件的搜索方法;
(3)以組合服務片段為查詢條件的組合服務片段搜索方法。
上述以原子服務為查詢條件的搜索方法,包括步驟
1-1基于作為查詢條件的原子服務的輸入、輸出參數(shù)名,獲取該原子服務的數(shù)字簽 名Sign (Q),獲取該原子服務的數(shù)字簽名的方法與構(gòu)建VSC-Tree時獲取服務實體數(shù)字簽名 的方法相同;
1. 2采用“位與”操作將查詢條件對應的數(shù)字簽名與變粒度索引結(jié)構(gòu)的散列索引進 行匹配,得到包含有符合查詢條件的原子服務的VSC-Tree結(jié)構(gòu)根節(jié)點的集合;對該集合中 的各VSC-Tree結(jié)構(gòu),采用“位與”操作自VSC-Tree結(jié)構(gòu)頂層向下逐層與數(shù)字簽名Sign(Q) 進行匹配,當符合匹配條件Sign (Q) &Sign (V) =Sign (Q)時,匹配成功,其中,Sign (Q)為作為 查詢條件的原子服務的數(shù)字簽名,Sign(V)為VSC-Tree結(jié)構(gòu)中各節(jié)點的數(shù)字簽名;
1. 3將與數(shù)字簽名Sign(Q)匹配成功的非葉節(jié)點的子節(jié)點繼續(xù)與數(shù)字簽名 Sign(Q)按“位與”操作匹配,直至成功匹配到葉子節(jié)點,將匹配成功的葉子節(jié)點所對應的原 子服務作為搜索結(jié)果返回;若無法成功匹配到葉子節(jié)點,則搜索失敗。
上述以輸入、輸出為查詢條件的組合服務片段搜索方法,包括步驟
2-1分別獲取作為查詢條件的輸入、輸出參數(shù)對應的數(shù)字簽名,所獲取的輸入?yún)?shù) 的數(shù)字簽名長度為M,所獲取的輸出參數(shù)的數(shù)字簽名長度為N ;
2. 2將輸入和輸出參數(shù)的數(shù)字簽名進行位擴展,用“I”補足輸入?yún)?shù)數(shù)字簽名的 后部和輸出參數(shù)數(shù)字簽名的前部,得到長度均為N+M的輸入?yún)?shù)數(shù)字簽名Sign(Q.1N)和輸 出參數(shù)數(shù)字簽名Sign (Q. OUT);
2. 3采用“位與”操作將查詢條件對應的數(shù)字簽名與變粒度索引結(jié)構(gòu)的散列索 引進行匹配,得到包含有符合查詢條件的VSC-Tree結(jié)構(gòu)根節(jié)點的集合;對該集合中的各 VSC-Tree結(jié)構(gòu),采用“位與”操作將輸入和輸出參數(shù)的數(shù)字簽名同時自頂向下逐層匹配 VSC-Tree 結(jié)構(gòu),當同時符合匹配條件 L1. di&Sign (Q.1N) ==Sign (Q.1N)和 L1. di&Sign (Q. OUT) ==Sign(Q. OUT)時,匹配成功,其中,L1. di為VSC-Tree結(jié)構(gòu)中各非葉節(jié)點的數(shù)字簽 名;
2. 4判斷所有匹配成功的非葉節(jié)點是否為只包含了原子服務的非葉子節(jié)點,若是, 則進行以原子服務為查詢條件的搜索;否則,進行以組合服務片段為查詢條件的組合服務 片段搜索。
上述以組合服務片段為查詢條件的組合服務片段搜索方法包含如下步驟
3-1對VSC-Tree中S-Tree部分的匹配查詢,其步驟為
(I)根據(jù)作為查詢條件的組合服務片段中服務實體的輸入和輸出參數(shù),獲取服務 實體對應的數(shù)字簽名,所獲取的輸入?yún)?shù)的數(shù)字簽名長度為M,所獲取的輸出參數(shù)的數(shù)字簽 名長度為N ;補足輸入?yún)?shù)數(shù)字簽名的后部和輸出參數(shù)數(shù)字簽名的前部,得到長度均為N+M 的輸入?yún)?shù)數(shù)字簽名和輸出參數(shù)數(shù)字簽名;
(2)采用“位與”操作將查詢條件對應的數(shù)字簽名與變粒度索引結(jié)構(gòu)的散列索 引進行匹配,得到包含有符合查詢條件的VSC-Tree結(jié)構(gòu)根節(jié)點的集合;對該集合中的各 VSC-Tree結(jié)構(gòu),采用“位與”操作將各服務實體的數(shù)字簽名自VSC-Tree結(jié)構(gòu)頂層向下逐層 進行匹配,當搜索到與所有服務實體的數(shù)字簽名均匹配、且包含了指向自身的邊的葉子節(jié) 點,即匹配成功;
3-2對片段進行整體的詳細匹配查詢,其步驟為
(I)獲取以匹配成功的葉子節(jié)點數(shù)字簽名為根節(jié)點的VS-Tree,采用“位與”操作 將各服務實體的數(shù)字簽名自VS-Tree結(jié)構(gòu)頂層向下逐層進行匹配,獲得當前查詢的匹配列 表,所述的匹配列表包含各服務實體及與其匹配成功的葉子節(jié)點;
(2)基于作為查詢條件的組合服務片段中各服務實體的邊的關(guān)系,對匹配列表中 各匹配成功的葉子節(jié)點進行多路匹配查詢得到匹配成功的輸入和輸出參數(shù)對集合,從而獲 取匹配成功的服務實體集,根據(jù)實際調(diào)用關(guān)系裁剪匹配成功的服務實體集;
(3)對裁剪后的服務實體集進行多路連接查詢,就可得到滿足查詢條件的服務組 合片段。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下特點
本發(fā)明通過構(gòu)建變粒度索引機制,提出的基于構(gòu)建的變粒度索引機制的服務搜索 和重用方法中,操作的對象將不再局限于單一服務,而是任意粒度的服務流程;同時,自動 服務組合的操作單元也能夠有效利用以往被編輯可調(diào)用的組合服務流程片段,去掉反復的 服務組合驗證、匹配和調(diào)試過程,直接從大量的服務流程實例片段中選取最合適的片段,快 速組合形成更大粒度、滿足用戶更復雜需求的網(wǎng)絡化軟件,反過來提高自動服務組合結(jié)果 的實際可執(zhí)行程度,從而最終形成良性循環(huán)。
本發(fā)明方法可以大幅度提高服務查詢效率,在網(wǎng)絡化軟件開發(fā)環(huán)境下具有重要意 義。同時,由于變粒度索引機制的特點,這樣的服務流程片段的查詢,大大豐富了搜索結(jié)果 的內(nèi)容。為更大粒度的服務組合和重用奠定基礎,
圖1 是 Web IDE (Integerated Development Environment,集成開發(fā)環(huán)境)功能示意圖2是組合服務實例;
圖3是具體實施中所構(gòu)建的S-Tree結(jié)構(gòu)示例;
圖4是具體實施中所構(gòu)建的基于VSC-Tree的變粒度索引示例;
圖5是具體實施中所構(gòu)建的VS-Tree結(jié)構(gòu)示例。
具體實施方式
為實現(xiàn)針對海量服務流程的變粒度索引機制,本發(fā)明定義了服務實例和服務組合的形式化描述,實現(xiàn)了統(tǒng)一的數(shù)字化簽名編碼方案,并在這兩者的基礎上設計了 VSC-Tree (Vector Signature Combination Tree,矢量數(shù)字簽名組合樹)數(shù)據(jù)結(jié)構(gòu),解決了原子服務 和組合服務的統(tǒng)一存儲與維護問題,最終能夠按需實現(xiàn)針對百萬、甚至千萬級別的原子服 務和組合服務流程的高效檢索、最大化重用,并能綜合服務的非功能性約束(響應時間、吞 吐量、價格等),提供給用戶最佳的服務流程。
本發(fā)明提出了一種基于變粒度索引的服務流程搜索和重用方法,其中的變粒度索 引是基于數(shù)字簽名和層次化網(wǎng)狀結(jié)構(gòu)來構(gòu)建的,本發(fā)明方法的基本原理及其特點為
傳統(tǒng)的組合服務流程搜索主要通過數(shù)據(jù)庫進行存儲,然后通過建立全文索引來實 現(xiàn)查詢效率的提高,這種搜索方法無法利用服務組合的自身特性,搜索的方式和效率都受 到了制約。將變粒度索引用于海量服務流程檢索,將組合服務的查詢問題轉(zhuǎn)化為子圖匹配 問題,結(jié)合服務組合之間的相互關(guān)系以及包含數(shù)字簽名的層次化網(wǎng)狀結(jié)構(gòu)的特點構(gòu)建變粒 度索引結(jié)構(gòu);以構(gòu)建的變粒度索引結(jié)構(gòu)為基礎,用戶根據(jù)現(xiàn)有組合服務片段或者輸入輸出 需求在已有的原子服務和組合服務庫中檢索需要的組合服務片段,從而可實現(xiàn)不同粒度的 檢索結(jié)果和高效的檢索效率。
給定一個服務流程實例,將其表示為圖2所示的有向無環(huán)圖的形式。首先構(gòu)建該 服務流程實例的變粒度索引結(jié)構(gòu),具體步驟如下
—、實現(xiàn)統(tǒng)一的服務存儲模式
步驟1. 1,Web服務的獲取
在變粒度索引體系結(jié)構(gòu)中,Web服務主要來源于網(wǎng)絡爬蟲的爬取和對爬取到的 WSDL (Web Services Description Language)的解析,解析得到的是單一的Web服務及其 包含的輸入、輸出參數(shù);所得的Web服務實體包括不少于I個的原子服務和/或組合服務。
步驟1. 2,對解析得到的Web服務實體實現(xiàn)統(tǒng)一的存儲模式
假設解析得到的Web服務實體為圖2給出的Web組合服務實例,下面將選取一個 服務、一個參數(shù)和一條路徑來說明Web服務的存儲模式
選取的服務為getCityRestaurant,該服務可表示為
{ID=1,服務名稱getCityRestaurant,描述獲取對應城市的參觀信息,其他};
選取上述服務的輸出參數(shù)faddress,該輸出參數(shù)可表示為
{ID=1,參數(shù)名稱faddress,所屬服務ID=1,輸入或輸出輸出,描述相應餐館的地址};
選取的路徑的起始服務為getCityRestaurant,結(jié)束服務為getTripRoute,該路徑可表示為{ID=1,路徑起始服務getCityRestaurant,起始參數(shù)faddress,路徑結(jié)束服務getTripRoute,結(jié)束參數(shù)faddress,描述獲取餐館地址傳遞給決定旅行路線的服務}。
將Web服務實體中各服務描述為上述統(tǒng)一模式,按統(tǒng)一模式將分散的、獨立的Web 服務實體分層次地、關(guān)聯(lián)存儲于一個關(guān)系型數(shù)據(jù)庫中,實現(xiàn)了對服務的持久化存儲,也奠定了構(gòu)建變粒度索引和服務流程檢索的基礎。
二、將各服務實體包含的輸入輸出參數(shù)轉(zhuǎn)換為對應的二進制編碼,并根據(jù)二進制編碼獲得服務實體的數(shù)字簽名。
步驟2. 1,對每一個服務實體,即步驟1.1所獲取的各單一 Web服務,對其包含的輸入、輸出參數(shù)名稱使用復合哈希函數(shù)分別進行散列,生成各輸入、輸出參數(shù)對應的二進制編碼;所述的復合哈希函數(shù)是指使用不少于兩個的哈希函數(shù)對同一個對象進行散列操作,可避免不同的參數(shù)名稱被散列為相同的二進制編碼,避免后期索引出錯,提高查詢的準確性。
在利用哈希函數(shù)對參數(shù)名稱進行散列時,引進2個變量m和M,M表示生產(chǎn)的二進制編碼的位數(shù),m表示生成二進制編碼中I的位數(shù)。在進行散列前,先將參數(shù)名稱劃分為等長的η位小段,例如,對名稱為faddress的輸出參數(shù),取n=3,則可以劃分為如下的6個3位小段{(fad), (add), (ddr),(dre),(res), (ess)}。對每個小段均用同一哈希函數(shù)分別進行散列得到對應的一組二進制編碼{gl,g2, g3,…g6}。將長度為M的二進制編碼的第{gi MOD Μ}位設置為1,其他為0,i = 1,2,…,6,MOD為取余數(shù)操作。
選定Simple_hash哈希函數(shù),取M=12,得到的faddress參數(shù)對應的二進制編碼 Signl(faddress)
Signl (faddress)=1000 0010 1101
以此對服務實體中的其余輸入、輸出參數(shù)名稱散列成對應的二進制編碼,根據(jù)所得二進制編碼的中“I”的個數(shù)來判斷散列結(jié)果是否理想,在本具體實施中,若所得二進制編碼中“I”的個數(shù)超過了總位數(shù)的60%,則認為散列結(jié)果不理想。若得到不理想的散列結(jié)果, 可再選取另一個哈希函數(shù)對該參數(shù)名稱進行散列,串接兩種散列結(jié)果作為該參數(shù)的新數(shù)字簽名,這樣就可以大大避免不同參數(shù)產(chǎn)生相同數(shù)字簽名的情況。
例如,可再選取RS_hash哈希函數(shù)對faddress參數(shù)進行散列,取M=12,得到的 faddress 對應的二進制編碼 Sign2 (faddress)
Sign2(faddress)=1001 1010 0001
將Signl (faddress)、Sign2 (faddress)]串接后作為輸出參數(shù) faddress 的數(shù)字簽名。
步驟2. 2,將服務實體包含的所有輸入?yún)?shù)對應的二進制編碼按位或運算得到該服務實體輸入?yún)?shù)的數(shù)字簽名,將服務實體包含的所有輸出參數(shù)對應的二進制編碼按位或運算得到該服務實體輸出參數(shù)的數(shù)字簽名;
步驟2. 3,服務實體的數(shù)字簽名為它的輸入?yún)?shù)和輸出參數(shù)的數(shù)字簽名的串接。
下面將以服務實體getCityResturant為例來詳細說明其數(shù)字簽名的獲取過程, 服務實體getCityResturant為圖2所示的組合服務中的服務實體。
參見圖2,服務實體getCityResturant的輸入?yún)?shù)有city和cookstyle,輸出參 數(shù)有faddress、restaurant和comment,假定采用哈希函數(shù)散列后各參數(shù)的數(shù)字簽名為
輸入?yún)?shù)city 的數(shù)字簽名 Sign(City)=IOOO 0010 1100 ;
輸入?yún)?shù)cookstyle 的數(shù)字簽名 Sign (cookstyle) =0100 0010 1101 ;
輸出參數(shù)faddress 的數(shù)字簽名 Sign (faddress) =1000 0010 1101 ;
輸出參數(shù)restaurant 的數(shù)字簽名 Sign (resturant) =1000 0010 1110 ;
輸出參數(shù)commentSign(comment) =1000 0010 1001。
將服務實體getCityResturant的各輸入?yún)?shù)的數(shù)字簽名進行位或運算,得到 getCityResturant 的輸入?yún)?shù)的數(shù)字簽名 Sign (getCityResturant) · in
Sign (getCityResturant).1n=Sign (city) Sign (cookstyle)=1000 0010 1100|0100 0010 1101
=1100 0010 1101
將服務實體getCityResturant的各輸出參數(shù)的數(shù)字簽名進行位或運算,得到 getCityResturant 的輸出參數(shù)的數(shù)字簽名 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的輸入?yún)?shù)和輸出參數(shù)的數(shù)字簽名串接,即得到 的 getCityResturant 的數(shù)字簽名 Sign (getCityResturant) =1100 0010 1101 1000 0010 1111。
按照上述方法獲得組合服務中各服務實體的數(shù)字簽名。
三、將組合服務中服務與服務之間的調(diào)用關(guān)系轉(zhuǎn)化為對應的二進制編碼,作為服 務實體之間調(diào)用關(guān)系的數(shù)字簽名。
步驟3. 1,對組合服務中每一對服務(包括起始服務和被調(diào)服務),采用復合哈希函 數(shù)分別對起始服務的輸入?yún)?shù)和被調(diào)服務的輸出參數(shù)進行散列,得到各參數(shù)對應的二進制 編碼。所述的復合哈希函數(shù)是指使用不少于兩個的哈希函數(shù)對同一個對象進行散列操作, 可避免不同的參數(shù)名稱被散列為相同的二進制編碼,避免后期索引出錯,提高查詢的準確 性。
步驟3. 2,對起始服務的所有輸入?yún)?shù)對應的二進制編碼按位或運算得到起始服 務輸出參數(shù)的數(shù)字簽名,該數(shù)字簽名為該服務實體對調(diào)用關(guān)系的數(shù)字簽名Sign(e)的前N 位;對被調(diào)服務的所有輸入?yún)?shù)對應的二進制編碼按位或運算得到被調(diào)服務輸出參數(shù)的數(shù) 字簽名,該數(shù)字簽名為該服務實體調(diào)用關(guān)系的數(shù)字簽名Sign(e)的后M位。
對于給定的服務組合實現(xiàn)對邊WSC.1N — getCityResturan,采用哈希函數(shù)對起 始服務WSC.1N輸出參數(shù)city和cookstyle分別進行散列得到各自對應的二進制編碼 Sign (city)和 Sign (cookstyle),對 Sign (city)和 Sign (cookstyle)進行位或運算,得到起始服務WSC.1N輸出參數(shù)的數(shù)字簽名Sign(WSC). out
Sign (WSC). out=Sign(city) |Sign (cookstyle)=1000 0010 1100|0100 0010 1101
=1100 0010 1101
采用哈希函數(shù)對被調(diào)服務getCityResturant輸入?yún)?shù)city和cookstyle分別進行散列得到各自對應的二進制編碼Sign(city)和Sign (cookstyle),對Sign (city)和 Sign (cookstyle)進行位或運算,得到被調(diào)服務getCityResturant輸入?yún)?shù)的數(shù)字簽名 Sign(getCityResturant).1n
Sign (getCityResturant).1n=Sign (city) Sign (cookstyle) =1000 0010 1100|0100 0010 1101
=1100 0010 1101
步驟3. 3,將起始服務輸入?yún)?shù)和被調(diào)服務輸出參數(shù)的數(shù)字簽名串接,最終得到 N+M長度的組合服務內(nèi)服務實體對調(diào)用關(guān)系的數(shù)字簽名。
對于服務流程中的一條服務調(diào)用關(guān)系邊e=〈Vl,V2>,其中,Vl為被調(diào)服務,V2為起始服務該調(diào)用關(guān)系所對應的數(shù)字簽名為Vl輸出參數(shù)數(shù)字簽名和V2輸入?yún)?shù)數(shù)字簽名的串接。
對服務調(diào)用關(guān)心邊e=〈WSC.1N, getCityResturant〉,其數(shù)字簽名Sign(e)為
Sign(e) = [Sign (WSC). out, Sign(getCityResturant).1n]=1100 0010 1101 1100 0010 1101。
對組合服務中各服務之間的所有調(diào)用關(guān)系均進行相應的編碼,分別得到各服務之間調(diào)用關(guān)系對應的數(shù)字簽名。
四、構(gòu)建服務流程實例的變粒度索引結(jié)構(gòu)。
步驟4. 1,根據(jù)服務實體的數(shù)字簽名構(gòu)建S-Tree結(jié)構(gòu),S-Tree是一種經(jīng)典的能夠?qū)崿F(xiàn)高速查詢且保持平衡性的樹形結(jié)構(gòu)。
構(gòu)建過程中,在插入葉子節(jié)點前需選取合適的葉子節(jié)點插入點,本發(fā)明中保證插入的葉子節(jié)點和S-Tree結(jié)構(gòu)中已有的非葉子節(jié)點的數(shù)字簽名之間滿足最短海明距離 δ (s, s')
δ (s, S,) = τ (s V S,)- τ (s Λ S,)
其中,
s表示待插入S-Tree結(jié)構(gòu)的某葉子節(jié)點的數(shù)字簽名;
S,表示S-Tree結(jié)構(gòu)中已有的某非葉子節(jié)點的數(shù)字簽名;
δ (s,s,)表示s和S,之間的海明距離,為一具體數(shù)值;
τ (s V s’)表示s和S,做“位或”操作得到的二進制編碼中I的數(shù)量;
τ (s Λ s’)表示s和S,做“位與”操作得到的二進制編碼中I的數(shù)量。
保證最短海明距離的目的是為了保證服務實體間相近的數(shù)字簽名能夠被維護在同樣的父節(jié)點之下,這樣就能保證生成的S-Tree結(jié)構(gòu)能夠維護起盡量多的服務實體,在實現(xiàn)快速匹配查詢時可以保證查詢效率。自頂向下遍歷S-Tree匹配最短海明距離的非葉節(jié)點,直到找到合適葉子節(jié)點,該位置就為待插入的位置。
在葉子節(jié)點的插入過程中,若S-Tree結(jié)構(gòu)中葉子節(jié)點已滿,則需要進行節(jié)點分裂來保證整棵S-Tree樹的平衡性。針對包含了三個參數(shù)K..L,h(K..k,hCNo)的個多路高度平衡樹,N0為自然數(shù)集合,K、k為預設的數(shù)值,其中
( I)所有從樹的根節(jié)點到葉子節(jié)點的路徑都有同樣的長度h ;
(2)樹的根節(jié)點至少有2個孩子,至多有K個孩子,除非它是葉子節(jié)點;
(3)除了根節(jié)點以外,所有的節(jié)點最少有k個孩子,最多有K個孩子;
(4)所有葉子或非葉子節(jié)點的數(shù)字簽名在進行插入分裂操作的過程中都遵循最小海明距離。
完成葉子節(jié)點的插入后,針對整個樹的數(shù)字簽名從插入點位置自底向上實現(xiàn)數(shù)字簽名的更新。對給定的服務組合構(gòu)造的S-Tree的構(gòu)建完成情況可以參見圖3,由于S-Tree 的特點,其只能支持對于原子服務的快速查詢。
步驟4. 2,在現(xiàn)有的S-Tree結(jié)構(gòu)的基礎上,結(jié)合服務實體之間調(diào)用關(guān)系的數(shù)字簽名構(gòu)建VS-Tree結(jié)構(gòu)。VS-Tree結(jié)構(gòu)葉子節(jié)點之間調(diào)用關(guān)系生成非葉節(jié)點之間邊的數(shù)字簽名,對于每一組非葉節(jié)點,彼此之間的數(shù)字簽名都是其子節(jié)點之間數(shù)字簽名的“位或”計算結(jié)果,自底向上構(gòu)建出每一個層次中非葉節(jié)點之間的編碼關(guān)系,本例中構(gòu)建出的VS-Tree 可參見圖5。所構(gòu)建的VS-Tree中,存在邊關(guān)系的葉子節(jié)點對,其父節(jié)點之間也存在邊的關(guān)系O
步驟4. 3,將web服務中所有服務流程實例對應的VS-Tree結(jié)構(gòu)根節(jié)點作為服務實體,以VS-Tree結(jié)構(gòu)根節(jié)點和web服務中所有其他原子服務的數(shù)字簽名為葉子節(jié)點構(gòu)建數(shù)字簽名樹S-Tree,并在VS-Tree結(jié)構(gòu)根節(jié)點對應的葉子節(jié)點上加入一條指向自己的邊, 采用步驟三中所述的方法計算該邊所對應的數(shù)字簽名,具體為將上述根節(jié)點看成起始服務和被調(diào)服務均為自己的組合服務實體對進行數(shù)字簽名計算,并用來標識上述指向自己的邊。這樣就可以有效區(qū)分原子服務和組合服務,從而原子服務和組合服務共同維護到一種數(shù)據(jù)結(jié)構(gòu)中。凡是子節(jié)點包含有指向自己的邊,其父節(jié)點同樣包含有指向自己的邊,且父節(jié)點的指向自己的邊的數(shù)字簽名為子節(jié)點的指向自己的邊的數(shù)字簽名的“位或”結(jié)果。
采用上述方法,從而得到服務流程實例的變粒度索引結(jié)構(gòu)VSC-Tree,圖4為所構(gòu)建的VSC-Tree示意圖,參見圖4,凡是帶有指向自己的邊的節(jié)點即為組合服務或包含了組合服務的非葉子節(jié)點。
下面將以圖3 5為例,來簡單說明葉子節(jié)點的插入過程。參見圖3,圖3為構(gòu)建的S — Tree結(jié)構(gòu),GcTG2層的節(jié)點為非葉節(jié)點,G3層的節(jié)點為葉子節(jié)點,葉子節(jié)點代表的是單一原子服務實體對應的數(shù)字簽名,GcTG2層的節(jié)點數(shù)字簽名由其子節(jié)點的數(shù)字簽名按運算見合而成。
若要向該S - Tree結(jié)構(gòu)插入數(shù)字簽名0010 0110,將按以下步驟操作
a、自頂向下匹配找到插入的位置;
對Gtl層的根節(jié) 點,將待插入數(shù)字簽名按位與操作匹配,0010 0110&1111 1111=00100110,匹配成功,該根節(jié)點的所有子節(jié)點入棧;
對Gtl層根節(jié)點的所有子節(jié)點,即圖3中G1層的兩個節(jié)點的數(shù)字簽名0011 1110和 11100011,將待插入數(shù)字簽名按位與操作分別匹配
0010 0110&0011 1110=0010 0110,匹配成功,所有子節(jié)點入棧;
0010 0110&1110 0011 ^ 0010 0110,匹配不成功,不做操作。
對6:層數(shù)字簽名為0011 1110的節(jié)點的所有子節(jié)點,將待插入數(shù)字簽名按位與操 作分別匹配,最后與數(shù)字簽名為0010 1110和0011 0110的兩個節(jié)點匹配成功。此時采用 海明距離公式獲取到底選取那個節(jié)點,將待插入節(jié)點插入與其數(shù)字簽名的海明威距離最短 的非葉節(jié)點下計算待插入節(jié)點與數(shù)字簽名為0010 1110的非葉節(jié)點的海明威距離6 (0010 0110, 0010 1110)= x (0010 0110 V 0010 1110)- x (0010 0110 A 0010 1110)=4-3 =1計算待插入節(jié)點與數(shù)字簽名為0011 0110的非葉節(jié)點的海明威距離6 (0010 0110,0011 0110)= x (0010 0110 V 0011 0110)- x (0010 0110 八 0011 0110)
=4-3=1根據(jù)上述結(jié)果,待插入節(jié)點與上述兩個非葉節(jié)點的海明威距離相等,任取其中一 個非葉節(jié)點,將待插入節(jié)點插入。五、根據(jù)服務流程實例的變粒度索引結(jié)構(gòu)構(gòu)建散列索引。本步驟是根據(jù)各服務流程實例的VSC-Tree結(jié)構(gòu)根節(jié)點,采用S-Tree結(jié)構(gòu)構(gòu)建散 列索引,具體為步驟5. 1,根據(jù)各不同服務流程實例的VSC-Tree結(jié)構(gòu)的根節(jié)點數(shù)字簽名構(gòu)建出 S-Tree ;例如構(gòu)建了 n棵VSC-Tree,其根節(jié)點數(shù)字簽名分別為{Sigr^,Sign2,……,SignJ, 則根據(jù)這一組根節(jié)點數(shù)字簽名的集合再次構(gòu)建出一棵S-Tree,該S-Tree的葉節(jié)點保存的 是所有與該葉子節(jié)點具有相同數(shù)字簽名的服務流程實例的集合;步驟2,自頂向下對構(gòu)建的S-Tree結(jié)構(gòu)用位與操作進行數(shù)字簽名進行匹配,從而 可快速找到需要查找的服務所在的VSC-Tree ;對多個VSC-Tree根節(jié)點的散列索引的建立實現(xiàn)了對數(shù)字簽名的分層次存儲,避 免了 VSC-Tree過高的層次結(jié)構(gòu),同時可以有效減少數(shù)字簽名在多次位與操作之后生成全1 而使得檢索匹配失效的情況。基于上述構(gòu)件的針對海量服務流程的變粒度索引機制,本發(fā)明提出了一種服務流 程搜索方法,針對不同查詢條件給出不同的搜索方法,包含(1)以原子服務為查詢條件的 原子服務搜索;(2)以輸入、輸出為查詢條件的組合服務片段搜索;(3)以組合服務片段為 查詢條件的組合服務片段搜索。一、基于構(gòu)建的VSC-Tree結(jié)構(gòu),進行以原子服務為查詢條件的原子服務搜索,包 括步驟步驟1,以原子服務作為查詢條件,依據(jù)待查詢原子服務的輸入、輸出參數(shù)獲取該 原子服務的數(shù)字簽名,具體方法同前述獲取服務實體數(shù)字簽名的方法。假設所獲取的待查 詢原子服務的數(shù)字簽名為Sign(Q) =0011 1000。步驟2,依據(jù)待查詢原子服務的數(shù)字簽名匹配VSC-Tree結(jié)構(gòu)中的節(jié)點,下面將以 附圖4為例進一步說明本步驟。本步驟的匹配是自VSC-Tree結(jié)構(gòu)頂層向下對數(shù)字簽名采用“& “操作(位與操作)實現(xiàn)匹配。附圖4中VSC-Tree結(jié)構(gòu)為根節(jié)點數(shù)字簽名為1111 1111的三層VSC-Tree結(jié)構(gòu), 當符合Sign (Q)&Sign (V) =Sign (Q)條件時,匹配成功,這里,Sign (Q)為待查詢原子服務的數(shù)字簽名,Sign(V)為VSC-Tree結(jié)構(gòu)中各節(jié)點的數(shù)字簽名。
假設待查詢原子服務的數(shù)字簽名Sign(Q)=OOll 1000,將其與附圖4中根節(jié)點數(shù)字簽名進行匹配,Sign(Q)&1111 Illl=Sign(Q),匹配成功,則該根節(jié)點的所有子節(jié)點都加入待匹配隊列,繼續(xù)匹配隊列中的元素。
G1層中節(jié)點的數(shù)字簽名分別為0011 1110和1110 0011,分別與該兩個節(jié)點的數(shù)字簽名匹配。Sign(Q)&0011 IllO=Sign(Q),匹配成功,將0011 1110對應的節(jié)點的子節(jié)點加入待匹配隊列;Sign(Q)&1110 0011!=Sign(Q),匹配不成功,不做任何操作。
進入G2層,分別與該層中數(shù)字簽名為0010 1110,0011 1100,0011 0110進行匹配。Sign(Q)&0011 IlOO=Sign(Q),則與0011 1100對應的節(jié)點匹配成功,將該節(jié)點的子節(jié)點加入待匹配隊列。
繼續(xù)匹配待匹配隊列中的葉子節(jié)點,與Sign(Q)匹配成功的葉子節(jié)點即為滿足查詢條件的原子服務,可作為搜索結(jié)果返回。
二、基于構(gòu)建的VSC-Tree結(jié)構(gòu),進行以輸入、輸出參數(shù)為查詢條件的組合服務片段搜索。
針對以輸入、輸出參數(shù)為查詢條件的組合服務片段查詢,特點是查詢的對象不再是單一的服務,一種可能存在的匹配包含了一個服務實體的輸入、另一個服務實體的輸出加上他們之間的服務鏈形成的完整的服務組合的某個片段,這個片段的長度是不一定的, 所以這種查詢會根據(jù)查詢條件而得到變粒度的查詢結(jié)果。
組合服務片段查詢的過程分成兩個部分一部分是針對VSC-Tree結(jié)構(gòu)的自頂向下的服務實體匹配查詢過程,另一部分是針對服務組合實例的服務片段探索。
步驟1,針對VSC-Tree結(jié)構(gòu)的自頂向下的服務實體匹配查詢過程,包括步驟
1.1分別獲取作為查詢條件的輸入、輸出參數(shù)對應的數(shù)字簽名Sign(Q).1n和 Sign(Q). out,方法同構(gòu)建VSC-Tree結(jié)構(gòu)時獲取輸入、輸出參數(shù)數(shù)字簽名的方法;所獲得數(shù)字簽名Sign (Q) · in和Sign (Q) · out的長度分別為M和N。在輸入?yún)?shù)的數(shù)字簽名Sign (Q) · in后補足N位“ I ”,在輸出參數(shù)的數(shù)字簽名Sign (Q). out前補足M位“ I ”,分別生產(chǎn)兩組M+N 位的數(shù)字簽名 Sign(Q.1N)和 Sign(Q. OUT)。
1. 2以Sign(Q.1N)和Sign(Q. OUT)作為查詢條件的數(shù)字簽名,同時自頂向下逐層匹配VSC-Tree結(jié)構(gòu)中的非葉節(jié)點,當同時符合合匹配條件L1. di&Sign (Q.1N) ==Sign (Q.1N)和 L1. di&Sign(Q. OUT) ==Sign(Q. OUT)時,匹配成功,其中,L1. di 為 VSC-Tree 結(jié)構(gòu)中非葉節(jié)點的數(shù)字簽名。VSC-Tree結(jié)構(gòu)中某層某非葉子節(jié)點必須同時匹配Sign(Q.1N)和 Sign(Q. OUT)時,才算匹配成功,將匹配成功的非葉子節(jié)點加入候選隊列H。
1. 3遍歷候選隊列H,判斷其中的非葉子節(jié)點是否為只包含了原子服務的非葉子節(jié)點,若是,則表示該節(jié)點的子節(jié)點中不會存在任何一個服務組合的`片段(即組合服務構(gòu)成的VS-Tree的根節(jié)點),此時,采用以原子服務為查詢條件的原子服務搜索方法搜索滿足查詢條件的原子服務作為搜索結(jié)果;否則,采用以組合服務片段為查詢條件的組合服務片段搜索方法搜索滿足滿足查詢條件的組合服務片段作為搜索結(jié)果。
步驟2,以組合服務片段為查詢條件的組合服務片段搜索方法搜索過程,包括步驟
如果步驟I中匹配成功的節(jié)點包含了指向自己的邊,則可以分為3種情況進行處 理
(I)該節(jié)點可能存在兩組子節(jié)點,其中一組節(jié)點集合SI都匹配Sign(Q.1N),另一 組節(jié)點集合S2都匹配Sign(Q. OUT),且任取SI中某一節(jié)點S1.1,存在一條從S1.1指向集 合S2中某一節(jié)點S2. j的邊。
(2)該節(jié)點可能存在不少于一個子節(jié)點同時匹配Sign(Q.1N)和Sign(Q. OUT),且 該節(jié)點包含指向自己的邊的信息。
(3)該節(jié)點可能存在不少于一個子節(jié)點同時匹配Sign(Q.1N)和Sign(Q. OUT),且 該節(jié)點不包含指向自己的邊的信息。
三種情況中(I)和(2)必然會出現(xiàn)一種,因為他們的存在才能使該節(jié)點有自己指 向子自己的邊。
對于情況(3),進行以原子服務為查詢條件的原子服務搜索找到滿足查詢條件的 原子服務作為搜索結(jié)果。
對于情況(2),繼續(xù)針對VSC-Tree結(jié)構(gòu)進行自頂向下的服務實體匹配查詢。
對于情況(1),遍歷集合SI,任取一個節(jié)點S1.1,同時根據(jù)邊的關(guān)系,找到集合S2 中的滿足邊的關(guān)系的節(jié)點S2. j,這里滿足邊的關(guān)系是指存在S1.1的輸出參數(shù)和S2. j的輸 入?yún)?shù)相同,該相同的輸出/輸入?yún)?shù)用來表示S1.1和S2. j之間的聯(lián)系。
S2. j 一定是匹配Sign(Q. OUT)的,此時繼續(xù)自頂向下匹配,Sign(Q.1N)最終會匹 配S1.1的某個位于葉子節(jié)點的孩子,設為ENDl,Sign(Q. OUT)最終也會匹配S2. j的某個 位于葉子節(jié)點的孩子,設為END2,由于END1、END2都位于一個服務組合實例當中,因此他們 一定存在關(guān)聯(lián),此時我們對最終匹配Sign (Q.1N)成功的服務實體ENDl進行正向擴展,即從 ENDl開始搜索到END2為止,此時我們根據(jù)邊的信息一路從ENDl探尋到END2,然后裁減掉 多余分支,得到ENDl到END2的完整組合服務實例片段,這樣一直遍歷完集合SI的所有節(jié) 點為止,最終可以找到所有的組合服務實例片段作為搜索結(jié)果返回。
如果從ENDl —路探尋到服務服務實例的輸出都沒有探索到END2,則不存在這樣 的服務片段。
權(quán)利要求
1.一種針對海量服務流程的變粒度索引機制的構(gòu)建方法,其特征是,包括步驟步驟一,采用分層建模方法統(tǒng)一管理獲取的服務實體,所述的服務實體為原子服務實體和/或組合服務實體;步驟二,將服務實體包含的輸入、輸出參數(shù)名稱轉(zhuǎn)換為對應的二進制編碼,并根據(jù)所得二進制編碼獲得對應的服務實體的數(shù)字簽名;步驟三,根據(jù)服務實體包含的輸入、輸出參數(shù)是否存在交集來判斷服務實體對是否存在調(diào)用關(guān)系,將存在調(diào)用關(guān)系的服務實體對包含的輸入、輸出參數(shù)名稱轉(zhuǎn)換為對應的二進制編碼,并根據(jù)所得二進制編碼獲得該服務實體對調(diào)用關(guān)系的數(shù)字簽名;步驟四,根據(jù)服務流程實例中服務實體及服務實體間調(diào)用關(guān)系的數(shù)字簽名構(gòu)建該服務流程實例的變粒度索引結(jié)構(gòu);步驟五,根據(jù)各服務流程實例的變粒度索引結(jié)構(gòu)構(gòu)建散列索引。
2.如權(quán)利要求1所述的針對海量服務流程的變粒度索引機制的構(gòu)建方法,其特征是 步驟二進一步包括以下子步驟2.1使用哈希函數(shù)對服務實體包含的所有輸入、輸出參數(shù)名稱分別進行散列,得到各輸入、輸出參數(shù)對應的二進制編碼;2.2將服務實體包含的所有輸入?yún)?shù)對應的二進制編碼按位或運算得到該服務實體輸入?yún)?shù)的數(shù)字簽名,將服務實體包含的所有輸出參數(shù)對應的二進制編碼按位或運算得到該服務實體輸出參數(shù)的數(shù)字簽名;2.3將服務實體輸入?yún)?shù)和輸出參數(shù)的數(shù)字簽名串接,即得到該服務實體的數(shù)字簽名。
3.如權(quán)利要求1所述的針對海量服務流程的變粒度索引機制的構(gòu)建方法,其特征是 步驟三進一步包括以下子步驟3.1根據(jù)服務實體包含的輸入、輸出參數(shù)是否存在交集來判斷服務實體之間是否存在調(diào)用關(guān)系,所包含的輸入、輸出參數(shù)存在交集的服務實體對即為存在調(diào)用關(guān)系的服務實體對;3. 2采用哈希函數(shù)對存在調(diào)用關(guān)系的服務實體對中起始服務所包含的輸入?yún)?shù)名稱和被調(diào)服務所包含的輸出參數(shù)名稱分別進行散列,得到起始服務各輸入?yún)?shù)和被調(diào)服務各輸出參數(shù)對應的二進制編碼;3.3將存在調(diào)用關(guān)系的服務實體對中起始服務包含的所有輸入?yún)?shù)對應的二進制編碼按位或運算得到起始服務輸入?yún)?shù)的數(shù)字簽名,將存在調(diào)用關(guān)系的服務實體對中被調(diào)服務包含的所有輸出參數(shù)對應的二進制編碼按位或運算得到被調(diào)服務輸出參數(shù)的數(shù)字簽名;3.4將起始服務輸入?yún)?shù)的數(shù)字簽名和被調(diào)服務輸出參數(shù)的數(shù)字簽名串接,得到對應的服務實體對調(diào)用關(guān)系的數(shù)字簽名。
4.如權(quán)利要求2或3所述的針對海量服務流程的變粒度索引機制的構(gòu)建方法,其特征是所述的哈希函數(shù)為復合哈希函數(shù),所述的復合哈希函數(shù)是指使用不少于兩個的哈希函數(shù)對同一個對象進行散列操作。
5.如權(quán)利要求1所述的針對海量服務流程的變粒度索引機制的構(gòu)建方法,其特征是 步驟四是針對服務流程實例進行,進一步包括以下子步驟·4.1以服務流程實例中各服務實體的數(shù)字簽名為葉子節(jié)點構(gòu)建服務流程實例的數(shù)字簽名樹 S-Tree ;.4.2根據(jù)服務流程實例中各服務實體間的調(diào)用關(guān)系及調(diào)用關(guān)系的數(shù)字簽名在S-Tree 中對應的葉子節(jié)點之間生成邊及邊的數(shù)字簽名,并根據(jù)葉子節(jié)點之間的邊及邊的數(shù)字簽名生成非葉節(jié)點之間的邊及邊的數(shù)字簽名,從而得到服務流程實例的基于矢量的數(shù)字簽名樹 VS-Tree ;.4.3將web服務中各服務流程實例的VS-Tree結(jié)構(gòu)根節(jié)點作為服務實體,以VS-Tree 結(jié)構(gòu)根節(jié)點和web服務中所有其他原子服務的數(shù)字簽名為葉子節(jié)點構(gòu)建數(shù)字簽名樹 S-Tree ;在VS-Tree結(jié)構(gòu)根節(jié)點對應的葉子節(jié)點上加入一條指向自己的邊,并將該葉子節(jié)點看成起始服務和被調(diào)服務均為自己的服務實體對獲取其調(diào)用關(guān)系的數(shù)字簽名作為邊的數(shù)字簽名;凡是子節(jié)點包含有指向自己的邊,其父節(jié)點同樣包含有指向自己的邊,且父節(jié)點的指向自己的邊的數(shù)字簽名依據(jù)其子節(jié)點的指向自己的邊的數(shù)字簽名得到;從而得到服務流程實例的變粒度索引結(jié)構(gòu)VSC-Tree。
6.如權(quán)利要求1所述的針對海量服務流程的變粒度索引機制的構(gòu)建方法,其特征是步驟五具體為以服務流程實例VSC-Tree結(jié)構(gòu)的根節(jié)點為葉子節(jié)點構(gòu)建S-Tree結(jié)構(gòu),即得到的變粒度索引結(jié)構(gòu)的散列索引。
7.基于上述權(quán)利要求1 6中任一項所述的變粒度索引機制的服務流程搜索方法,是以原子服務為查詢條件的原子服務搜索,其特征是,包括步驟步驟一,基于作為查詢條件的原子服務的輸入、輸出參數(shù)名,獲取該原子服務的數(shù)字簽名Sign (Q),獲取該原子服務數(shù)字簽名的方法與構(gòu)建VSC-Tree時獲取服務實體數(shù)字簽名的方法相同;步驟二,采用“位與”操作與變粒度索引結(jié)構(gòu)的散列索引進行匹配,得到包含有符合查詢條件的原子服務的VSC-Tree結(jié)構(gòu)根節(jié)點的集合;采用“位與”操作自VSC-Tree結(jié)構(gòu)頂層向下逐層與數(shù)字簽名Sign(Q)進行匹配,當符合匹配條件Sign (Q) &Sign (V) =Sign (Q)時,匹配成功,其中,Sign(Q)為作為查詢條件的原子服務的數(shù)字簽名,Sign(V)為VSC-Tree結(jié)構(gòu)中各節(jié)點的數(shù)字簽名;步驟三,將與數(shù)字簽名Sign(Q)匹配成功的非葉節(jié)點的子節(jié)點繼續(xù)與數(shù)字簽名 Sign(Q)按“位與”操作匹配,直至成功匹配到葉子節(jié)點,將匹配成功的葉子節(jié)點所對應的原子服務作為搜索結(jié)果返回;若無法成功匹配到葉子節(jié)點,則搜索失敗。
8.基于上述權(quán)利要求1 6中任一項所述的變粒度索引機制的服務流程搜索方法,是以組合服務片段為查詢條件的組合服務片段搜索,其特征是,包括步驟步驟一,根據(jù)作為查詢條件的組合服務片段中各服務實體的輸入和輸出參數(shù),獲取服務實體對應的數(shù)字簽名;步驟二,采用“位與”操作將查詢條件對應的數(shù)字簽名與變粒度索引結(jié)構(gòu)的散列索引進行匹配,得到包含有符合查詢條件的VSC-Tree結(jié)構(gòu)根節(jié)點的集合;采用“位與”操作將各服務實體的數(shù)字簽名自VSC-Tree結(jié)構(gòu)頂層向下逐層進行匹配,當搜索到與所有服務實體的數(shù)字簽名均匹配、且包含了指向自身的邊的葉子節(jié)點,即匹配成功;步驟三,獲取以匹配成功的葉子節(jié)點數(shù)字簽名為根節(jié)點的VS-Tree,采用“位與”操作將各服務實體的數(shù)字簽名自VS-Tree結(jié)構(gòu)頂層向下逐層進行匹配,獲得當前查詢的匹配列表,所述的匹配列表包含各服務實體及與其匹配成功的葉子節(jié)點;步驟四,基于作為查詢條件的組合服務片段中各服務實體的邊的關(guān)系,對匹配列表中各匹配成功的葉子節(jié)點進行多路匹配查詢得到匹配成功的輸入和輸出參數(shù)對集合,從而獲取匹配成功的服務實體集,根據(jù)實際調(diào)用關(guān)系裁剪該服務實體集;步驟五,對裁剪后的服務實體集進行多路連接查詢,就可得到滿足查詢條件的服務組合片段。
9.基于上述權(quán)利要求1 5中任一項所述的變粒度索引機制的服務流程搜索方法,是以原子服務為查詢條件的組合服務片段搜索,其特征是,包括步驟步驟一,分別獲取作為查詢條件的輸入、輸出參數(shù)對應的數(shù)字簽名;步驟二,采用“位與”操作將查詢條件對應的數(shù)字簽名與變粒度索引結(jié)構(gòu)的散列索引進行匹配,得到包含有符合查詢條件的VSC-Tree結(jié)構(gòu)根節(jié)點的集合;采用“位與”操作將輸入和輸出參數(shù)的數(shù)字簽名同時自頂向下逐層匹配VSC-Tree結(jié)構(gòu)中的非葉子節(jié)點,當同時符合匹配條件 L1. di&Sign (Q.1N) ==Sign(Q.1N)和 L1. di&Sign (Q. OUT) ==Sign (Q. OUT)時,匹配成功,其中,L1. di為VSC-Tree結(jié)構(gòu)中非葉節(jié)點的數(shù)字簽名;步驟三,判斷所有匹配成功的非葉節(jié)點是否為只包含了原子服務的非葉子節(jié)點,若是, 則采用權(quán)利要求6所述的方法,進行以原子服務為查詢條件的搜索;否則,采用權(quán)利要求7 所述的方法,進行以組合服務片段為查詢條件的組合服務片段搜索。
全文摘要
本發(fā)明公開了一種基于變粒度索引的服務流程搜索和重用方法,該方法通過構(gòu)建變粒度索引機制,提出的基于構(gòu)建的變粒度索引機制的服務搜索和重用方法中,操作的對象將不再局限于單一服務,而是任意粒度的服務流程;同時,自動服務組合的操作單元也能夠有效利用以往被編輯可調(diào)用的組合服務流程片段,去掉反復的服務組合驗證、匹配和調(diào)試過程,直接從大量的服務流程實例片段中選取最合適的片段,快速組合形成更大粒度、滿足用戶更復雜需求的網(wǎng)絡化軟件,反過來提高自動服務組合結(jié)果的實際可執(zhí)行程度,從而最終形成良性循環(huán)。
文檔編號G06F17/30GK103064952SQ20121058391
公開日2013年4月24日 申請日期2012年12月28日 優(yōu)先權(quán)日2012年12月28日
發(fā)明者曾承, 盧舟 申請人:武漢大學