概述
2PC方案是在傳統資料庫層面實作的,如Oracle和MySQL都支援2PC協定,為了統一标準減少在行業内不必要的對接成本,需要制定标準化的處理模型以及接口标準,國際開放标準組織Open Group定義了分布式事務處理模型DTP(Distributed Transaction Processing Reference Model)。
2PC協定可以參考我的另一篇文章:分布式事務解決方案——2PC(兩階段送出)概念
舉栗
用新使用者注冊送積分為例來解釋一下XA方案
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL41keNFTQE9UMJpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLyQzN4EzNxMjM5ATMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- 應用程式(AP)連接配接使用者庫和積分庫兩個資料源
- 應用程式通過TM(事務管理器)通知使用者庫和積分庫執行準備階段的事務:通知RM新增使用者,之後通知積分庫RM為該使用者新增積分,兩個RM此時都沒有送出事務,此時使用者和積分的資料資源被鎖定
- TM收到執行結果回複隻要有一方失敗則分别向其他所有的RM發起復原事務,復原完畢,資料庫資源鎖釋放
- TM收到執行結果回複全部成功,此時向所有RM發起送出事務的指令,送出完畢,資料庫資源鎖釋放
DTP模型角色定義如下:
- AP(application program):即應用程式,可以了解為使用DTP分布式事務的程式
- RM(Resource Manager):即資料總管,可以了解為事務的參與者,一般情況下是指一個資料庫執行個體,通過資料總管對該資料庫進行空值,資料總管控制着各個分支事務
- TM(Transaction Manager):事務管理器,負責協調和管理事務,事務管理器控制着全局事務,管理事務生命周期,并協調各個RM。全局事務是指分布式事務處理環境中,需要操作多個資料庫共同完成一個工作,這個工作即是全局事務。
DTP模式定義TM和RM直接通訊的接口規範叫XA,簡單了解為資料庫提供的2PC接口協定,基于資料的XA協定來實作2PC協定又稱為XA方案
以上三種角色之間的互動方式如下:
- TM向AP提供應用程的程式設計接口,AP通過TM送出以及事務復原
- TM中間件通過XA協定接口來通知RM資料庫事務的開始、結束以及送出和復原等
總結
整個2PC的事務流程涉及到三個角色AP、RM、TM。AP是使用2PC分布式事務的應用程式,TM是事務管理器,管理協調整個全局事務,RM是資料總管,負責控制自身的分支事務。
- 在準備階段RM執行實際的業務操作,但不是送出事務,資源鎖定
- 在送出階段TM會接受RM在準備階段的執行回複,隻要有任何一個RM執行失敗,TM會通知所有的RM執行復原操作,沒有一個RM操作失敗,TM将通知所有RM送出自身事務。送出所有事務之後資料庫資源釋放
XA方案的問題:
- 需要本地資料庫支援XA協定
- 資源鎖需要等到兩個階段都完成之後才能釋放,性能受影響。