一、分佈式事務
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的工作架構(流程)如圖所示:
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模式的執行流程
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模式的執行流程
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的區別
- XA模式一階段不提交事務,鎖定資源;AT模式一階段直接提交,不鎖定資源。
- XA模式依賴數據庫機制實現回滾;AT模式利用數據快照實現數據回滾。
- XA模式強一致;AT模式最終一致
簡單來説,AT模式使用起來更加簡單,無業務侵入,性能更好。因此企業90%的分佈式事務都可以用AT模式來解決。