分布式事務(wù)
一、 事務(wù)概述
1、 事務(wù)協(xié)議
跟WCF相關(guān)的事務(wù)協(xié)議有三個(gè)。
1.1. Lightweight protocol
這是個(gè)輕量級(jí)的本地事務(wù)協(xié)議,限制管理在一個(gè)AppDomain中的事務(wù)。不能跨AppDomain邊界傳播事務(wù),也不能跨服務(wù)邊界傳播事務(wù)。跟其他協(xié)議比,Lightweight protocol是最有效率的協(xié)議。
1.2. OleTx protocol
這個(gè)協(xié)議可用于跨AppDomain,進(jìn)程和機(jī)器邊界,管理兩階段提交的事務(wù)協(xié)議。這個(gè)跨邊界的事務(wù)協(xié)議使用RPC,是二進(jìn)制的,windows專有的協(xié)議,不能穿越防火墻,也不能用于與非windows系統(tǒng)的互操作。在windows環(huán)境下的局域網(wǎng),OleTx協(xié)議是很好的分布式事務(wù)的管理協(xié)議。
1.3. WS-Atomic Transaction (WSAT) protocol
WSAT跟OleTx協(xié)議類似,也可以跨AppDomain,進(jìn)程和機(jī)器邊界,管理兩階段提交的事務(wù)協(xié)議。但WSAT不是微軟的專有協(xié)議,此協(xié)議是微軟、IBM、BEA等公司共同提出的工業(yè)標(biāo)準(zhǔn)。此協(xié)議也可用于Intranet中,但是更多的是用于在Internet環(huán)境下,或者跟非windows系統(tǒng)進(jìn)行互操作的分布式事務(wù)。
說到WSAT協(xié)議這里有必要一下分布式事務(wù)的發(fā)展。
分布式事務(wù):
分布式事務(wù)在企業(yè)應(yīng)用中是很重要的一個(gè)方面,微軟使用MSDTC作為分布式事務(wù)管理器,使用OleTx事務(wù)協(xié)議進(jìn)行分布式事務(wù)管理,但是OleTx事務(wù)協(xié)議是微軟的專有協(xié)議,不是公認(rèn)標(biāo)準(zhǔn)。在分布式環(huán)境中異構(gòu)系統(tǒng)的交互一定要有個(gè)公認(rèn)同意的分布式事務(wù)標(biāo)準(zhǔn)才能在異構(gòu)的系統(tǒng)中實(shí)現(xiàn)分布式事務(wù)的協(xié)調(diào)。
l OGM的XA事務(wù)規(guī)范
1994年,開放組織(Open Group)的 X/Open 分布式事務(wù)流程(DTP)模型,它定義了 應(yīng)用程序如何使用 事務(wù)管理程序跨多個(gè) 資源管理程序來協(xié)調(diào)分布式事務(wù)。如果事務(wù)是通過遵循 XA 的事務(wù)管理程序來進(jìn)行協(xié)調(diào)的,則任何遵循 XA 規(guī)范的資源管理程序都可以參與該事務(wù),因此就可以讓不同廠商的事務(wù)產(chǎn)品可以共同工作。所有遵循 XA 的事務(wù)都是分布式事務(wù)。XA 既支持一步提交,也支持兩階段提交。
對(duì)象管理組(Object Management Group)的通用對(duì)象請(qǐng)求代理體系結(jié)構(gòu)對(duì)象事務(wù)服務(wù)(Common Object Request Broker Architecture Object Transaction Service) -- 定義遵循規(guī)范的流程如何跨多個(gè)流程線程將事務(wù)上下文從一個(gè)流程傳播到另一個(gè)流程。這種傳播使得即使分布式對(duì)象運(yùn)行于來自不同廠商的容器中,也可以在單個(gè)事務(wù)中合作。CORBA OTS 規(guī)范建立在 XA 規(guī)范的基礎(chǔ)之上。
l OASIS的Business Transaction Protocol(BTP)標(biāo)準(zhǔn)
在 2001 年, 一個(gè)由各大公司(包括惠普公司(Hewlett-Packard,HP)、甲骨文公司(Oracle)及BEA公司)組成的聯(lián)盟開始著手創(chuàng)建 Organization for Advance Structured Information Systems (OASIS) Business Transaction Protocol(BTP)標(biāo)準(zhǔn)。
BTP 不是專門用于 Web 服務(wù)的事務(wù)處理協(xié)議,它的目的是它也能用于其他的環(huán)境中。因而,BTP 定義了事務(wù)性的 XML 協(xié)議,并且必須在規(guī)范中指定所有的服務(wù)依賴性。
BTP協(xié)議相對(duì)比較復(fù)雜,并且它把原子性事務(wù)和長(zhǎng)時(shí)間運(yùn)行的商業(yè)事務(wù)放在一起進(jìn)行管理,這樣它必須解決各種各樣不同的問題。它是通過放松限制來這樣做的,這表面上給人感覺靈活度很高,但是很多東西就留給實(shí)現(xiàn)者去實(shí)現(xiàn)了,導(dǎo)致使用比較復(fù)雜。
l OASIS的WS-Transactions
在BTP出現(xiàn)后,其他一些行業(yè)大公司,包括 IBM、Microsoft 和 BEA,又發(fā)布了它們自己的規(guī)范: Web 服務(wù)事務(wù)處理(WS-Transactions),由三部分組成WS-Coordination(事務(wù)協(xié)調(diào)器)、WS-AtomicTransaction(實(shí)現(xiàn)原子事務(wù))、WS-BusinessActivity(實(shí)現(xiàn)長(zhǎng)時(shí)間運(yùn)行的商業(yè)事務(wù))。WS-Transactions比BTP好的方面是它將事務(wù)協(xié)調(diào)器獨(dú)立出來,另外用兩個(gè)標(biāo)準(zhǔn)在WS-Transactions基礎(chǔ)上分別實(shí)現(xiàn)原子事務(wù)和長(zhǎng)時(shí)間運(yùn)行的事務(wù),這樣簡(jiǎn)化了復(fù)雜性。
WS-Transactions是專門用于web services的事務(wù)規(guī)范。
2005年,WS-Transactions發(fā)布了第一個(gè)版本,Version 1.0。
2007年,WS-Transactions發(fā)布了Version 1.1,并被OASIS組織接受為標(biāo)準(zhǔn),成為WS-*標(biāo)準(zhǔn)的一部分。
WCF支持的可互操作的分布式事務(wù)協(xié)議只有WS-Transactions,并且只實(shí)現(xiàn)了WS-Coordination、WS-AtomicTransaction,WS-BusinessActivity沒被實(shí)現(xiàn)。
1.3.1. WS-Coordination
WS-Coordination它描述了一個(gè)可擴(kuò)展的交流協(xié)議框架,該框架對(duì)分布式的請(qǐng)求進(jìn)行其請(qǐng)求協(xié)議的判斷與處理,處理后再將請(qǐng)求向下方的業(yè)務(wù)處理模塊進(jìn)行分發(fā)。
該 框架最大特點(diǎn)是其能夠以系統(tǒng)流程代理的身份來處理請(qǐng)求。當(dāng)不同的請(qǐng)求,無論是內(nèi)部的同系統(tǒng)的請(qǐng)求或外部的異構(gòu)系統(tǒng)的請(qǐng)求,經(jīng)過該框架處理后,再其原有的特 殊的傳輸代理層上添加了符合本系統(tǒng)信息流規(guī)則的本地協(xié)議。也就是本系統(tǒng)允許已經(jīng)存在的事務(wù)、工作流或其他服務(wù)的請(qǐng)求隱藏其自身獨(dú)特的傳輸協(xié)議,并可順利運(yùn) 行于異構(gòu)式的系統(tǒng)環(huán)境中。
當(dāng)前WS-Coordination穩(wěn)定的版本是1.1,同樣是OASIS于2007年發(fā)布的國(guó)際標(biāo)準(zhǔn)?,F(xiàn)在1.2版本也在起草過程之中。WS-Coordination規(guī)范的具體實(shí)現(xiàn)需要開發(fā)中在基于XML的配置文件中引入WS-Coordination規(guī)范的命名空間,如指定<xs:schema>字段的值為ws-addr.xsd。由于是基于XML文件來實(shí)現(xiàn),WS-Coordination規(guī)范易于實(shí)現(xiàn),且對(duì)日后的擴(kuò)展支持度高。
通過WS-Coordination的使用,一方面通過附加統(tǒng)一的本地協(xié)議,在使用不同通信協(xié)議的請(qǐng)求到來時(shí),進(jìn)行統(tǒng)一的協(xié)議處理,加快了請(qǐng)求的處理速度,提高了系統(tǒng)的松耦合性;另一方面WS-Coordination規(guī)范所定義的框架加強(qiáng)了系統(tǒng)的異構(gòu)性,使系統(tǒng)不因請(qǐng)求所使用的協(xié)議不同而無法處理,這提升了系統(tǒng)整體的兼容性,加強(qiáng)了系統(tǒng)的綜合服務(wù)能力。
1.3.2. WS-AtomicTransaction
WS-AtomicTransaction 定義了一組特定的協(xié)議,這組協(xié)議可以插入 WS-Coordination 模型,以實(shí)現(xiàn)傳統(tǒng)的兩階段原子事務(wù)處理協(xié)議。注意到原子的兩階段模型只是就涉及的服務(wù)而言的非常重要。提供服務(wù)的站點(diǎn)或基礎(chǔ)體系結(jié)構(gòu)可能大肆宣傳兩階段提交,但是卻使用一些其他的企業(yè)內(nèi)部模型,比如補(bǔ)償模型或版本模型。這種自由使簡(jiǎn)單的兩階段提交模型對(duì)于長(zhǎng)期運(yùn)行的 Internet 計(jì)算更有用。
WCF實(shí)現(xiàn)了WS-AtomicTransaction協(xié)議,事務(wù)管理器是由MSDTC實(shí)現(xiàn),也就是說在WCF中可以使用WS-AtomicTransaction協(xié)議進(jìn)行分布式事務(wù)的管理,并跟其他實(shí)現(xiàn)了WS-AtomicTransaction的異構(gòu)分布式事務(wù)互操作。
1.3.3. WS-BusinessActivity
WS-BusinessActivity 定義了一組特定的協(xié)議,這組協(xié)議可以插入 WS-Coordination 模型,以實(shí)現(xiàn)長(zhǎng)期運(yùn)行的、基于補(bǔ)償?shù)氖聞?wù)處理協(xié)議。
WS-BusinessActivity定義的是long-running事務(wù),所謂long-running事務(wù)是指那些企業(yè)業(yè)務(wù)流程,需要跨應(yīng)用、跨企業(yè)來完成某個(gè)事務(wù),甚至在事務(wù)流程中還需要有手工操作的參與,這類事務(wù)的完成時(shí)間可能以分計(jì),以小時(shí)計(jì),甚至可能以天計(jì),這類事務(wù)也被稱為SAGA。
這類事務(wù)如果按照事務(wù)的ACID的要求去設(shè)計(jì),勢(shì)必造成系統(tǒng)的可用性大大的降低。試想一個(gè)由兩臺(tái)服務(wù)器一起參與的事務(wù),服務(wù)器A發(fā)起事務(wù),服務(wù)器B參與事務(wù),B的事務(wù)需要人工參與,所以處理時(shí)間可能很長(zhǎng)。如果按照ACID的原則,要保持事務(wù)的隔離性、一致性,服務(wù)器A中發(fā)起的事務(wù)中使用到的事務(wù)資源將會(huì)被鎖定,不允許其他應(yīng)用訪問到事務(wù)過程中的中間結(jié)果,直到整個(gè)事務(wù)被提交或者回滾。這就造成事務(wù)A中的資源被長(zhǎng)時(shí)間鎖定,系統(tǒng)的可用性將不可接受。
WS-BusinessActivity提供了一種基于補(bǔ)償?shù)?/span>long-running的事務(wù)處理模型。還是上面的例子,服務(wù)器A的事務(wù)如果執(zhí)行順利,那么事務(wù)A就先行提交,如果事務(wù)B也執(zhí)行順利,則事務(wù)B也提交,整個(gè)事務(wù)就算完成。但是如果事務(wù)B執(zhí)行失敗,事務(wù)B本身回滾,這時(shí)事務(wù)A已經(jīng)被提交,所以需要執(zhí)行一個(gè)補(bǔ)償操作,將已經(jīng)提交的事務(wù)A執(zhí)行的操作作反操作,恢復(fù)到未執(zhí)行前事務(wù)A的狀態(tài)。這樣的SAGA事務(wù)模型,是犧牲了一定的隔離性和一致性的,但是提高了long-running事務(wù)的可用性。
目前的WCF中未實(shí)現(xiàn)WS-BusinessActivity,在WCF 4.0 beta2中也為實(shí)現(xiàn),估計(jì)在WCF 4.0正式版中也不會(huì)實(shí)現(xiàn)WS-BusinessActivity協(xié)議。
2、 事務(wù)管理器
管理事務(wù)必須有相應(yīng)的協(xié)議外,還必須有個(gè)事務(wù)管理器,事務(wù)管理器通過相應(yīng)的事務(wù)協(xié)議對(duì)本機(jī)的事務(wù)進(jìn)行管理。如果同一個(gè)事務(wù)需要跨機(jī)器,則每臺(tái)參與事務(wù)的機(jī)器的事務(wù)管理器之間進(jìn)行相互協(xié)調(diào)共同完成一個(gè)分布式事務(wù)。
2.1. LTM
輕型事務(wù)管理器Lightweight Transaction Manager,只能管理本地事務(wù),事務(wù)在一個(gè)AppDomain內(nèi)。LTM使用Lightweight protocol管理兩階段提交的事務(wù)。LTM只能管理單一的可持久化的資源,如果有兩個(gè)以上的可持久化資源登記到事務(wù)中,LTM將被升級(jí)到DTC管理器。
2.2. KTM
Vista和windows2008引入了內(nèi)核事務(wù)管理器Kernel Transaction Manager (KTM),
Windows Vista中還引入了兩個(gè)主要的事務(wù)資源,事務(wù)NTFS和事務(wù)注冊(cè)表,稱作核心資源kernel resource managers (KRM),KTM可以管理這兩類資源。
事務(wù)性 NTFS,也稱為 TxF,使用TxF可以將文件操作納入到事務(wù)管理中,在事務(wù)中的的文件操作將同事務(wù)中的其他事務(wù)資源一樣在事務(wù)前后保持一致性。
同樣事務(wù)性注冊(cè)表,也稱作TxR,注冊(cè)表的操作也可以納入到事務(wù)管理中。
KTM跟LTM一樣,使用Lightweight protocol管理兩階段提交的事務(wù),只能管理本地事務(wù),事務(wù)在一個(gè)AppDomain內(nèi),只能管理單一的可持久化的資源。
2.3. DTC
DTC可以管理任何跨越執(zhí)行邊界的事務(wù),跨AppDomain,跨進(jìn)程,跨機(jī)器,跨服務(wù)。DTC可以使用OleTx 或者WSAT事務(wù)協(xié)議。
DTC既可以管理本地事務(wù),更重要的是它能夠管理跨邊界的服務(wù)。
在使用WCF的場(chǎng)景下,每臺(tái)運(yùn)行WCF服務(wù)的機(jī)器都默認(rèn)使用DTC。DTC建立一個(gè)新事務(wù),并跨機(jī)器把事務(wù)傳播到其他機(jī)器,發(fā)起事務(wù)的機(jī)器上的事務(wù)為根事務(wù),這個(gè)機(jī)器上的DTC就要負(fù)責(zé)這個(gè)分布式事務(wù)的協(xié)調(diào)任務(wù),負(fù)責(zé)啟動(dòng)事務(wù),提交事務(wù),和回滾事務(wù)。
事務(wù)管理器可使用的事務(wù)協(xié)議:
Protocal |
LTM |
KTM |
DTC |
Lightweight protocol |
Yes |
Yes |
No |
OleTx protocol |
No |
No |
Yes |
WS-Atomic Transaction |
No |
No |
Yes |
3、 事務(wù)資源
在事務(wù)范圍內(nèi),可納入事務(wù)管理的資源,即可以在事務(wù)正常執(zhí)行后提交生效,在事務(wù)失敗可以回滾恢復(fù)到事務(wù)啟動(dòng)前狀態(tài)的資源成為事務(wù)資源。最常見的事務(wù)資源就是常用的數(shù)據(jù)庫操作。但是在vista開始引入了兩個(gè)核心事務(wù)資源:TxF事務(wù)文件和TxR事務(wù)注冊(cè)表。
可用的事務(wù)資源:
3.1. 新sql server事務(wù)資源
Sql 2005或sql 2008的事務(wù)資源是新sql server,LTM事務(wù)管理器可以管理這類事務(wù)。
3.2. 核心事務(wù)資源
Vista開始引入的TxF事務(wù)文件和TxR事務(wù)注冊(cè)表??梢詫?duì)文件和注冊(cè)表進(jìn)行事務(wù)性操作。KTM可以管理這類資源。
3.3. 傳統(tǒng)事務(wù)資源
SQL Server 2000, Oracle, DB2, 和MSMQ這類資源是傳統(tǒng)的事務(wù)資源,這些資源只能由DTC事務(wù)管理器進(jìn)行管理。
事務(wù)管理器可管理的事務(wù)資源:
Resource |
LTM |
KTM |
DTC |
新Sql Server事務(wù)資源 |
Yes |
No |
Yes |
核心事務(wù)資源 |
No |
Yes |
Yes |
傳統(tǒng)事務(wù)資源 |
No |
No |
Yes |
4、 事務(wù)管理器的升級(jí)
每個(gè)WCF中啟動(dòng)的事務(wù)都是先由LTM事務(wù)管理器管理,一旦事務(wù)中出現(xiàn)現(xiàn)有事務(wù)管理器無法管理的資源或情況,WCF會(huì)提升事務(wù)管理器的級(jí)別。分別從LTM升級(jí)到KTM,最高級(jí)別升級(jí)到DTC。事務(wù)管理器可以多次升級(jí),事務(wù)管理器一旦升級(jí)后不能降級(jí)。
事務(wù)管理器的升級(jí)規(guī)則:
posted @ 2012-03-30 00:20 paulwong 閱讀(1562) | 評(píng)論 (0) | 編輯 收藏