天天看點

事務概念簡述

1、事務的定義

所謂事務,它是一個操作集合,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作機關。典型的例子就像從網上銀行系統的帳戶A轉帳到帳戶B,它經過兩個階段:1. 從帳戶A取出款項。2. 把款項放入帳戶B中。這兩個過程要麼同時成功,要麼同時失敗,這一系列的操作就被稱為事務性(Transactional)操作。

  在一個事務性操作的環境下,操作有着以下的4種特性,被稱為ACID特性

原子性(Atomicity) 當事務結束,它對所有資源狀态的改變都被視為一個操作,這些操作要不同時成功,要不同時失敗。
一緻性(Consistency) 操作完成後,所有資料必須符合業務規則,否則事務必須中止。
隔離性(Isolation) 事務以互相隔離的方式執行,事務以外的實體無法知道事務過程中的中間狀态。
持久性(Durable) 事務送出後,資料必須以一種持久性方式存儲起來。

2、事務管理器

在軟體系統當中可以看到無論在資料庫、Web服務、WCF、檔案系統都存在着資料參與到事務運作當中,我們把管理這些資料的工具稱為資料總管RM(Resources Manager)。而事務管理器TM(Transaction Manager)就是協調多個資料總管的工作,保證資料完整性的工具。

事務概念簡述

由上圖可以看到事務的管理流程,系統通知事務管理器TM來啟動事務,事務管理器TM控制向多個資料總管RM并協調RM之間的事務操作。圖中存在兩個持久化RM,分别管理資料庫和檔案系統,這些事務操作要不同時成功,要不同時失敗。

3、事務的分類

事務管理器一般分為三類:輕量級事務管理器(LTM)、核心事務管理器(KTM)、分布式事務協調器(DTC)

1. 輕量級事務管理器 (LTM)

它是包括在 System.Transactions 命名空間内的一個事務管理架構,它隻能管理單個應用程式域内的事務。LTM 可以管理多個易變的RM,但隻能管理一個持久化RM。若事務試圖加入第二個持久化RM,那輕量級事務管理器LTM将提更新别。LTM是性能最高的事務管理器,在可選擇的情況下應該盡可能地使用 LTM 事務管理器。

  這裡易變RM是指它參與會引發 “未确定狀态” 的2PC事務的時候,不需要恢複服務,更多時候,易變RM的資料隻存儲在記憶體當中。

  而持久化RM是指它參與會引發 “未确定狀态” 的2PC事務的時候,它需要恢複服務,持久化RM管理的資料是在于硬碟當中。是以,參與2PC事務的的持久RM必須有新舊兩個版本,如果事務引發 “未确定狀态” 的時候,那麼它就會聯系持久化RM,恢複到其中一個版本。

2. 核心事務管理器 (KTM)

KTM是用于Windows Vista和Windows Server 2008 系統中的輕量級事務管理器,與LTM相像,它可以管理多個易變的RM,但隻能管理一個持久化RM。

3. 分布式事務協調器(DTC)

分布式事務協調器DTC(Distributed Transaction Coordinator)能管理多個持久化RM中的事務,事務可以跨越應用程式域、程序、硬體、域等所有的邊界。在Windows Server 2008當中,DTC支援OleDB、XA、WS-AtomicTransaction、WSCoordination、WS-BusinessActivity等多個協定。由于分布式事務需要在多個參與方之間實作多次通訊,是以是一種巨大的開銷,是以,在可以使用LTM和KTM的時候,應該盡量避免使用DTC。在上面圖檔中的事務同時啟動了兩個RM分别處理資料庫資料與檔案資料,當中啟動的就是DTC分布式事務。

4. 事務類 System.Transactioins.Transaction

Transaction是由Framework 2.0 就開始引入,用于顯示管理事務的一個類。通過Transaction可以直接管理事務的中止、釋放,也可以擷取、克隆目前的環境事務類。

  • Transaction的公用屬性

  其中Transaction.Current 比較常用,它可以指向一個目前運作環境中的事務,如果環境事務不存在,系統将傳回一個null

  Transaction transaction=Transaction.Current;

屬性 說明
Current 擷取或設定環境事務。
IsolationLevel 擷取事務的隔離級别。
TransactionInformation 檢索有關某個事務的附加資訊。
  • Transaction的常用公用方法

  其中Rollback、Dispose方法可以控制事務中止、釋放,而Clone、DependentClone方法在多線程操作中經常用到,在​​ “異步事務”​​ 一節中将詳細說明

方法 說明
Rollback 中止事務、復原。
Dispose 釋放事務對象。
Clone 建立事務克隆
DependentClone 建立事務的依賴克隆。
  • Transaction的事件

  在事務完成後,會觸發TransactionCompleted事件,開發人員可以在此事件的過程監測其狀态

事件 說明
TransactionCompleted 在事務完成後執行

5. 事務狀态 TransactionInformation

  上面講解過事務分為本地事務與分布式事務,而Transaction類的TransactionInformation是事務狀态的記錄,它可以跟蹤事務動作,分辨事務現處的狀态,記錄本地事務與分布式事務的Guid。