1 概述
傳統(tǒng)面向服務(wù)架構(gòu)(Service-oriented Architecture,SOA)由服務(wù)提供者、服務(wù)注冊(cè)中心、服務(wù)請(qǐng)求者3個(gè)部分組成,對(duì)其可恢復(fù)性研究主要集中在注冊(cè)中心與服務(wù)實(shí)例。目前,基于SOA的業(yè)務(wù)系統(tǒng),在原有框架上集成了業(yè)務(wù)流程管理(Business Process Management,BPM)模塊,應(yīng)用分散自治的Web服務(wù),借助Web服務(wù)業(yè)務(wù)流程執(zhí)行語(yǔ)言(Web Services Business Process Execution Language,WS-BPEL),實(shí)現(xiàn)松耦合的應(yīng)用平臺(tái)。鑒于BPM在SOA中起到的關(guān)鍵作用,為了提高業(yè)務(wù)的連續(xù)性,流程執(zhí)行引擎的可恢復(fù)性成為SOA應(yīng)用的研究熱點(diǎn)。由于基于服務(wù)的流程非常脆弱,容易出現(xiàn)異常,因此業(yè)務(wù)流程運(yùn)行過(guò)程中的狀態(tài)保存與恢復(fù)方法是本領(lǐng)域有待解決的關(guān)鍵問(wèn)題。
本文基于有色Petri網(wǎng)(Colored Petri Nets,CPN)模型,設(shè)計(jì)一種多輸入多輸出(Multiple Input Multiple Output,MIMO)的高可靠流程執(zhí)行結(jié)構(gòu)。在此基礎(chǔ)上提出引擎保存流程執(zhí)行狀態(tài)與中間結(jié)果的方法,并在流程異常中斷時(shí),能夠根據(jù)保存的信息迅速恢復(fù)流程上下文,保證業(yè)務(wù)的連續(xù)性。
2 相關(guān)工作
目前,BPEL流程可靠性和容錯(cuò)性領(lǐng)域的研究工作很多,主要集中在如文獻(xiàn)中討論的單個(gè)服務(wù)失效時(shí)替代服務(wù)的動(dòng)態(tài)選擇問(wèn)題上,針對(duì)流程出錯(cuò)時(shí)狀態(tài)保存與恢復(fù)方法的研究較少。
開(kāi)源引擎Active BPEL、Apache ODE和商業(yè)引擎Oracle BPM是當(dāng)前3種主流的BPEL流程執(zhí)行引擎。3種執(zhí)行引擎都借助數(shù)據(jù)庫(kù)的存儲(chǔ)能力,應(yīng)用持久化技術(shù)記錄了流程執(zhí)行狀態(tài),但是沒(méi)有針對(duì)應(yīng)用服務(wù)獲取恢復(fù)執(zhí)行所需的最小狀態(tài)集,并不適合流程中斷時(shí)狀態(tài)的恢復(fù)。
文獻(xiàn)指出Petri網(wǎng)具有并行性、不確定性和異步性等特點(diǎn),適合描述和分析分布式系統(tǒng)。而文獻(xiàn)提出CPN的概念,它可以承載具有類型的數(shù)據(jù);赟OA的業(yè)務(wù)流程由消息觸發(fā)服務(wù),而CPN的Token通過(guò)定義顏色模擬不同種類的消息,因此CPN更適合業(yè)務(wù)流程的建模。
3 面向服務(wù)架構(gòu)的高可靠流程執(zhí)行引擎設(shè)計(jì)
本節(jié)從適合狀態(tài)保存的角度定義分布式業(yè)務(wù)流程,并對(duì)引擎進(jìn)行擴(kuò)展,設(shè)計(jì)一種支持狀態(tài)保存與恢復(fù)的高可靠流程執(zhí)行引擎。
3.1 分布式業(yè)務(wù)流程定義
Petri網(wǎng)由位置、變遷、弧和標(biāo)記4個(gè)元素組成。對(duì)于BPEL調(diào)用的伙伴服務(wù),用變遷表示其執(zhí)行,用位置表示服務(wù)的前提條件和后續(xù)狀態(tài),用弧表示流程的執(zhí)行順序,用標(biāo)記表示不同類型的消息,通過(guò)消息的傳遞模擬實(shí)際系統(tǒng)的動(dòng)態(tài)運(yùn)行行為。
定義1元消息)元消息m為五元組(id,name,type,ms,value),其中,id標(biāo)識(shí)不同的元消息;name表示元消息的名稱;type∈Σ指消息的類型;ms∈M表明元消息所屬的消息;value是元消息的值。
定義2(消息)消息M是分布式業(yè)務(wù)流程執(zhí)行環(huán)境中狀態(tài)交換的信息單元,其中,M(m1,m2,...,mn)是元消息在域上的笛卡爾積;根據(jù)交互雙方的不同,消息可以分為代表伙伴服務(wù)之間狀態(tài)傳遞的內(nèi)部狀態(tài)信息Mi和代表與流程執(zhí)行引擎之間消息傳遞的外部交互信息M0。
定義3(業(yè)務(wù)流程)業(yè)務(wù)流程BP為九元組(P,T,F(xiàn),Σ,M,C,G,E,I),其中,(P,T,F(xiàn),C,G,E)是CPN表示流程的基本結(jié)構(gòu);Σ為有限非空消息類型集合;M是有限消息的集合;I是消息處理函數(shù)。負(fù)函數(shù)I-(p,t)表示變遷t消耗位置p的消息資源;正函數(shù)I+(t,p)表示變遷t產(chǎn)生位置P的消息資源。
3.2 高可靠執(zhí)行引擎設(shè)計(jì)
BPEL流程運(yùn)行過(guò)程中出現(xiàn)的錯(cuò)誤可以是調(diào)用伙伴服務(wù)時(shí)產(chǎn)生的程序錯(cuò)誤,也可以是引擎框架的未預(yù)期錯(cuò)誤。流程運(yùn)行時(shí)產(chǎn)生的上下文環(huán)境,包括執(zhí)行狀態(tài)和中間結(jié)果,前者記錄流程執(zhí)行的當(dāng)前位置,后者記錄服務(wù)問(wèn)傳遞的相關(guān)信息。在錯(cuò)誤發(fā)生時(shí),根據(jù)同步記錄的流程上下文迅速恢復(fù)執(zhí)行環(huán)境是保障分布式業(yè)務(wù)正確完成的一種重要方法。
支持狀態(tài)保存與恢復(fù)的高可靠流程執(zhí)行引擎結(jié)構(gòu)如圖1所示,BPEL語(yǔ)言定義的業(yè)務(wù)流程以組合服務(wù)的形式登記到注冊(cè)中心,當(dāng)客戶向執(zhí)行引擎提交請(qǐng)求時(shí),引擎通過(guò)流程需求描述信息在注冊(cè)中心選擇符合需求的業(yè)務(wù)流程并返回流程標(biāo)識(shí)。執(zhí)行引擎根據(jù)流程模板生成實(shí)例并執(zhí)行。每次服務(wù)成功執(zhí)行后,在將服務(wù)執(zhí)行結(jié)果傳遞給鄰接的伙伴服務(wù)的同時(shí),服務(wù)調(diào)用結(jié)果作為流程的中間結(jié)果,以消息的形式返回執(zhí)行引擎并持久化到數(shù)據(jù)庫(kù)。當(dāng)整個(gè)實(shí)例結(jié)束后,將執(zhí)行結(jié)果返回給引擎,至此一個(gè)流程實(shí)例執(zhí)行完畢。與其他執(zhí)行引擎相比,該結(jié)構(gòu)主要在2個(gè)方面進(jìn)行高可靠性擴(kuò)展:
(1)在Web服務(wù)執(zhí)行成功后將服務(wù)調(diào)用結(jié)果返回給執(zhí)行引擎,由引擎持久化到數(shù)據(jù)庫(kù);
(2)根據(jù)實(shí)例與引擎的交互情況,由引擎記錄下流程的執(zhí)行狀態(tài)。
圖1 支持狀態(tài)保存與恢復(fù)的高可靠流程執(zhí)行引擎結(jié)構(gòu)
Web服務(wù)實(shí)質(zhì)上是一個(gè)消息處理框架,由消息觸發(fā)Web服務(wù),并以消息的形式將服務(wù)的執(zhí)行結(jié)果傳遞給鄰接的伙伴服務(wù)。通過(guò)對(duì)流程監(jiān)控,當(dāng)服務(wù)失效時(shí)啟動(dòng)備份服務(wù),將存儲(chǔ)在引擎數(shù)據(jù)庫(kù)的中間結(jié)果以SOAP消息的形式發(fā)送給服務(wù)節(jié)點(diǎn),保證了流程狀態(tài)的前后一致性。針對(duì)執(zhí)行引擎的失效,根據(jù)關(guān)聯(lián)矩陣記錄的流程執(zhí)行狀態(tài),由本地或異地引擎解析出流程中斷前的執(zhí)行位置,并通過(guò)最小補(bǔ)償回退的方式繼續(xù)流程的運(yùn)行,減少了不必要的補(bǔ)償操作,且整個(gè)過(guò)程對(duì)用戶是透明的。
4 基于MIMO模式的業(yè)務(wù)流程狀態(tài)保存與恢復(fù)
常見(jiàn)的BPEL業(yè)務(wù)流程采用單輸入單輸出的工作模式,即流程開(kāi)始時(shí)輸入請(qǐng)求消息,流程結(jié)束時(shí)向客戶返回應(yīng)答消息。這樣的工作模式將流程運(yùn)行時(shí)的中間信息隱藏起來(lái),不利于流程運(yùn)行時(shí)狀態(tài)的跟蹤。本節(jié)基于定義3,使流程支持多輸入多輸出的工作模式,并采用關(guān)聯(lián)矩陣和變遷狀態(tài)表記錄流程運(yùn)行時(shí)的狀態(tài)。
4.1 基于關(guān)聯(lián)矩陣的執(zhí)行狀態(tài)保存與恢復(fù)
當(dāng)BPEL業(yè)務(wù)流程運(yùn)行時(shí),伙伴服務(wù)間主要包括順序、并行、選擇、循環(huán)4種執(zhí)行順序。其中,t代表調(diào)用Web服務(wù);P代表流程執(zhí)行時(shí)消耗或產(chǎn)生的消息。對(duì)于循環(huán)結(jié)構(gòu),采用循環(huán)展開(kāi)方法,將循環(huán)分解成選擇結(jié)構(gòu)和順序結(jié)構(gòu),由于流程模型支持多消息輸入結(jié)構(gòu),變遷序列調(diào)用的是同一個(gè)Web服務(wù)。
定義4(關(guān)聯(lián)矩陣)BP是一個(gè)業(yè)務(wù)流程網(wǎng),且P={p1,p2,...,Pn},T={t1,t2,...,tm},則矩陣C=[cij](1≤i≤n,l≤j≤m)是BP的關(guān)聯(lián)矩陣,當(dāng)且僅當(dāng):
關(guān)聯(lián)矩陣記錄了流程中位置和變遷的鄰接關(guān)系。當(dāng)cij=-1時(shí),表示消息觸發(fā)行為;當(dāng)cij=l時(shí),表示行為產(chǎn)生消息。設(shè)counter()為計(jì)數(shù)函數(shù)且n≥2,n∈N+,令counter(pi=1)=a,counter(pi=-1)=b且counter(tj=-1)=c,則:(1)當(dāng)a=0^b=l時(shí),表示Pi為初始狀態(tài);(2)當(dāng)a=1^b=0時(shí),表示Pi為結(jié)束狀態(tài);(3)當(dāng)a=l^b=l時(shí),表示順序執(zhí)行關(guān)系;(4)當(dāng)a=l^b≥n時(shí),表示并行執(zhí)行關(guān)系,并發(fā)度為n;(5)當(dāng)c≥n時(shí),表示選擇執(zhí)行關(guān)系,選擇度為n。
在流程執(zhí)行過(guò)程中,可以通過(guò)BPEL提供的錯(cuò)誤和事件管理從句以及運(yùn)行時(shí)監(jiān)控方法對(duì)流程進(jìn)行監(jiān)控管理。由監(jiān)控程序得知流程在tj處出現(xiàn)異常中斷,通過(guò)最小補(bǔ)償回退的思想對(duì)流程進(jìn)行恢復(fù)。(1)若c=1^b=l,則代表變遷tj,調(diào)用的伙伴服務(wù)w,處于順序執(zhí)行鏈路上;(2)若c=l^b≥1,則代表變遷島調(diào)用的伙伴服務(wù)wj處于并行執(zhí)行鏈路的一個(gè)路徑上;(3)若c≥n,則代表變遷tj調(diào)用的伙伴服務(wù)wj處于選擇執(zhí)行鏈路的一個(gè)分支上。
在恢復(fù)了流程執(zhí)行狀態(tài)的前提下,提供消息上下文,為備份服務(wù)傳送中間結(jié)果,這是保證流程正確運(yùn)行的有效方法。
4.2 基于變遷狀態(tài)表中闊結(jié)果的保存與恢復(fù)
由于BPEL業(yè)務(wù)流程無(wú)論是主動(dòng)調(diào)用
定義5(變遷狀態(tài)表)變遷狀態(tài)表是一個(gè)關(guān)系數(shù)據(jù)表,它是變遷t∈T在消息接收域I-和消息產(chǎn)生域,I+上的笛卡爾積。其中,I-和I+域中的元素是服務(wù)提供者,或者客戶與流程執(zhí)行引擎之間傳遞的消息Mo;Mo=Mi+Σmi,即外部交互信息等于內(nèi)部狀態(tài)信息與元消息集的廣義和。
BPEL運(yùn)行時(shí)中間結(jié)果的保存與恢復(fù)過(guò)程如圖2所示,執(zhí)行引擎將從客戶端接收到的消息以及I+中的元素,由decompose()函數(shù)分解存儲(chǔ),每個(gè)存儲(chǔ)單元即是一個(gè)元消息。對(duì)應(yīng)Web服務(wù)描述語(yǔ)言(WSDL)文檔中
圖2 BPEL運(yùn)行時(shí)中間結(jié)果的保存與恢復(fù)過(guò)程
變遷狀態(tài)表和元消息表隨著流程實(shí)例的開(kāi)始而創(chuàng)建,隨著流程實(shí)例的結(jié)束而銷毀。當(dāng)一個(gè)流程模板有多個(gè)實(shí)例同時(shí)運(yùn)行時(shí),運(yùn)用實(shí)例版本和信息加鎖的機(jī)制可以很好解決資源競(jìng)爭(zhēng)的問(wèn)題。
5 實(shí)例分析與性能評(píng)價(jià)
本節(jié)通過(guò)經(jīng)典SOA應(yīng)用的商務(wù)規(guī)劃,進(jìn)一步驗(yàn)證BPEL業(yè)務(wù)流程運(yùn)行過(guò)程中狀態(tài)的保存與恢復(fù)方式,并對(duì)其開(kāi)銷進(jìn)行分析。
5.1 實(shí)例分析
流程描述了如下場(chǎng)景,用戶提交員工資料和出差信息,通過(guò)Web服務(wù)檢索員工的艙位等級(jí),并發(fā)地從多家航空公司查找所能提供的機(jī)票信息,從中選擇票價(jià)較低的航空公司,并將確認(rèn)信息返回給用戶直至發(fā)送成功。
該SOA應(yīng)用支持服務(wù)間的順序、并行、選擇、循環(huán)的執(zhí)行關(guān)系,不提供流程狀態(tài)保存的執(zhí)行引擎,當(dāng)流程異常中斷時(shí),通常需要整個(gè)流程重做,帶來(lái)了不必要的開(kāi)銷。即使應(yīng)用BPEL自身的恢復(fù)機(jī)制,由于過(guò)多依靠流程設(shè)計(jì)人員的經(jīng)驗(yàn),因此限制了流程恢復(fù)的靈活性和高效性。而提供流程狀態(tài)保存功能的執(zhí)行引擎將記錄執(zhí)行過(guò)程中的最小狀態(tài)集合,針對(duì)異常情況,向備份單元發(fā)送狀態(tài)信息,保證業(yè)務(wù)連續(xù)性,同時(shí)提高流程引擎的可靠性,雖然帶來(lái)了一定的開(kāi)銷,但是為用戶可接受的。
當(dāng)模擬流程調(diào)用AmericanAirlines服務(wù)發(fā)生超時(shí),通過(guò)關(guān)聯(lián)矩陣(見(jiàn)圖3)定位到變遷f3出現(xiàn)調(diào)用服務(wù)異常,由于counter(t3=-1)=1^counter(p3=-1)=2,因此說(shuō)明變遷t3處于并行執(zhí)行鏈路的一個(gè)分支,且并行度為2。根據(jù)最小補(bǔ)償回退的思想,在變遷狀態(tài)表l中查找到t3I-={AmericanAirlines,FlightDetails},說(shuō)明變遷t3調(diào)用AmericanAirlines服務(wù),服務(wù)由消息FlightDetails激活;在元消息表2中查找ms字段為FlightDetails的元消息FlightData,由sendms()函數(shù)將其發(fā)送給備份服務(wù),保證了業(yè)務(wù)的連續(xù)執(zhí)行。
圖3 關(guān)聯(lián)矩陣
表1 變遷狀態(tài)
表2 元消息格式
5.2 性能評(píng)價(jià)
綜合以上分析,提出的業(yè)務(wù)流程運(yùn)行過(guò)程中狀態(tài)的保存與恢復(fù)方法具有以下特點(diǎn)和性能:
(1)為流程執(zhí)行提供多輸入多輸出結(jié)構(gòu)。這樣的執(zhí)行結(jié)構(gòu)在提高可靠性的同時(shí)帶來(lái)了一定的開(kāi)銷。假設(shè)n個(gè)伙伴服務(wù)按順序結(jié)構(gòu)組成業(yè)務(wù)流程,各服務(wù)與引擎交互的時(shí)間為te,各伙伴服務(wù)之間的交互時(shí)間為ts,忽略各變遷調(diào)用服務(wù)的執(zhí)行時(shí)間,則單輸入單輸出的業(yè)務(wù)流程執(zhí)行時(shí)間為2te+(n-1)ts。由于分布式環(huán)境下te與ts近似相等,在服務(wù)與引擎交互的同時(shí)向伙伴服務(wù)發(fā)送流程信息,則多輸入多輸出的業(yè)務(wù)流程執(zhí)行時(shí)間為nte+(n-1)ts。
(2)為流程恢復(fù)提供最小狀態(tài)集合。流程執(zhí)行過(guò)程中只存儲(chǔ)應(yīng)用級(jí)的狀態(tài)信息,包括執(zhí)行狀態(tài)和中間結(jié)果;當(dāng)流程恢復(fù)時(shí),通過(guò)組合元消息向備份服務(wù)發(fā)送其所需的最小消息集。
(3)為流程恢復(fù)提供本地策略和異地遷移。利用應(yīng)用與數(shù)據(jù)分離的2層工作模式,當(dāng)流程異常中斷時(shí),可以根據(jù)持久化的狀態(tài)信息將流程進(jìn)行本地恢復(fù)或異地遷移。
(4)較優(yōu)的恢復(fù)點(diǎn)目標(biāo)(Recovery Point Objective,RPO)支持多步回退。在一般情況下,按照最小補(bǔ)償回退的思想,只需回退到最近的一步操作。由于記錄了流程實(shí)例執(zhí)行過(guò)程中全狀態(tài)信息,因此可以由用戶干預(yù),實(shí)現(xiàn)多步回退。
(5)較優(yōu)的恢復(fù)時(shí)間目標(biāo)(Recovery Time Objective,RTO)。矩陣和數(shù)據(jù)表具有處理高效的特點(diǎn),在發(fā)生異常中斷時(shí),可以較快查找到流程執(zhí)行的上下文環(huán)境,只需te時(shí)間即可完成恢復(fù)。
6 結(jié)束語(yǔ)
對(duì)于SOA架構(gòu)下業(yè)務(wù)流程狀態(tài)的保存與恢復(fù),通過(guò)本文提出的解決方案將執(zhí)行狀態(tài)和中間結(jié)果集中到引擎,便于流程的統(tǒng)一管理,對(duì)于提高業(yè)務(wù)的連續(xù)性具有重要意義。下一步工作是優(yōu)化保存和恢復(fù)協(xié)議,使其更好地應(yīng)用于業(yè)務(wù)流程執(zhí)行引擎的容錯(cuò)和容災(zāi)中。
核心關(guān)注:拓步ERP系統(tǒng)平臺(tái)是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:面向服務(wù)架構(gòu)的流程狀態(tài)保存與恢復(fù)方法