天天看點

SpringCloud Alibaba Seata(三)Seata再看TC/TM/RM三大元件分布式事務的執行流程AT模式

Seata 一部分補充

  • Seata
  • 再看TC/TM/RM三大元件
  • 分布式事務的執行流程
  • AT模式
    • 前提
    • 整體機制
      • 一階段加載
      • 二階段送出
      • 二階段復原
      • 總結

Seata

2019年1月份,螞蟻金服和阿裡巴巴共同開源的分布式事務解決方案

Seata:Simple Extensible Autonomous Transaction Architecture,簡單可擴充自治事務架構

2020起始,參加工作以後用1.0以後的版本。

再看TC/TM/RM三大元件

SpringCloud Alibaba Seata(三)Seata再看TC/TM/RM三大元件分布式事務的執行流程AT模式

什麼是TC,TM,RM

TC:seata伺服器

TM:帶有@GlobalTransaction注解的方法

RM:資料庫,也就是事務參與方

SpringCloud Alibaba Seata(三)Seata再看TC/TM/RM三大元件分布式事務的執行流程AT模式

分布式事務的執行流程

  • TM開啟分布式事務(TM向TC注冊全局事務記錄),相當于注解

    @GlobelTransaction

    注解
  • 按業務場景,編排資料庫,服務等事務内部資源(RM向TC彙報資源準備狀态)
  • TM結束分布式事務,事務一階段結束(TM通知TC送出、復原分布式事務)
  • TC彙總事務資訊,決定分布式事務是送出還是復原
  • TC通知所有RM送出、復原資源,事務二階段結束

AT模式

前提

  • 基于支援本地ACID事務的關系型資料庫
  • Java應用,通過JDBC通路資料庫

整體機制

兩階段送出協定的演變

一階段:業務資料和復原日志記錄在同一個本地事務中送出,釋放本地鎖和連接配接資源

二階段

  • 送出異步化,非常快速的完成
  • 復原通過一階段的復原日志進行反向補償

一階段加載

在一階段,Seata會攔截 業務SQL

解析SQL語義,找到業務SQL,要更新的業務資料,在業務資料被更新前,将其儲存成

before image(前置鏡像)

執行業務SQL更新業務資料,在業務資料更新之後

将其儲存成 after image,最後生成行鎖

以上操作全部在一個資料庫事務内完成,這樣保證了一階段操作的原子性

SpringCloud Alibaba Seata(三)Seata再看TC/TM/RM三大元件分布式事務的執行流程AT模式

二階段送出

二階段如果順利送出的話,因為業務SQL在一階段已經送出至資料庫,是以Seata架構隻需将一階段儲存的快照和行鎖删除掉,完成資料清理即可

SpringCloud Alibaba Seata(三)Seata再看TC/TM/RM三大元件分布式事務的執行流程AT模式

二階段復原

二階段如果復原的話,Seata就需要復原到一階段已經執行的 業務SQL,還原業務資料

復原方式便是用 before image 還原業務資料,但是在還原前要首先校驗髒寫,對比資料庫目前業務資料 和after image,如果兩份資料完全一緻,沒有髒寫,可以還原業務資料,如果不一緻說明有髒讀,出現髒讀就需要轉人工處理

SpringCloud Alibaba Seata(三)Seata再看TC/TM/RM三大元件分布式事務的執行流程AT模式

總結

SpringCloud Alibaba Seata(三)Seata再看TC/TM/RM三大元件分布式事務的執行流程AT模式