分佈式事務模型介紹

  • 分佈式事務模型

    • XA 模型,eXtended Architecture: 強一致模型 , 原理

      • XA的含義是用來描述特定的分佈式系統框架,該體系結構使用諸如兩階段提交的機制來支持 已確認的分佈式事務。應該指的就是 X/Open DTP模型 : X/Open就是現在的 Open Group組織

      • DTP 模型主要使用了兩段提交(2PC - Two-Phase-Commit)來保證分佈式事務的完整性。

      • XA模型,有4個角色:TM、RM 、AP、CRM( 通信資源管理器 )

        • AP: Application,應用程序。也就是業務層。哪些操作屬於一個事務,就是AP定義的。
        • TM: Transaction Manager,事務管理器。接收AP的事務請求,對全局事務進行管理,管理事務分支狀態,協調RM的處理,通知RM哪些操作屬於哪些全局事務以及事務分支等等。這個也是整個事務調度模型的核心部分。
        • RM:Resource Manager,資源管理器。一般是數據庫,也可以是其他的資源管理器,如消息隊列(如JMS數據源),文件系統等。

      • 有的說XA模型有3個角色](https://www.cnblogs.com/aigongsi/archive/2012/10/11/2718313.html)

    • 二階提交模型(2PC,Two Phase Commitment Protocol) :raincat , LCN

      • 兩個階段是指:第一階段:**準備階段(投票階段)**和第二階段:提交階段(執行階段)

        • 事務協調者(事務管理器)給每個參與者(資源管理器)發送Prepare消息,每個參與者要麼直接返回失敗(如權限驗證失敗),要麼在本地執行事務,寫本地的redo和undo日誌,但不提交
        • 如果協調者收到了參與者的失敗消息或者超時,直接給每個參與者發送回滾(Rollback)消息;否則,發送提交(Commit)消息;參與者根據協調者的指令執行提交或者回滾操作,釋放所有事務處理過程中使用的鎖資源

      • 二階段提交還是有幾個缺點的:

        • 同步阻塞問題。執行過程中,所有參與節點都是事務阻塞型的
        • 單點故障。由於協調者的重要性,一旦協調者發生故障。參與者會一直阻塞下去。尤其在第二階段,協調者發生故障,那麼所有的參與者還都處於鎖定事務資源的狀態中,而無法繼續完成事務操作
        • 數據不一致。在二階段提交的階段二中,當協調者向參與者發送commit請求之後,發生了局部網絡異常或者在發送commit請求過程中協調者發生了故障,這會導致只有一部分參與者接受到了commit請求。
    • 三階提交模型(3PC , Three Phase Commitment Protocol)

      • 三階段提交就有CanCommitPreCommitDoCommit三個階段
        • CanCommit階段其實和2PC的準備階段很像。協調者向參與者發送commit請求,參與者如果可以提交就返回Yes響應,否則返回No響應。
        • 假如協調者從所有的參與者獲得的反饋都是Yes響應,那麼就會執行事務的預執行。假如有任何一個參與者向協調者發送了No響應,或者等待超時之後,協調者都沒有接到參與者的響應,那麼就執行事務的中斷
      • 3PC主要解決的單點故障問題,並減少阻塞。因爲一旦參與者無法及時收到來自協調者的信息之後,他會默認執行commit。而不會一直持有事務資源並處於阻塞狀態。
    • TCC 模型:try、confirm/cancel

      • TCC事務解決方案本質上是一種補償的思路,它把事務運行過程分成 try、confirm/cancel 兩個階段,每個階段都由業務代碼來控制。

      • TCC不再是兩階段提交,而只是它對事務的提交/回滾是通過執行一段confirm/cancel業務邏輯來實現,並且也並沒有全局事務來把控整個事務邏輯。

      • 實現過程:

        1. try:完成所有業務檢查(一致性),預留業務資源。
        2. confirm:確認執行業務操作,只使用try階段預留的業務資源。
        3. cancel:取消try階段預留的業務資源。
      • 與 XA 模型對比

        • XA是資源層面的分佈式事務,強一致性,在兩階段提交的整個過程中,一直會持有資源的鎖。
        • TCC是業務層面的分佈式事務,最終一致性,不會一直持有資源的鎖。

        兩階段提交流程

    • Saga 模型(長篇小說):Seata

      • Saga 模型描述的是另外一種在沒有兩階段提交的的情況下解決分佈式系統中複雜的業務事務問題
      • 核心思想就是拆分分佈式系統中的長事務爲多個短事務,或者叫多個本地事務。然後由 Sagas 工作流引擎負責協調,如果整個流程正常結束,那麼就算是業務成功完成;如果在這過程中實現失敗,那麼Sagas工作流引擎就會以相反的順序調用補償操作,重新進行業務回滾。
      • 比如我們一次關於購買旅遊套餐業務操作涉及到三個操作,他們分別是預定車輛,預定賓館,預定機票,他們分別屬於三個不同的遠程接口。可能從我們程序的角度來說他們不屬於一個事務,但是從業務角度來說是屬於同一個事務的。
    • MQ 模型 :即用消息隊列實現,保證最終數據一致

      • 消息一致性方案是通過消息中間件保證上下游應用數據操作的一致性。基本思路是將本地操作和發送消息放在一個事務中,下游應用向消息系統訂閱該消息,收到消息後執行相應操作。本質上是依靠消息的重試機制,達到最終一致性。
      • 缺點是:耦合度高,需要在業務系統中引入MQ,導致系統複雜度增加。
    • BED 模型(柔性事務)

      • 柔性事務是對XA協議的妥協和補償,它通過對強一致性要求的降低,已達到降低數據庫資源鎖定時間的效果。柔性事務的種類很多,可以通過各種不同的策略來權衡使用。
      • 優點是無鎖定資源時間,性能損耗小。缺點是嘗試多次提交失敗後,無法回滾,它僅適用於事務最終一定能夠成功的業務場景。因此BED是通過事務回滾功能上的妥協,來換取性能的提升。
    • Paxos算法圖解Paxos

      • 世上只有一種一致性算法,那就是Paxos,所有其他一致性算法都是Paxos算法的不完整版。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章