摘 要:介紹了Web服務(wù)和事務(wù)的相關(guān)概念,闡述了傳統(tǒng)事務(wù)處理協(xié)議在Web服務(wù)處理環(huán)境中存在的問題;然后結(jié)合目前流行的WST協(xié)議族對Web事務(wù)處理作了分析;最后根據(jù)分析總結(jié)了解決問題的思路,以及在Web服務(wù)事務(wù)處理中建議采用的策略。
關(guān)鍵詞:Web服務(wù); Web服務(wù)事務(wù); Web服務(wù)原子事務(wù); Web服務(wù)業(yè)務(wù)活動; Web服務(wù)業(yè)務(wù)活動發(fā)起者
中圖分類號:TP311 文獻(xiàn)標(biāo)志碼:A
文章編號:10013695(2008)09279803
WST protocol family and its research and application
RUAN Chunrong, CHEN Bo, ZHOU Mingtian
(Developing Union Laboratory of Information Safety, University of Electronic Science Technology of China, Chengdu 610054, China)
Abstract:The article introduced the related concepts about Web services and transactions.Then it analyzed the problems existing in the Web services processing environment about the traditional transaction process protocol and the WST protocol family. At last, according to the analysis above, it summarized the way to solve the problem and proposed an adopting strategy in the Web service transaction process.
Key words:Web services; WST; WSAtomicTransaction; WSBusinessActivity; WSBusinessActivityInitiator
隨著互聯(lián)網(wǎng)技術(shù)和應(yīng)用的迅速發(fā)展,Web 服務(wù)正在成為基于Internet的新一代計算平臺。Web 服務(wù)具有良好的互操作性,能夠為不同實現(xiàn)標(biāo)準(zhǔn)和通信機(jī)制下的軟件交互和集成提供有效的支持[1],因此具有廣泛的應(yīng)用前景。 在Web 服務(wù)應(yīng)用中,常常需要處理應(yīng)用相關(guān)的多個Web 服務(wù)間的交互和組合過程,這類過程必須保證多個Web 服務(wù)運行結(jié)果的可靠性和一致性,并能及時解決運行時的各種異常。因此,Web 服務(wù)處理環(huán)境需要事務(wù)技術(shù)的支持。
1 Web服務(wù)概念
Web服務(wù)是獨立的、模塊化的業(yè)務(wù)流程應(yīng)用程序[2,3],它基于的行業(yè)標(biāo)準(zhǔn)技術(shù)有WSDL、UDDI和SOAP。Web服務(wù)是包裝了一些操作的接口,通過標(biāo)準(zhǔn)化的XML消息傳遞機(jī)制SOAP來訪問這些操作,使得基于Web服務(wù)應(yīng)用程序具備松散耦合、面向組件和跨技術(shù)實現(xiàn)的特點。使用Web服務(wù)可以有效地解決異構(gòu)網(wǎng)絡(luò)之間的通信。Web服務(wù)是創(chuàng)建可互操作的、分布式應(yīng)用程序的重要選擇。Web服務(wù)可以單獨或與其他Web服務(wù)一起用于實現(xiàn)復(fù)雜的聚集或商業(yè)交易,從而可以以一種平臺和語言獨立的方式在網(wǎng)絡(luò)上經(jīng)營業(yè)務(wù)。
Web 服務(wù)系統(tǒng)具有以下特性:a)長事務(wù)。由于商務(wù)處理、網(wǎng)絡(luò)延遲和用戶的交互,一個Web 服務(wù)事務(wù)處理過程往往會持續(xù)較長的時間,使得鎖定資源的策略不再適用。b)自治性。Web 服務(wù)提供者擁有對服務(wù)的控制權(quán),其他應(yīng)用可能無法鎖定它需要的資源。c)松耦合。Web 服務(wù)之間是松散耦合的。d)更多潛在的故障。不僅進(jìn)程和機(jī)器可能崩潰,廣域網(wǎng)絡(luò)也比傳統(tǒng)分布式系統(tǒng)的內(nèi)部網(wǎng)更加不可靠。e)一次事務(wù)過程可能跨越多個組織。
2 事務(wù)及其屬性
事務(wù)是一系列對于物理的或抽象的應(yīng)用狀態(tài)的操作組成的集合。事務(wù)的目的是確保系統(tǒng)容錯和并發(fā)控制的正確順利運行,從而更好地保證系統(tǒng)的可靠性。
傳統(tǒng)的分布式事務(wù)具有ACID 性質(zhì):a)原子性(atomicity),事務(wù)的所有參加者要么都提交,要么都撤銷;b)一致性(consistency),事務(wù)不會破壞系統(tǒng)的恒定,事務(wù)執(zhí)行的結(jié)果必須使系統(tǒng)從一個一致性狀態(tài)變換到另一個一致性狀態(tài);c)獨立性(isolation),并發(fā)執(zhí)行的各個事務(wù)間不會相互干擾;d)持久性(durability),事務(wù)一旦提交,它對系統(tǒng)的改變就是永久的,其他任何操作或故障都不會對其產(chǎn)生影響。
為了實現(xiàn)嚴(yán)格的ACID 性質(zhì),事務(wù)必須是短生命期的;系統(tǒng)必須是緊耦合的;協(xié)調(diào)者必須對參加者擁有完全的控制權(quán)。
3 傳統(tǒng)事務(wù)處理協(xié)議
傳統(tǒng)事務(wù)處理主要處理嚴(yán)格遵循ACID屬性的原子事務(wù),其處理有賴于傳統(tǒng)事務(wù)處理中的資源鎖定等技術(shù)手段。作為分布式自治服務(wù)構(gòu)成的粗粒度業(yè)務(wù)事務(wù),由于沒有集中化的事務(wù)管理器,必須實現(xiàn)完成協(xié)議(completion protocol)。應(yīng)用程序首先通過該協(xié)議來告知協(xié)調(diào)器嘗試提交或放棄一個事務(wù)。對于具體的提交,需要實現(xiàn)典型的兩階段提交協(xié)議[4](2PC)。兩種協(xié)議均實現(xiàn)為底層協(xié)調(diào)框架中的協(xié)調(diào)協(xié)議。
完成協(xié)議用于啟動提交處理。為完成而注冊的Web服務(wù)能夠通知指定的協(xié)調(diào)者何時開始提交處理。該協(xié)議還詳細(xì)說明了用于通知啟動者事務(wù)最終結(jié)果的消息。
兩階段提交協(xié)議為所有已注冊的參與者提供了一個公共的提交或終止決定,確保了所有參與者都能得到最終結(jié)果通知。顧名思義,它使用兩輪通知來完成該事務(wù)。該協(xié)議的兩個變體是易失2PC(volatile 2PC)和持久2PC(durable 2PC)。這兩個協(xié)議使用相同的消息(對應(yīng)于prepare、commit和abort操作),但易失2PC沒有持久性要求。易失2PC協(xié)議供管理易失資源的參與者使用,如緩存管理器或窗口管理器。這些參與者在第一輪通知中不與協(xié)調(diào)者發(fā)生聯(lián)系,且不需要第二輪的通知。持久2PC協(xié)議供管理數(shù)據(jù)庫和文件等持久資源的參與者使用。當(dāng)某一提交處理已經(jīng)啟動時,在所有易失2PC參與者被聯(lián)系過之后這些參與者會第一次被聯(lián)系,這使緩存能夠被刷新。持久2PC參與者需要完整的兩輪通知來實現(xiàn)協(xié)調(diào)者所要求的全有或全無行為以及完成該事務(wù)。這些行為最適合于在整個事務(wù)期內(nèi)持有資源,且該事務(wù)通常為非常短暫事務(wù)的情況。該協(xié)議保證在正常處理的情況下,協(xié)調(diào)者提供第一階段結(jié)果的同時將聯(lián)系所有參與者。兩階段提交協(xié)議的兩階段協(xié)作如圖1所示。
4 傳統(tǒng)事務(wù)處理協(xié)議在Web服務(wù)中存在的問題
Web services 與傳統(tǒng)事務(wù)處理協(xié)議之間存在著矛盾。傳統(tǒng)事務(wù)處理協(xié)議是嚴(yán)格遵循事務(wù)的ACID屬性的。
Web services 是松耦合的環(huán)境。傳統(tǒng)事務(wù)處理協(xié)議中事務(wù)的隔離性要求使不同的事務(wù)之間不能進(jìn)行消息或控制的交換,這樣就限制了參與者之間的交互和數(shù)據(jù)交換,使得協(xié)作喪失了基礎(chǔ),Web services 的松耦合優(yōu)勢得不到體現(xiàn)。
傳統(tǒng)事務(wù)處理協(xié)議[5]對長事務(wù)支持較差,長時間持續(xù)增加了執(zhí)行過程中出現(xiàn)差錯的可能性,根據(jù)事務(wù)的原子性要求,將導(dǎo)致前功盡棄。對于協(xié)作過程特別是同步協(xié)作,參與者需要感知到其他參與者的存在。而傳統(tǒng)的事務(wù)處理協(xié)議中, 用戶獨自使用數(shù)據(jù)庫, 感覺不到其他用戶。Web services 事務(wù)處理能力是其能否投入商業(yè)應(yīng)用的關(guān)鍵技術(shù)之一[5],因此提出了各種不同的事務(wù)處理協(xié)議支持Web services 環(huán)境下的事務(wù)處理。
5 WST(WSTransaction)協(xié)議族
WSBA[6](WSBusinessActivity)規(guī)范與WSAT(WSAtomicTransaction)和WSC(WSCoordination)規(guī)范一起形成了WST協(xié)議族,同時它也被稱為Web服務(wù)事務(wù)處理框架[7](Web services transaction framework,WSTF)。在這些規(guī)范集中,WSC提供實現(xiàn)Web服務(wù)事務(wù)處理交互的基礎(chǔ),它定義了事務(wù)的協(xié)調(diào)上下文和注冊服務(wù)的協(xié)議。WSAT和WSBA基于WSC說明了不同類型的事務(wù)類型。WSAT集中于處理遵循ACID規(guī)則的事務(wù),它實現(xiàn)兩階段提交協(xié)議;WSBA集中于長事務(wù)處理,允許人為交互和混合結(jié)果。同時H.Erven等人[6]定義了WSBA規(guī)范的擴(kuò)展協(xié)議——WSBAI(WSBusinessActivityInitiator),這個協(xié)議明確地定義了發(fā)起者與協(xié)調(diào)服務(wù)之間的接口。
51 WSC協(xié)議
WSC規(guī)范為Web services 協(xié)調(diào)提供了一個通用的基礎(chǔ),并對當(dāng)今市場上存在的各種標(biāo)準(zhǔn)事務(wù)機(jī)制提供支持。WSC規(guī)范包含對原子事務(wù)和業(yè)務(wù)事務(wù)協(xié)議的定義。
WSC[8]是一個協(xié)調(diào)框架,它使分布的參與者能夠在他們的行動上就一個通用的結(jié)果達(dá)成一致。分布式的參與者能夠使用WSC[6]將每個參與者的行為集合在一起,并且通過確保它們在協(xié)調(diào)上下文中執(zhí)行的所有操作均產(chǎn)生單一的結(jié)果來進(jìn)一步管理這些行為。協(xié)調(diào)服務(wù)也叫協(xié)調(diào)器,它由激活服務(wù)、注冊服務(wù)和協(xié)調(diào)協(xié)議服務(wù)組成。激活服務(wù)支持創(chuàng)建事務(wù)上下文操作來創(chuàng)建協(xié)調(diào)上下文;注冊服務(wù)用來協(xié)調(diào)協(xié)議選擇和注冊參與方;協(xié)調(diào)協(xié)議服務(wù)支持協(xié)調(diào)協(xié)議的使用,該協(xié)議定義了協(xié)調(diào)器與參與者之間的行為和通信。52 WSAT協(xié)議
原子事務(wù)支持主要處理嚴(yán)格遵循ACID屬性的事務(wù),其事務(wù)處理采用兩階段提交協(xié)議。兩階段提交協(xié)議中存在以下兩個階段:a)準(zhǔn)備階段。事務(wù)協(xié)調(diào)者將向事務(wù)中的每個參與者發(fā)送一則消息,要求每個參與者準(zhǔn)備提交[4,5]。當(dāng)某參與者準(zhǔn)備好時,它保證可以提交事務(wù)并為自己的工作生成一條永久記錄。在保證可以提交之后,它不能再單方面決定回滾事務(wù)。如果該參與者不能準(zhǔn)備(也就是說如果它不能保證自己可以提交任務(wù)) ,那么必須回滾事務(wù)。b)解決階段。事務(wù)協(xié)調(diào)者將對所有回應(yīng)作出抉擇[4,5]。如果所有參與者都準(zhǔn)備提交,則提交事務(wù);否則回滾事務(wù)。無論哪種情況,事務(wù)協(xié)調(diào)者都會將結(jié)果通知所有參與者。如果結(jié)果為提交,參與者將確認(rèn)它們已經(jīng)提交[9]。
53 WSBA協(xié)議及其擴(kuò)展協(xié)議WSBAI
WSBA標(biāo)準(zhǔn)[10]提供了靈活的事務(wù)處理特性。它主要用于協(xié)調(diào)長時間運行、松耦合的事務(wù),并希望應(yīng)用業(yè)務(wù)邏輯來處理業(yè)務(wù)異常。由于隔離性限制被取消,資源鎖定手段不再適用。它與原子事務(wù)處理最大的差異在于引入了補償機(jī)制。補償機(jī)制不要求參與者鎖定數(shù)據(jù)并延遲提交數(shù)據(jù),而是假設(shè)所有的更新都是立即提交,但準(zhǔn)備了反向的操作方式在發(fā)生錯誤時撤銷已經(jīng)執(zhí)行操作帶來的影響。
WSBA規(guī)范允許嵌套事務(wù)邏輯[6,10]。一個業(yè)務(wù)活動也許會包含于另一個業(yè)務(wù)活動,這也就意味著一個長事務(wù)會集成多個原子事務(wù)。不過,在事務(wù)處理中它允許子事務(wù)單獨提交,并由上一級事務(wù)邏輯負(fù)責(zé)決定這個長時間運行事務(wù)的最終結(jié)果。
與WSAT規(guī)范(定義了所有必要的事務(wù)處理的接口)不同的是[6],WSBA規(guī)范沒有定義發(fā)起者和協(xié)調(diào)者之間的接口。這樣允許客戶將WSBA協(xié)調(diào)者和他們的事務(wù)處理引擎相結(jié)合,然而這需要在發(fā)起者與協(xié)調(diào)者之間設(shè)立專用的協(xié)議。WSBAI[6]正是這樣明確定義了發(fā)起者與協(xié)調(diào)者之間的接口協(xié)議。
為了創(chuàng)建一個事務(wù)上下文,發(fā)起者需要聯(lián)系激活服務(wù)。另外,發(fā)起者需要通過聯(lián)系與事務(wù)上下文關(guān)聯(lián)的注冊服務(wù)向WSBAI協(xié)議注冊自己。協(xié)調(diào)器只允許一個事務(wù)上下文有一個發(fā)起者[6,10],在發(fā)起者注冊完畢后,協(xié)調(diào)器將拒絕WSBAI協(xié)議的任何后繼注冊請求。當(dāng)成功注冊時,發(fā)起者使用WSBAI協(xié)議服務(wù)來與事務(wù)上下文通信。
在子上下文中取消和補償操作的特殊考慮[6,10]:
在完成狀態(tài)下,WSBA協(xié)議允許協(xié)調(diào)器和參與者發(fā)起狀態(tài)轉(zhuǎn)換消息,即協(xié)調(diào)器可以發(fā)送取消,參與者也可以發(fā)送退出、完成或者錯誤。如果雙方同時發(fā)送消息,它們將會相互抵觸。這時協(xié)調(diào)器必須放棄它自己的消息并接收參與者的信息。
如果參與者報告完成,這時它需要運行補償,因為協(xié)調(diào)器發(fā)送了取消消息。但這不像取消,補償是允許失敗的[6]。在事務(wù)處理過程中,允許這種情況發(fā)生:當(dāng)協(xié)調(diào)器及時發(fā)送取消命令時,參與者卻以任何方式完成,但過一段時間它在補償時失敗。這樣,這個任務(wù)就永久地完成了而不是被取消。
這種情況在子上下文中是特別[6]不好的。當(dāng)子上下文的協(xié)調(diào)器告知取消并向前發(fā)送這個命令給本地參與者時,一些參與者也許成功地取消了,而其他的已經(jīng)完成了。但協(xié)調(diào)器不能報告完成,因為這個任務(wù)的一些部分已經(jīng)取消了。另一方面它也不能報告取消,因為一些工作確實是執(zhí)行了。因而子協(xié)調(diào)器必須立即試圖補償這些已完成的參與者的操作。如果它們都成功地補償了[6],才可以向上一級上下文報告取消。如果一個參與者在補償時失敗了,整個子上下文必須向上一級上下文報告錯誤來進(jìn)一步處理這個問題[6]。
6 結(jié)束語
從以上對各規(guī)范的分析可以看出, 要解決傳統(tǒng)事務(wù)處理存在的問題,需要將傳統(tǒng)事務(wù)進(jìn)行擴(kuò)展,建立適合實際需要的事務(wù)模型,并在此基礎(chǔ)之上制定事務(wù)處理協(xié)議。Web services處理需要各事務(wù)處理協(xié)議的相互協(xié)作才能滿足現(xiàn)在業(yè)務(wù)活動的需要,也才能達(dá)到事務(wù)處理預(yù)定的效果。如可以使用WST協(xié)議族,并在具體實現(xiàn)時將WSBA規(guī)范與WSBAI規(guī)范結(jié)合使用,因為WSBAI使得WSBA發(fā)起者能夠招募參與者[6],檢查它們現(xiàn)在的狀態(tài)和通知協(xié)調(diào)服務(wù)它做的決定。這樣不僅能使源代碼的模塊性劇烈增強(qiáng),而且允許來自不同客戶的協(xié)調(diào)者和參與者進(jìn)行透明的合作[6]。
在設(shè)計一個系統(tǒng)實現(xiàn)時,可以使用擴(kuò)展協(xié)議這種機(jī)制,它可以方便地對協(xié)調(diào)類型進(jìn)行擴(kuò)展。當(dāng)出現(xiàn)新的事務(wù)業(yè)務(wù)邏輯時,只需要在業(yè)務(wù)事務(wù)處理核心模塊中插入相應(yīng)的事務(wù)協(xié)調(diào)支持,而不用改變整個系統(tǒng)的結(jié)構(gòu)。另外,由于事務(wù)處理的參與者需要向協(xié)調(diào)器注冊,且一個事務(wù)可能需要若干個參與者。可以通過handler技術(shù)來實現(xiàn)它們的注冊,即通過在客戶端和服務(wù)端配置handler來實現(xiàn)。當(dāng)事務(wù)上下文創(chuàng)建以后,具體的業(yè)務(wù)操作開始通過SOAP引擎發(fā)送SOAP請求消息給相應(yīng)業(yè)務(wù)的服務(wù)提供者時,通過客戶端配置的handler,在這個SOAP請求消息的header中加入相應(yīng)的協(xié)調(diào)上下文。當(dāng)這個請求消息到達(dá)服務(wù)端時,通過服務(wù)端配置文件中配置的handler來處理SOAP請求消息的header,以此確定是否需要注冊參與者,即參與者的注冊過程可在事務(wù)上下文創(chuàng)建之后,在執(zhí)行具體的業(yè)務(wù)邏輯時,通過客戶端和服務(wù)端配置的handler來決定是否要注冊參與者。這種處理方式可以方便地擴(kuò)展事務(wù)的參與者。
參考文獻(xiàn):
[1]尹瑞.Web 服務(wù)事務(wù)處理系統(tǒng)的研究與實現(xiàn)[J]. 北京航空航天大學(xué)學(xué)報,2005,31(4):439442.
[2]MONSONHAEFEL R. J2EE Web services高級編程[M].崔洪斌,王愛民,譯. 北京:清華大學(xué)出版社,2005.
[3]趙傳慧.Web服務(wù)事務(wù)處理技術(shù)分析[J].中州煤炭,2005(6):2829.
[4]CABRERA L,COPELAND G,COX W,et al. Web services atomic transaction[EB/OL].(2005).ftp://www6.software.ibm.com/software/developer/library/WSAtomicTransaction.pdf.
[5]石雙元.事務(wù)處理協(xié)議及其在Web services中的應(yīng)用分析[J].管理學(xué)報,2005,2(sup):7073.
[6]ERVEN H, HICKER G, HUEMER C,et al. The Web servicesBusinessActivityInitiator protocol: an extension to the Web ServicesBusinessActivity specification[K].[S.l.]:Business Informatics Group,2006.
[7]Web services transaction framework[EB/OL]. (2005).http://www128.ibm.com/developerworks/library/specification/wstx/.
[8]CABRERA L,COPELAND G,COX W,et al.Web services coordination(WSCoordination)[EB/OL] .(2005).ftp://www6.software.ibm.com/software/developer/library/ WSCoordination.pdf.
[9]唐飛龍. 一個Web 服務(wù)事務(wù)處理模型:結(jié)構(gòu)、算法和事務(wù)補償[J].電子學(xué)報,2003,31(12):20742078.
[10]CABREA L,COPELAND G,COX W,et al.Web services business activity framework[EB/OL]. (2005).ftp://www6.software.ibm.com/software/developer/library/WSBusinessActivity.pdf.