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