孔欽
摘要:工作流管理系統(tǒng)通過(guò)集成企業(yè)內(nèi)部各種復(fù)雜的業(yè)務(wù)流程,實(shí)現(xiàn)流程自動(dòng)執(zhí)行,在傳統(tǒng)的無(wú)紙化辦公環(huán)境中發(fā)揮了很大作用。隨著面向服務(wù)架構(gòu)SOA(ServiceOriented Architecture)、網(wǎng)格等概念的提出,工作流管理系統(tǒng)中各個(gè)活動(dòng)節(jié)點(diǎn)不再局限于本地的應(yīng)用程序,而是逐步擴(kuò)展到網(wǎng)絡(luò)上的各種個(gè)性化服務(wù)。工作流節(jié)點(diǎn)利用SOA架構(gòu)發(fā)現(xiàn)和匹配相適應(yīng)的服務(wù)資源來(lái)完成相關(guān)任務(wù)。研究了面向服務(wù)的工作流異常處理機(jī)制,在對(duì)現(xiàn)有補(bǔ)償方法進(jìn)行總結(jié)的基礎(chǔ)上,提出了層次性協(xié)調(diào)框架以應(yīng)對(duì)面向服務(wù)的工作流異常情況,保證補(bǔ)償活動(dòng)快速準(zhǔn)確地并行執(zhí)行。
關(guān)鍵詞:SOA;事務(wù)工作流;補(bǔ)償活動(dòng);協(xié)調(diào)框架
DOIDOI:10.11907/rjdk.151355
中圖分類(lèi)號(hào):TP301
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào)文章編號(hào):16727800(2015)008005203
0 引言
事務(wù)概念開(kāi)始來(lái)源于數(shù)據(jù)庫(kù)研究領(lǐng)域,提出的目的是為解決數(shù)據(jù)的出錯(cuò)恢復(fù)和并發(fā)訪問(wèn)問(wèn)題。工作流中的活動(dòng)節(jié)點(diǎn)對(duì)應(yīng)的業(yè)務(wù)過(guò)程可部分或完全自動(dòng)完成。某些特定的應(yīng)用領(lǐng)域要求節(jié)點(diǎn)在執(zhí)行過(guò)程中作為一個(gè)整體,要么正確提交、要么回滾退出。針對(duì)某些工作流的特定事務(wù)特性,人們基于現(xiàn)有的數(shù)據(jù)庫(kù)事務(wù)模型,提出了各種適合工作流的事務(wù)模型,比如多層事務(wù)模型、嵌套事務(wù)模型、柔性事務(wù)模型和分支/匯合事務(wù)模型等。
Amit Sheth率先基于高級(jí)事務(wù)模型概念提出了事務(wù)工作流( Transactional Workflow)[1]概念。事務(wù)工作流結(jié)合了普通工作流和事務(wù)兩者特性,既支持業(yè)務(wù)流程的自動(dòng)執(zhí)行,又滿足應(yīng)用程序的事務(wù)屬性。在事務(wù)工作流里,活動(dòng)節(jié)點(diǎn)存在兩種事務(wù)類(lèi)型:①適合生命周期短的活動(dòng),叫做原子事務(wù)類(lèi)型,節(jié)點(diǎn)的執(zhí)行滿足原子性。這類(lèi)事務(wù)執(zhí)行的特征是allornothing,參與的活動(dòng)節(jié)點(diǎn)或者全部成功執(zhí)行,或者未執(zhí)行任何操作;②適合生命周期長(zhǎng)的活動(dòng),叫做業(yè)務(wù)事務(wù)類(lèi)型,通過(guò)引入調(diào)和、補(bǔ)償?shù)裙收咸幚頇C(jī)制,結(jié)合預(yù)先設(shè)立好的協(xié)議,既滿足業(yè)務(wù)流程的事務(wù)性要求,也便于其他用戶盡快訪問(wèn)活動(dòng)節(jié)點(diǎn)執(zhí)行時(shí)占用的資源。
結(jié)合SOA(services oriented architecture)面向服務(wù)架構(gòu)的工作流,重新賦予工作流各個(gè)活動(dòng)節(jié)點(diǎn)新的實(shí)現(xiàn)形式。傳統(tǒng)工作流的活動(dòng)節(jié)點(diǎn),局限于本地的某個(gè)特定的應(yīng)用程序,系統(tǒng)耦合度高,移植性差。而SOA的引入,則意味著可以選擇網(wǎng)絡(luò)提供的各種服務(wù)來(lái)實(shí)現(xiàn)工作流中活動(dòng)節(jié)點(diǎn)的執(zhí)行。一旦構(gòu)建了基于SOA架構(gòu)的工作流管理系統(tǒng),不同的功能模塊以服務(wù)(service)方式呈現(xiàn)出來(lái),服務(wù)間使用統(tǒng)一和標(biāo)準(zhǔn)的方式進(jìn)行通信,具備良好的通信契約和統(tǒng)一的訪問(wèn)接口定義[2],這種實(shí)現(xiàn)方式完全獨(dú)立于某個(gè)硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言,系統(tǒng)耦合度低、實(shí)現(xiàn)方式靈活、移植性好。
基于SOA的工作流因?yàn)槠涮赜械撵`活、多變的流程實(shí)現(xiàn)方式,而展現(xiàn)出網(wǎng)狀的任務(wù)匹配和執(zhí)行模式:①設(shè)定工作流每個(gè)活動(dòng)節(jié)點(diǎn)的任務(wù)是最頂層任務(wù),基于不同的粒度,可以將各個(gè)頂層任務(wù)逐步分解成一級(jí)、二級(jí)等多級(jí)子任務(wù),形成結(jié)構(gòu)化的任務(wù)分解架構(gòu);②最底層的子任務(wù)通過(guò)各種各樣的動(dòng)態(tài)發(fā)現(xiàn)和匹配算法,選擇最合適的服務(wù)資源。不同服務(wù)因?yàn)橄嗤慕涌诙x和通信契約,相互之間可以合成、嵌套;③服務(wù)提供的運(yùn)算結(jié)果經(jīng)由結(jié)構(gòu)化的層次返回給工作流節(jié)點(diǎn),保證其快速順暢進(jìn)行。
面向服務(wù)的工作流體系結(jié)構(gòu)如圖1所示。
面向服務(wù)的工作流同樣必須滿足事務(wù)性要求,但是它面臨的情況卻比傳統(tǒng)的工作流復(fù)雜很多,因?yàn)橐环矫嫠Y(jié)合了SOA的松耦合,實(shí)現(xiàn)了中立和彈性配置等特性,另一方面還具有更復(fù)雜的操作、更廣的分布性以及更多的異構(gòu)性[3]。因此對(duì)于長(zhǎng)時(shí)間運(yùn)行的工作流,必須充分保證業(yè)務(wù)過(guò)程的事務(wù)性,盡量避免回滾和補(bǔ)償過(guò)程。而一旦某個(gè)分支活動(dòng)出現(xiàn)故障時(shí),必須有選擇地補(bǔ)償部分節(jié)點(diǎn)以降低整個(gè)流程的補(bǔ)償代價(jià),保證流程快速有效地進(jìn)行。對(duì)于面向服務(wù)的工作流而言,補(bǔ)償會(huì)出現(xiàn)各種各樣的情況,如何完成某個(gè)服務(wù)節(jié)點(diǎn)的補(bǔ)償任務(wù)已經(jīng)引起業(yè)界的關(guān)注。
圖1 面向服務(wù)的工作流體系結(jié)構(gòu)
本文主要研究面向服務(wù)工作流的事務(wù)補(bǔ)償機(jī)制,提出了層次性協(xié)調(diào)框架來(lái)保證業(yè)務(wù)活動(dòng)的事務(wù)性,同時(shí)一旦需要執(zhí)行補(bǔ)償?shù)臅r(shí)候,快速準(zhǔn)確地執(zhí)行相應(yīng)的補(bǔ)償任務(wù)。
1 工作流活動(dòng)節(jié)點(diǎn)補(bǔ)償機(jī)制
工作流的某個(gè)活動(dòng)節(jié)點(diǎn)有可能出現(xiàn)異常,而在此前已執(zhí)行結(jié)束的活動(dòng)節(jié)點(diǎn)已經(jīng)對(duì)系統(tǒng)產(chǎn)生了一些影響。為此,必須通過(guò)執(zhí)行補(bǔ)償策略,消除已執(zhí)行行為產(chǎn)生的影響,才能確保整體流程沿著執(zhí)行路徑繼續(xù)下去或正常停止。
補(bǔ)償模式根據(jù)補(bǔ)償節(jié)點(diǎn)的多少分為完全補(bǔ)償和部分補(bǔ)償兩種,如圖2所示。圖2(a) 回滾所有的節(jié)點(diǎn)至工作流的起始點(diǎn),屬于完全補(bǔ)償。這種補(bǔ)償模式涉及全部已執(zhí)行的活動(dòng)節(jié)點(diǎn),回滾代價(jià)大,因?yàn)橐坏┠硞€(gè)節(jié)點(diǎn)出現(xiàn)異常,所有節(jié)點(diǎn)都必須回滾至原始狀態(tài)?;谶@種模式下處理邏輯比較簡(jiǎn)單,所以很多節(jié)點(diǎn)少、流程簡(jiǎn)單的工作流會(huì)采用這種補(bǔ)償模式。圖2(b) 則描述了部分補(bǔ)償執(zhí)行流程。不需要回滾或者補(bǔ)償所有節(jié)點(diǎn),而是通過(guò)設(shè)置回滾、補(bǔ)償點(diǎn),在故障點(diǎn)和安全點(diǎn)之間建立補(bǔ)償路徑,形成部分補(bǔ)償。通過(guò)有選擇地進(jìn)行部分節(jié)點(diǎn)的回滾和補(bǔ)償,處理突發(fā)的異常情況。這種補(bǔ)償實(shí)現(xiàn)起來(lái)代價(jià)較小,特別適合業(yè)務(wù)過(guò)程中節(jié)點(diǎn)沒(méi)必要進(jìn)行補(bǔ)償或者部分已實(shí)現(xiàn)的執(zhí)行結(jié)果需要保留等異常情況。但隨之而來(lái)的是它的處理邏輯必然較完全補(bǔ)償復(fù)雜許多。圖2(b)中,在逆向補(bǔ)償中,結(jié)點(diǎn)c2的補(bǔ)償活動(dòng)被忽略,直接由結(jié)點(diǎn)c3′跳至結(jié)點(diǎn)c1′。
針對(duì)這兩種補(bǔ)償方法,眾多文獻(xiàn)對(duì)補(bǔ)償路徑執(zhí)行效率的提高提出了不同解決方法。文獻(xiàn)[4]認(rèn)為對(duì)于執(zhí)行無(wú)影響的任務(wù)節(jié)點(diǎn)和執(zhí)行結(jié)果冪等的任務(wù)節(jié)點(diǎn),在補(bǔ)償圖中可以過(guò)濾掉這些補(bǔ)償,進(jìn)而提高補(bǔ)償效率。文獻(xiàn)[5]提出了“機(jī)會(huì)補(bǔ)償”概念,通過(guò)將執(zhí)行和補(bǔ)償之間的依賴關(guān)系顯式地明確標(biāo)識(shí)在工作流描述語(yǔ)言中,為補(bǔ)償過(guò)程提供了更多彈性。文獻(xiàn)[6]在多層次的事務(wù)模型基礎(chǔ)上提出了相應(yīng)的補(bǔ)償機(jī)制,重點(diǎn)強(qiáng)調(diào)了嵌套結(jié)構(gòu)下補(bǔ)償?shù)姆秶?,以上這幾種機(jī)制通常將工作流看成平坦流圖。文獻(xiàn)[7]提出了面向復(fù)雜事務(wù)工作流的層次式失效恢復(fù)算法HFR(Hierarchical Failure Recovery)?;诠ぷ髁鞫鄠€(gè)層次間具有基于應(yīng)用語(yǔ)義的依賴關(guān)系,很多時(shí)候較低層次出現(xiàn)的失效需要傳播到較高層次。HFR通過(guò)預(yù)先配置好子過(guò)程的恢復(fù)模式,動(dòng)態(tài)確定補(bǔ)償終止點(diǎn),為具有不同的子過(guò)程及活動(dòng)提供不同的靈活處理機(jī)制,將失效盡可能限制在低層block中,大大提高了補(bǔ)償執(zhí)行效率。
圖2 Compensate策略
基于SOA的事務(wù)工作流由于服務(wù)的松耦合性和動(dòng)態(tài)變化性,其補(bǔ)償模型的建立和補(bǔ)償過(guò)程的執(zhí)行變得相當(dāng)復(fù)雜。補(bǔ)償?shù)闹饕繕?biāo)就是構(gòu)建一個(gè)正確且代價(jià)最小的補(bǔ)償模型。本文針對(duì)這個(gè)目標(biāo),結(jié)合Web service中事務(wù)處理的規(guī)范,將協(xié)調(diào)者的角色加入到面向服務(wù)的工作流中,通過(guò)協(xié)調(diào)者的中間作用協(xié)調(diào)事務(wù)完成,盡量避免回滾和補(bǔ)償?shù)膱?zhí)行。當(dāng)服務(wù)節(jié)點(diǎn)出現(xiàn)各種各樣突發(fā)異常情況時(shí),各層的協(xié)調(diào)者還能利用層次性的框架完成補(bǔ)償過(guò)程。
2 面向服務(wù)工作流的協(xié)調(diào)框架
2.1 協(xié)調(diào)器結(jié)構(gòu)
協(xié)調(diào)器主要由4個(gè)元素組成:激活服務(wù)(Activation Service)、注冊(cè)服務(wù)(Registration Service)、協(xié)調(diào)服務(wù)(Coordination Service)、補(bǔ)償服務(wù)(Compensation Service)。創(chuàng)建和注冊(cè)服務(wù)的機(jī)制,涵蓋了事務(wù)性回滾和補(bǔ)償問(wèn)題的解決方法。工作流中各個(gè)任務(wù)活動(dòng)節(jié)點(diǎn)與底層服務(wù)的協(xié)調(diào)和通信基于這4個(gè)服務(wù)的通力合作。
協(xié)調(diào)器兼顧了目前流行的兩種協(xié)調(diào)模型(原子事務(wù)協(xié)調(diào)模型、業(yè)務(wù)事務(wù)協(xié)調(diào)模型),容許各系統(tǒng)、各平臺(tái)以事務(wù)方式進(jìn)行互操作。協(xié)調(diào)器最核心的協(xié)調(diào)服務(wù)模塊,既可以用一個(gè)結(jié)構(gòu)性的功能程序來(lái)實(shí)現(xiàn),也可以以層次性Agent的形式來(lái)處理工作流的任務(wù)或活動(dòng)。協(xié)調(diào)器組織結(jié)構(gòu)見(jiàn)圖3。
如圖3所示,任務(wù)節(jié)點(diǎn)和服務(wù)節(jié)點(diǎn)都由激活、注冊(cè)、協(xié)調(diào)和補(bǔ)償4部分組成。激活服務(wù)利用create消息通知協(xié)調(diào)器即將開(kāi)始一個(gè)新的工作流節(jié)點(diǎn)的任務(wù)活動(dòng),根據(jù)該活動(dòng)的事務(wù)要求設(shè)置協(xié)調(diào)協(xié)議。激活服務(wù)可以為新創(chuàng)建的活動(dòng)和現(xiàn)有活動(dòng)的關(guān)系建立嵌套關(guān)系或上下級(jí)關(guān)系,以應(yīng)對(duì)一些復(fù)雜工作流的嵌套事務(wù)性要求。注冊(cè)服務(wù)通過(guò)登記(enrollment)和選擇(selection),提供任務(wù)活動(dòng)和服務(wù)資源注冊(cè)。對(duì)于可補(bǔ)償或可替代的活動(dòng),其對(duì)應(yīng)的補(bǔ)償或替代服務(wù)也被注冊(cè)到協(xié)調(diào)器中。協(xié)調(diào)服務(wù)是協(xié)調(diào)器結(jié)構(gòu)中最核心最重要的功能模塊。協(xié)調(diào)服務(wù)主要由兩部分組成:①兩階段提交協(xié)議的執(zhí)行:第一階段通知各服務(wù)節(jié)點(diǎn)作準(zhǔn)備,如果收到所有節(jié)點(diǎn)的反饋,進(jìn)入第二階段。如果部分服務(wù)節(jié)點(diǎn)無(wú)反饋,則選擇其它可替換的等價(jià)服務(wù)節(jié)點(diǎn)。一旦找不到可替換的服務(wù),協(xié)調(diào)器最后通知任務(wù)節(jié)點(diǎn),任務(wù)無(wú)法完成;第二階段:當(dāng)收到所有服務(wù)節(jié)點(diǎn)都準(zhǔn)備好的消息后,協(xié)調(diào)器通知服務(wù)節(jié)點(diǎn)執(zhí)行任務(wù),服務(wù)節(jié)點(diǎn)執(zhí)行完成后返回是否執(zhí)行成功的消息給協(xié)調(diào)器;②協(xié)調(diào)補(bǔ)償服務(wù)完成:在服務(wù)節(jié)點(diǎn)執(zhí)行出現(xiàn)異常時(shí),協(xié)調(diào)器執(zhí)行恢復(fù)操作,盡可能撤消其它相關(guān)節(jié)點(diǎn)已經(jīng)產(chǎn)生的影響。補(bǔ)償服務(wù)和其它3個(gè)服務(wù)相輔相成,當(dāng)某個(gè)服務(wù)節(jié)點(diǎn)無(wú)法返回正確結(jié)果出現(xiàn)異常情況時(shí),補(bǔ)償服務(wù)負(fù)責(zé)根據(jù)該服務(wù)節(jié)點(diǎn)生成動(dòng)態(tài)補(bǔ)償圖,并將補(bǔ)償服務(wù)節(jié)點(diǎn)地址通知協(xié)調(diào)器,由協(xié)調(diào)器來(lái)完成補(bǔ)償。協(xié)調(diào)過(guò)程見(jiàn)圖4。
圖3 協(xié)調(diào)器組織結(jié)構(gòu)
圖4 協(xié)調(diào)序列
2.2 層次性協(xié)調(diào)補(bǔ)償架構(gòu)
傳統(tǒng)的補(bǔ)償模式和實(shí)現(xiàn)方法不能完全適用于面向服務(wù)的工作流。利用層次性的協(xié)調(diào)模型來(lái)協(xié)調(diào)事務(wù)活動(dòng)和后續(xù)補(bǔ)償活動(dòng)可以很好地應(yīng)對(duì)松耦合,以及結(jié)構(gòu)復(fù)雜的SOA事務(wù)工作流中出現(xiàn)的各種突發(fā)情況。設(shè)計(jì)如圖5所示的層次性協(xié)調(diào)架構(gòu),包括頂層協(xié)調(diào)器、子協(xié)調(diào)器和底層協(xié)調(diào)器。通過(guò)對(duì)同一粒度層的服務(wù)設(shè)置一個(gè)相應(yīng)層次的協(xié)調(diào)器,使得補(bǔ)償代價(jià)最小、效率最高。
當(dāng)某一層次的服務(wù)節(jié)點(diǎn)發(fā)生故障無(wú)法順利完成任務(wù)時(shí),協(xié)調(diào)器通過(guò)查找該服務(wù)節(jié)點(diǎn)有無(wú)補(bǔ)償服務(wù)節(jié)點(diǎn),動(dòng)態(tài)地確定補(bǔ)償圖。如果沒(méi)有相應(yīng)的補(bǔ)償服務(wù)節(jié)點(diǎn),則異常信息和動(dòng)態(tài)補(bǔ)償圖向上一層父協(xié)調(diào)器傳播。父協(xié)調(diào)器通過(guò)查找同一層的服務(wù)有無(wú)相應(yīng)的補(bǔ)償服務(wù)節(jié)點(diǎn),決定下一步的操作序列。通過(guò)自底向上一直重復(fù)這個(gè)過(guò)程,直至找到可以處理補(bǔ)償?shù)膮f(xié)調(diào)器。最終確定的協(xié)調(diào)器根據(jù)異常信息和得到的動(dòng)態(tài)補(bǔ)償結(jié)構(gòu)圖向部分補(bǔ)償服務(wù)資源發(fā)出執(zhí)行命令,接著選擇合適的替代路徑保證工作流的繼續(xù)執(zhí)行。所有參與補(bǔ)償服務(wù)資源執(zhí)行后將結(jié)果反饋給協(xié)調(diào)器,協(xié)調(diào)器將執(zhí)行結(jié)果經(jīng)由協(xié)調(diào)樹(shù)向上反饋給工作流的任務(wù)節(jié)點(diǎn),最終完成整個(gè)補(bǔ)償過(guò)程。
圖5 層次性補(bǔ)償協(xié)調(diào)架構(gòu)(S:SERVICE C:COORDINATOR)
這種層次性的協(xié)調(diào)架構(gòu)預(yù)先設(shè)置好服務(wù)的恢復(fù)模式和恢復(fù)策略,利用自底向上層層傳遞找到合適的協(xié)調(diào)器,通過(guò)補(bǔ)償模塊動(dòng)態(tài)產(chǎn)生補(bǔ)償圖,確定補(bǔ)償活動(dòng)的終止點(diǎn)來(lái)完成補(bǔ)償活動(dòng)。一旦服務(wù)可補(bǔ)償或者可替換,異常信息就不再向上傳播。補(bǔ)償域盡可能限制在低層的服務(wù)中,由底層的協(xié)調(diào)器處理補(bǔ)償過(guò)程,減少不必要的補(bǔ)償,提高失效恢復(fù)的效率。
3 結(jié)語(yǔ)
本文在研究Web service事務(wù)處理規(guī)范和工作流事務(wù)補(bǔ)償?shù)幕A(chǔ)上,提出了針對(duì)面向服務(wù)工作流體系結(jié)構(gòu)的層次性協(xié)調(diào)框架,以保證事務(wù)補(bǔ)償活動(dòng)快速準(zhǔn)確地執(zhí)行。層次性協(xié)調(diào)框架作為工作流和服務(wù)資源的中間件,對(duì)活動(dòng)和資源有效地協(xié)調(diào)管理,提高了工作流執(zhí)行效率。
參考文獻(xiàn):
[1] A SHETH,M RUSINKIEWICZ.On transactional workflows[J].IEEE Data Engineering Bulletin,1993,16(2): 3740.
[2] M P SINGH, M N HUHNS.Serviceoriented computing:semantics,processes,agents[M].John Wiley & Sons,2005.
[3] REN YI,WU QUANYUAN,JIA YAN,et al.A survey of transaction processing technology[J].Journal of Computer Research and Development,2005,42(10): 17791784 .
[4] Global transaction support for workflow management systems:from formal specification to practical implementation[EB/OL].http://www.docin.com/p973353998.html.
[5] M KAMATH,K RAMAMRITHAM.Failure handling and coordinated execution of concurrent workflows[J].Procs.14th Int.Conf.on Data Engineering,Orlando,F(xiàn)lorida,USA,1998:334341.
[6] P KRYCHNIAK.Bounding the effects of compensation under relaxed multilevel serializability[J].Distributed and Parallel Databases,Kluwer Academic,1996,4(4): 355374
[7] 任怡,吳泉源,賈焰. 一種層次式的事務(wù)工作流失效恢復(fù)算法[J].電子學(xué)報(bào),2005 (2):317320.
(責(zé)任編輯:杜能鋼)