动态

详情 返回 返回

分佈式事務與Seata - 动态 详情

一、分佈式事務

1.事務的概念

· 概念:事務是一個完整的、不可分割操作單元,整個事務要麼全部執行成功,要麼全部執行失敗。
· 事務具備4個特性:ACID
A:原子性-->完整的、不可分割操作單元
C:一致性-->數據的一致性:事務開始前和事務結束後,數據總量不變
I:隔離性-->事務相互隔離,互不影響
D:持久性-->事務一旦提交,永久落盤

2.傳統事務

傳統事務由 數據庫連接 來控制:只有是同一個Connection操作的數據庫才能夠控制住

JDBC:Connection對象
Mybatis:SqlSession
Spring:聲明式事務

3.分佈式事務

· 概念:在分佈式系統中(即分佈式環境下)的事務,稱為分佈式事務。
用人話來説:一個業務跨多個服務或數據源來實現,就是分佈式事務。

· 存在的問題:

每個單獨的服務都能在本地遵循ACID,但是它們互相之間沒有感知,不知道有人失敗了,無法保證最終結果的統一,也就無法遵循ACID的事務特性了。

這就是分佈式事務問題,出現以下情況之一就可能產生分佈式事務問題:
1) 業務跨多個服務實現
2) 業務跨多個數據源實現
如圖所示:在一個下單業務中,需要交易服務、購物車服務、庫存服務共同聯合才能實現,三個服務又分別對應各自的數據庫,各個服務的運行互不干涉影響。
如果某次下單的業務中,庫存服務運行失敗,庫存的數據庫不會更改,但交易的數據庫和購物車的數據庫已經更改,此時就導致數據出現不一致的問題。
分佈式事務圖例説明

· 解決:解決分佈式事務的方案有很多,一般會使用開源的框架來解決分佈式事務問題。
在眾多的開源分佈式事務框架中,功能最完善、使用最多的是阿里巴巴的Seata

二、Seata解決分佈式事務的方案

在Seata的事務管理中有三個重要的角色:

  • TC (Transaction Coordinator) - 事務協調者:維護全局和分支事務的狀態,協調全局事務提交或回滾。【TC相當於 監控器】
    (TC是一個獨立的微服務,需要單獨部署。)
  • TM (Transaction Manager) - 事務管理器:定義全局事務的範圍、開始全局事務、提交或回滾全局事務。【TM相當於 控制枱】
  • RM (Resource Manager) - 資源管理器:管理分支事務,與TC交談以註冊分支事務和報告分支事務的狀態,並驅動分支事務提交或回滾。【RM就是 各個微服務】
    Seata的工作架構(流程)如圖所示:
    Seata的工作架構圖
    1)由TM確定"小兵數量":RM的範圍,並向TC發起開啓全局事務。
    2)各個"小兵"RM到TC中“報到”(註冊),並將事務的執行結果告知TC。
    3)TC監控各個"小兵"RM的任務執行效果,反饋給TM,最後由TM決定全局事務該提交還是回滾。

Seata支持四種不同的分佈式事務解決方案:

  • XA
    ·事務的強一致性,滿足ACID原則
    ·常用數據庫都支持,實現簡單,並且沒有代碼侵入
    ·為一階段需要鎖定數據庫資源,等待二階段結束才釋放,性能較差
    ·依賴關係型數據庫實現事務
  • TCC
  • AT
  • SAGA
    A是規範,目前主流數據庫都實現了這種規範,實現的原理都是基於兩階段提交。
    一階段:
    ·事務協調者通知每個事務參與者執行本地事務。
    ·本地事務執行完成後報告事務執行狀態給事務協調者,此時事務不提交,繼續持有數據庫鎖。
    二階段:
    ·事務協調者基於一階段的報告來判斷下一步操作。
    ·如果一階段都成功,則通知所有事務參與者,提交事務。
    ·如果一階段任意一個參與者失敗,則通知所有事務參與者回滾事務。

1.XA

1.1 XA模式的執行流程

XA模式流程圖
1)由TM向TC發起開啓全局事務;
2)TM調用分支RM;
3)RM到TM處報道註冊;
4)RM執行sql(不提交);
5)RM將執行sql的結果告知TC;
6)TC監測全部RM的任務執行效果,反饋給TM;
7)TM決定全局事務該提交還是回滾,將命令交給TC;
8)TC向RM轉達TC的命令,讓RM執行提交或回滾事務。

1.2 XA模式的特點

· 優點

  • 事務的強一致性,滿足ACID原則
  • 常用數據庫都支持,實現簡單,並且沒有代碼侵入
    · 缺點
  • 因為一階段需要鎖定數據庫資源,等待二階段結束才釋放,性能較差
  • 依賴關係型數據庫實現事務

2.AT

2.1 AT模式的執行流程

AT模式的執行流程
1)由TM向TC發起開啓全局事務;
2)TM調用分支RM;
3)RM到TM處報道註冊;
4)RM執行並提交sql,並記錄更新前後快照到undolog中
5)RM將執行sql的結果告知TC;
6)TM決定全局事務該提交還是回滾,將命令交給TC;
7)TC監測全部RM的任務執行效果,反饋給TM;
8)TC向RM轉達TC的命令,讓RM執行提交或回滾事務。
9)RM刪除undolog中的數據或回滾恢復undolog中的數據

2.2 AT模式與XA的區別

  1. XA模式一階段不提交事務,鎖定資源;AT模式一階段直接提交,不鎖定資源。
  2. XA模式依賴數據庫機制實現回滾;AT模式利用數據快照實現數據回滾。
  3. XA模式強一致;AT模式最終一致
    簡單來説,AT模式使用起來更加簡單,無業務侵入,性能更好。因此企業90%的分佈式事務都可以用AT模式來解決。

Add a new 评论

Some HTML is okay.