SpringCloudAlibaba--Seata原理簡介

Seata

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

Simple Extensible Autonomous Transaction Architecture,簡單可擴展自治事務框架。

TC/TM/RM三大組件:

在這裏插入圖片描述

執行流程:

  • TM開啓分佈式事務(TM向TC註冊全局事務記錄)
  • 按業務場景,編排數據庫、服務等事務中資源(RM向TC彙報資源準備狀態)
  • TM結束分佈式事務,事務一階段結束(TM通知TC提交/回滾分佈式事務)
  • TC彙總事務信息,決定分佈式事務是提交還是回滾
  • TC通知所有RM提交/回滾資源,事務二階段結束

默認使用AT模式:

整體機制

兩階段提交協議的演變:

  • 一階段:業務數據和回滾日誌記錄在同一個本地事務中提交,釋放本地鎖和連接資源。

  • 二階段:

    • 提交異步化,非常快速地完成。
    • 回滾通過一階段的回滾日誌進行反向補償

一階段加載:

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

  1. 解析SQL語義,找到『業務SQL』要更新的業務數據,在業務數據被更新前,將其保存成"before image"
  2. 執行『業務SQL』更新業務數據,在業務數據更新之後
  3. 其保存成"after image",最後生成行鎖

以上操作全部在一個數據庫事務內完成,這樣保證了一階段操作的原子性。

在這裏插入圖片描述
二階段提交:

二階段如是順利提交的話,因爲『業務SQL』在一階段已經提交到數據庫,所以Seata框架只需將一階段快照數據和行鎖刪掉,完成數據清理即可。
在這裏插入圖片描述

二階段回滾:

二階段如果是回滾的話,Seata就需要回滾一階段已經執行的『業務SQL』,還原數據。

回滾的方式便是用"before image"還原業務數據;但在還原前首先要校驗髒寫,對比"數據庫當前業務數據"和"after image",如果兩份數據完全一致就說明沒有髒寫,可以還原業務數據,如果不一致就說明有髒寫,出現髒寫就需要轉人工處理。
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章