孔欽
摘要:工作流管理系統(tǒng)通過集成企業(yè)內(nèi)部各種復(fù)雜的業(yè)務(wù)流程,實現(xiàn)流程自動執(zhí)行,在傳統(tǒng)的無紙化辦公環(huán)境中發(fā)揮了很大作用。隨著面向服務(wù)架構(gòu)SOA(ServiceOriented Architecture)、網(wǎng)格等概念的提出,工作流管理系統(tǒng)中各個活動節(jié)點不再局限于本地的應(yīng)用程序,而是逐步擴展到網(wǎng)絡(luò)上的各種個性化服務(wù)。工作流節(jié)點利用SOA架構(gòu)發(fā)現(xiàn)和匹配相適應(yīng)的服務(wù)資源來完成相關(guān)任務(wù)。研究了面向服務(wù)的工作流異常處理機制,在對現(xiàn)有補償方法進行總結(jié)的基礎(chǔ)上,提出了層次性協(xié)調(diào)框架以應(yīng)對面向服務(wù)的工作流異常情況,保證補償活動快速準確地并行執(zhí)行。
關(guān)鍵詞:SOA;事務(wù)工作流;補償活動;協(xié)調(diào)框架
DOIDOI:10.11907/rjdk.151355
中圖分類號:TP301
文獻標識碼:A 文章編號文章編號:16727800(2015)008005203
0 引言
事務(wù)概念開始來源于數(shù)據(jù)庫研究領(lǐng)域,提出的目的是為解決數(shù)據(jù)的出錯恢復(fù)和并發(fā)訪問問題。工作流中的活動節(jié)點對應(yīng)的業(yè)務(wù)過程可部分或完全自動完成。某些特定的應(yīng)用領(lǐng)域要求節(jié)點在執(zhí)行過程中作為一個整體,要么正確提交、要么回滾退出。針對某些工作流的特定事務(wù)特性,人們基于現(xiàn)有的數(shù)據(jù)庫事務(wù)模型,提出了各種適合工作流的事務(wù)模型,比如多層事務(wù)模型、嵌套事務(wù)模型、柔性事務(wù)模型和分支/匯合事務(wù)模型等。
Amit Sheth率先基于高級事務(wù)模型概念提出了事務(wù)工作流( Transactional Workflow)[1]概念。事務(wù)工作流結(jié)合了普通工作流和事務(wù)兩者特性,既支持業(yè)務(wù)流程的自動執(zhí)行,又滿足應(yīng)用程序的事務(wù)屬性。在事務(wù)工作流里,活動節(jié)點存在兩種事務(wù)類型:①適合生命周期短的活動,叫做原子事務(wù)類型,節(jié)點的執(zhí)行滿足原子性。這類事務(wù)執(zhí)行的特征是allornothing,參與的活動節(jié)點或者全部成功執(zhí)行,或者未執(zhí)行任何操作;②適合生命周期長的活動,叫做業(yè)務(wù)事務(wù)類型,通過引入調(diào)和、補償?shù)裙收咸幚頇C制,結(jié)合預(yù)先設(shè)立好的協(xié)議,既滿足業(yè)務(wù)流程的事務(wù)性要求,也便于其他用戶盡快訪問活動節(jié)點執(zhí)行時占用的資源。
結(jié)合SOA(services oriented architecture)面向服務(wù)架構(gòu)的工作流,重新賦予工作流各個活動節(jié)點新的實現(xiàn)形式。傳統(tǒng)工作流的活動節(jié)點,局限于本地的某個特定的應(yīng)用程序,系統(tǒng)耦合度高,移植性差。而SOA的引入,則意味著可以選擇網(wǎng)絡(luò)提供的各種服務(wù)來實現(xiàn)工作流中活動節(jié)點的執(zhí)行。一旦構(gòu)建了基于SOA架構(gòu)的工作流管理系統(tǒng),不同的功能模塊以服務(wù)(service)方式呈現(xiàn)出來,服務(wù)間使用統(tǒng)一和標準的方式進行通信,具備良好的通信契約和統(tǒng)一的訪問接口定義[2],這種實現(xiàn)方式完全獨立于某個硬件平臺、操作系統(tǒng)和編程語言,系統(tǒng)耦合度低、實現(xiàn)方式靈活、移植性好。
基于SOA的工作流因為其特有的靈活、多變的流程實現(xiàn)方式,而展現(xiàn)出網(wǎng)狀的任務(wù)匹配和執(zhí)行模式:①設(shè)定工作流每個活動節(jié)點的任務(wù)是最頂層任務(wù),基于不同的粒度,可以將各個頂層任務(wù)逐步分解成一級、二級等多級子任務(wù),形成結(jié)構(gòu)化的任務(wù)分解架構(gòu);②最底層的子任務(wù)通過各種各樣的動態(tài)發(fā)現(xiàn)和匹配算法,選擇最合適的服務(wù)資源。不同服務(wù)因為相同的接口定義和通信契約,相互之間可以合成、嵌套;③服務(wù)提供的運算結(jié)果經(jīng)由結(jié)構(gòu)化的層次返回給工作流節(jié)點,保證其快速順暢進行。
面向服務(wù)的工作流體系結(jié)構(gòu)如圖1所示。
面向服務(wù)的工作流同樣必須滿足事務(wù)性要求,但是它面臨的情況卻比傳統(tǒng)的工作流復(fù)雜很多,因為一方面它結(jié)合了SOA的松耦合,實現(xiàn)了中立和彈性配置等特性,另一方面還具有更復(fù)雜的操作、更廣的分布性以及更多的異構(gòu)性[3]。因此對于長時間運行的工作流,必須充分保證業(yè)務(wù)過程的事務(wù)性,盡量避免回滾和補償過程。而一旦某個分支活動出現(xiàn)故障時,必須有選擇地補償部分節(jié)點以降低整個流程的補償代價,保證流程快速有效地進行。對于面向服務(wù)的工作流而言,補償會出現(xiàn)各種各樣的情況,如何完成某個服務(wù)節(jié)點的補償任務(wù)已經(jīng)引起業(yè)界的關(guān)注。
圖1 面向服務(wù)的工作流體系結(jié)構(gòu)
本文主要研究面向服務(wù)工作流的事務(wù)補償機制,提出了層次性協(xié)調(diào)框架來保證業(yè)務(wù)活動的事務(wù)性,同時一旦需要執(zhí)行補償?shù)臅r候,快速準確地執(zhí)行相應(yīng)的補償任務(wù)。
1 工作流活動節(jié)點補償機制
工作流的某個活動節(jié)點有可能出現(xiàn)異常,而在此前已執(zhí)行結(jié)束的活動節(jié)點已經(jīng)對系統(tǒng)產(chǎn)生了一些影響。為此,必須通過執(zhí)行補償策略,消除已執(zhí)行行為產(chǎn)生的影響,才能確保整體流程沿著執(zhí)行路徑繼續(xù)下去或正常停止。
補償模式根據(jù)補償節(jié)點的多少分為完全補償和部分補償兩種,如圖2所示。圖2(a) 回滾所有的節(jié)點至工作流的起始點,屬于完全補償。這種補償模式涉及全部已執(zhí)行的活動節(jié)點,回滾代價大,因為一旦某個節(jié)點出現(xiàn)異常,所有節(jié)點都必須回滾至原始狀態(tài)?;谶@種模式下處理邏輯比較簡單,所以很多節(jié)點少、流程簡單的工作流會采用這種補償模式。圖2(b) 則描述了部分補償執(zhí)行流程。不需要回滾或者補償所有節(jié)點,而是通過設(shè)置回滾、補償點,在故障點和安全點之間建立補償路徑,形成部分補償。通過有選擇地進行部分節(jié)點的回滾和補償,處理突發(fā)的異常情況。這種補償實現(xiàn)起來代價較小,特別適合業(yè)務(wù)過程中節(jié)點沒必要進行補償或者部分已實現(xiàn)的執(zhí)行結(jié)果需要保留等異常情況。但隨之而來的是它的處理邏輯必然較完全補償復(fù)雜許多。圖2(b)中,在逆向補償中,結(jié)點c2的補償活動被忽略,直接由結(jié)點c3′跳至結(jié)點c1′。
針對這兩種補償方法,眾多文獻對補償路徑執(zhí)行效率的提高提出了不同解決方法。文獻[4]認為對于執(zhí)行無影響的任務(wù)節(jié)點和執(zhí)行結(jié)果冪等的任務(wù)節(jié)點,在補償圖中可以過濾掉這些補償,進而提高補償效率。文獻[5]提出了“機會補償”概念,通過將執(zhí)行和補償之間的依賴關(guān)系顯式地明確標識在工作流描述語言中,為補償過程提供了更多彈性。文獻[6]在多層次的事務(wù)模型基礎(chǔ)上提出了相應(yīng)的補償機制,重點強調(diào)了嵌套結(jié)構(gòu)下補償?shù)姆秶?,以上這幾種機制通常將工作流看成平坦流圖。文獻[7]提出了面向復(fù)雜事務(wù)工作流的層次式失效恢復(fù)算法HFR(Hierarchical Failure Recovery)。基于工作流多個層次間具有基于應(yīng)用語義的依賴關(guān)系,很多時候較低層次出現(xiàn)的失效需要傳播到較高層次。HFR通過預(yù)先配置好子過程的恢復(fù)模式,動態(tài)確定補償終止點,為具有不同的子過程及活動提供不同的靈活處理機制,將失效盡可能限制在低層block中,大大提高了補償執(zhí)行效率。
圖2 Compensate策略
基于SOA的事務(wù)工作流由于服務(wù)的松耦合性和動態(tài)變化性,其補償模型的建立和補償過程的執(zhí)行變得相當復(fù)雜。補償?shù)闹饕繕司褪菢?gòu)建一個正確且代價最小的補償模型。本文針對這個目標,結(jié)合Web service中事務(wù)處理的規(guī)范,將協(xié)調(diào)者的角色加入到面向服務(wù)的工作流中,通過協(xié)調(diào)者的中間作用協(xié)調(diào)事務(wù)完成,盡量避免回滾和補償?shù)膱?zhí)行。當服務(wù)節(jié)點出現(xiàn)各種各樣突發(fā)異常情況時,各層的協(xié)調(diào)者還能利用層次性的框架完成補償過程。
2 面向服務(wù)工作流的協(xié)調(diào)框架
2.1 協(xié)調(diào)器結(jié)構(gòu)
協(xié)調(diào)器主要由4個元素組成:激活服務(wù)(Activation Service)、注冊服務(wù)(Registration Service)、協(xié)調(diào)服務(wù)(Coordination Service)、補償服務(wù)(Compensation Service)。創(chuàng)建和注冊服務(wù)的機制,涵蓋了事務(wù)性回滾和補償問題的解決方法。工作流中各個任務(wù)活動節(jié)點與底層服務(wù)的協(xié)調(diào)和通信基于這4個服務(wù)的通力合作。
協(xié)調(diào)器兼顧了目前流行的兩種協(xié)調(diào)模型(原子事務(wù)協(xié)調(diào)模型、業(yè)務(wù)事務(wù)協(xié)調(diào)模型),容許各系統(tǒng)、各平臺以事務(wù)方式進行互操作。協(xié)調(diào)器最核心的協(xié)調(diào)服務(wù)模塊,既可以用一個結(jié)構(gòu)性的功能程序來實現(xiàn),也可以以層次性Agent的形式來處理工作流的任務(wù)或活動。協(xié)調(diào)器組織結(jié)構(gòu)見圖3。
如圖3所示,任務(wù)節(jié)點和服務(wù)節(jié)點都由激活、注冊、協(xié)調(diào)和補償4部分組成。激活服務(wù)利用create消息通知協(xié)調(diào)器即將開始一個新的工作流節(jié)點的任務(wù)活動,根據(jù)該活動的事務(wù)要求設(shè)置協(xié)調(diào)協(xié)議。激活服務(wù)可以為新創(chuàng)建的活動和現(xiàn)有活動的關(guān)系建立嵌套關(guān)系或上下級關(guān)系,以應(yīng)對一些復(fù)雜工作流的嵌套事務(wù)性要求。注冊服務(wù)通過登記(enrollment)和選擇(selection),提供任務(wù)活動和服務(wù)資源注冊。對于可補償或可替代的活動,其對應(yīng)的補償或替代服務(wù)也被注冊到協(xié)調(diào)器中。協(xié)調(diào)服務(wù)是協(xié)調(diào)器結(jié)構(gòu)中最核心最重要的功能模塊。協(xié)調(diào)服務(wù)主要由兩部分組成:①兩階段提交協(xié)議的執(zhí)行:第一階段通知各服務(wù)節(jié)點作準備,如果收到所有節(jié)點的反饋,進入第二階段。如果部分服務(wù)節(jié)點無反饋,則選擇其它可替換的等價服務(wù)節(jié)點。一旦找不到可替換的服務(wù),協(xié)調(diào)器最后通知任務(wù)節(jié)點,任務(wù)無法完成;第二階段:當收到所有服務(wù)節(jié)點都準備好的消息后,協(xié)調(diào)器通知服務(wù)節(jié)點執(zhí)行任務(wù),服務(wù)節(jié)點執(zhí)行完成后返回是否執(zhí)行成功的消息給協(xié)調(diào)器;②協(xié)調(diào)補償服務(wù)完成:在服務(wù)節(jié)點執(zhí)行出現(xiàn)異常時,協(xié)調(diào)器執(zhí)行恢復(fù)操作,盡可能撤消其它相關(guān)節(jié)點已經(jīng)產(chǎn)生的影響。補償服務(wù)和其它3個服務(wù)相輔相成,當某個服務(wù)節(jié)點無法返回正確結(jié)果出現(xiàn)異常情況時,補償服務(wù)負責(zé)根據(jù)該服務(wù)節(jié)點生成動態(tài)補償圖,并將補償服務(wù)節(jié)點地址通知協(xié)調(diào)器,由協(xié)調(diào)器來完成補償。協(xié)調(diào)過程見圖4。
圖3 協(xié)調(diào)器組織結(jié)構(gòu)
圖4 協(xié)調(diào)序列
2.2 層次性協(xié)調(diào)補償架構(gòu)
傳統(tǒng)的補償模式和實現(xiàn)方法不能完全適用于面向服務(wù)的工作流。利用層次性的協(xié)調(diào)模型來協(xié)調(diào)事務(wù)活動和后續(xù)補償活動可以很好地應(yīng)對松耦合,以及結(jié)構(gòu)復(fù)雜的SOA事務(wù)工作流中出現(xiàn)的各種突發(fā)情況。設(shè)計如圖5所示的層次性協(xié)調(diào)架構(gòu),包括頂層協(xié)調(diào)器、子協(xié)調(diào)器和底層協(xié)調(diào)器。通過對同一粒度層的服務(wù)設(shè)置一個相應(yīng)層次的協(xié)調(diào)器,使得補償代價最小、效率最高。
當某一層次的服務(wù)節(jié)點發(fā)生故障無法順利完成任務(wù)時,協(xié)調(diào)器通過查找該服務(wù)節(jié)點有無補償服務(wù)節(jié)點,動態(tài)地確定補償圖。如果沒有相應(yīng)的補償服務(wù)節(jié)點,則異常信息和動態(tài)補償圖向上一層父協(xié)調(diào)器傳播。父協(xié)調(diào)器通過查找同一層的服務(wù)有無相應(yīng)的補償服務(wù)節(jié)點,決定下一步的操作序列。通過自底向上一直重復(fù)這個過程,直至找到可以處理補償?shù)膮f(xié)調(diào)器。最終確定的協(xié)調(diào)器根據(jù)異常信息和得到的動態(tài)補償結(jié)構(gòu)圖向部分補償服務(wù)資源發(fā)出執(zhí)行命令,接著選擇合適的替代路徑保證工作流的繼續(xù)執(zhí)行。所有參與補償服務(wù)資源執(zhí)行后將結(jié)果反饋給協(xié)調(diào)器,協(xié)調(diào)器將執(zhí)行結(jié)果經(jīng)由協(xié)調(diào)樹向上反饋給工作流的任務(wù)節(jié)點,最終完成整個補償過程。
圖5 層次性補償協(xié)調(diào)架構(gòu)(S:SERVICE C:COORDINATOR)
這種層次性的協(xié)調(diào)架構(gòu)預(yù)先設(shè)置好服務(wù)的恢復(fù)模式和恢復(fù)策略,利用自底向上層層傳遞找到合適的協(xié)調(diào)器,通過補償模塊動態(tài)產(chǎn)生補償圖,確定補償活動的終止點來完成補償活動。一旦服務(wù)可補償或者可替換,異常信息就不再向上傳播。補償域盡可能限制在低層的服務(wù)中,由底層的協(xié)調(diào)器處理補償過程,減少不必要的補償,提高失效恢復(fù)的效率。
3 結(jié)語
本文在研究Web service事務(wù)處理規(guī)范和工作流事務(wù)補償?shù)幕A(chǔ)上,提出了針對面向服務(wù)工作流體系結(jié)構(gòu)的層次性協(xié)調(diào)框架,以保證事務(wù)補償活動快速準確地執(zhí)行。層次性協(xié)調(diào)框架作為工作流和服務(wù)資源的中間件,對活動和資源有效地協(xié)調(diào)管理,提高了工作流執(zhí)行效率。
參考文獻:
[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é)報,2005 (2):317320.
(責(zé)任編輯:杜能鋼)