談談分布式事務(Distributed Transaction)[共5篇]
[第1篇] SOA需要怎樣的事務控製方式
在一個基於SOA架構的分布式係統體係中,服務(Service)成為了基本的功能提供單元,無論與業務流程無關的基礎功能,還是具體的業務邏輯,均實現在相應的服務之中。服務對外提供統一的接口,服務之間采用標準的通信方式進行交互,各個單一的服務精又有效的組合、編排成為一個有機的整體。在這樣一個分布式係統中某個活動(Activity)的實現往往需要跨越單個服務的邊界,如何協調多個服務之間的關係使之為活動功能的實現服務,涉及到SOA一個重要的課題:服務協作(Service Coordination)。而具體來講,一個分布式的活動可能會執行幾秒鍾,比如銀行轉帳;也可能執行幾分鍾、幾個小時、幾天甚至更長,比如移民局處理移民的申請。事務,無疑是屬於短暫運行服務協作(Short-Running Service Coordination)的範疇。
[第2篇] 基於DTC的分布式事務管理模型之事務控製角色
通過上一篇的介紹,我們知道了SOA真正需要的是一個能夠協調服務操作直接(通過服務自身訪問的資源)或者間接(通過被調用服務訪問的資源)訪問的所有資源的分布式事務管理係統,這是一個複雜的架構體係。WCF,作為Windows平台下基於SOA的分布式框架,對分布式事務提供全麵的支持。不過,WCF並不是另起爐灶,而是充分地利用了Windows現有的事務控製基礎架構。本節著重討論Windows事務處理模型,首先來看看在這個模型中各個事務參與者各自扮演怎樣的角色。
[第3篇]基於DTC的分布式事務管理模型之事務登記於基於2PC的事務提交
當基於LTM或者KTM的事務提升到基於DTC的分布式事務後,DTC成為了本機所有事務型資源管理器的管理者;此外,當一個事務型操作超出了本機的範圍,出現了跨機器的調用後,本機的DTC需要於被調用者所在機器的DTC進行協助。上級對下級(包括本機DTC對本機所有資源管理器,以及上下級 DTC)的管理得前提是下級在上級那裏登記,即事務登記(Transaction Enlist)。所有事務參與者,包括所有資源管理器和事務管理器(即DTC)在進行了事務等級完成之後形成了一個樹形的層級結構,該結構的形成是後續的事務提供成為可能,因此我們將其稱之為事務提交樹(Transaction Commit Tree)。
不同於基於單一資源管理器的本地事務,在一個分布式環境中時實現一個涉及到多個資源管理器的分布式事務,實現事務的ACID四大屬性,要麻煩得多。當事務初始化服務(應用或者組件,為了更佳貼近WCF,我們都稱服務)完成所有相關的操作,決定提交該事務。對於分布式事務的提交,最終的結果有兩個:如果所有的操作能夠順利完成,需要持久化的數據被相應的資源管理器寫入到目標資源;如果任何一個環節失敗,所有持久化資源管理器將數據恢複到原來的狀態。分布式事務的整個提交過程,采用兩階段提交(2PC:Two-Phase)Commit協議完成。顧名思義,“兩階段提交”意味整個整個事務提交階段分兩個階段,我們現在就來詳細介紹分別在這兩個階段中,都在做些什麼。
[第4篇]System.Transactions事務之事務(Transaction)和可提交事務(CommittableTransaction)
在.NET 1.x中,我們基本是通過ADO.NET實現對不同數據庫訪問的事務。.NET 2.0為了帶來了全新的事務編程模式,由於所有事務組件或者類型均定義在System.Transactions程序集中的System.Transactions命名空間下,我們直接稱基於此的事務為System.Transactions事務。System.Transactions事務編程模型使我們可以顯式(通過System.Transactions.Transaction)或者隱式(基於System.Transactions.TransactionScope)的方式進行事務編程。
在System.Transactions事務體係下,事務本身通過類型System.Transactions.Transaction類型表示。隻有可提交事務才能被直接初始化,對可提交事務的提交驅動著對整個分布式事務的提交。可提交事務通過CommittableTransaction類型表示。
[第5篇]System.Transactions事務之依賴事務(DependentTransaction)和事務範圍(TransactionScope)
Transaction的定義中,信息的讀者應該看到了一個叫做DepedentClone的方法。該方法對用於創建基於現有Transaction對象的“依賴事務(DependentTransaction)”。不像可提交事務是一個獨立的事務對象,依賴事務依附於現有的某個事務(可能是可提交事務,也可能是依賴事務)。依賴事務可以幫助我們很容易地編寫一些事務型操作,當環境事務不存的時候,可以確保操作在一個獨立的事務中執行;當環境事務存在的時候,則自動加入其中。
TransactionScope確實能夠使我們的事務控製變得非常的簡單。實際上,在利用System.Transactions事務進行編程的時候,我們一般不會使用到可提交事務,對於依賴事務也隻有在異步調用的時候會使用到,基於TransactionScope的事務編程方式才是我們推薦的。 正如其名稱所表現的一樣,TransactionScope就是為一組事務型操作創建一個執行範圍,而這個範圍始於TransactionScope創建之時,結束於TransactionScope被回收(調用Dispose方法)。
微信公眾賬號:大內老A
微博:www.weibo.com/artech
如果你想及時得到個人撰寫文章以及著作的消息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識別二維碼)關注個人公眾號(原來公眾帳號蔣金楠的自媒體將會停用)。
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁麵明顯位置給出原文連接,否則保留追究法律責任的權利。
最後更新:2017-10-27 16:05:02