分布式事務框架-seata初識


摘自:https://www.cnblogs.com/iceggboom/p/12144570.html

分布式事務框架-seata初識

一、事務與分布式事務

事務,在數據庫中指的是操作數據庫的最小單位,往大了看,事務是應用程序中一系列嚴密的操作,所有操作必須成功完成,否則在每個操作中所作的所有更改都會被撤消。

那為什么會有分布式事務呢?單機事務是通過將操作限制在一個會話內通過數據庫本身的鎖以及日志來實現ACID.因為引入了分布式架構,所以事務的參與者、支持事務的服務器、資源服務器以及事務管理器分別位於不同的分布式系統的不同節點之上.簡單說就是多各數據庫之間無法保證保證各自的操作同時成功或同時失敗。

二、介紹

Seata:Simple Extensible Autonomous Transaction Architecture,簡易可擴展的自治式分布式事務管理框架,其前身是fescar。阿里巴巴GTS的開源版實現,是一種分布式事務的解決方案。

三、架構

  • Coordinator Core:最下面的模塊是事務協調器核心代碼,主要用來處理事務協調的邏輯,如是否 Commit、Rollback 等協調活動。
  • Store:存儲模塊,用來將我們的數據持久化,防止重啟或者宕機數據丟失。
  • Discover:服務注冊/發現模塊,用於將 Server 地址暴露給 Client。
  • Config:用來存儲和查找服務端的配置。
  • Lock:鎖模塊,用於給 Seata 提供全局鎖的功能。
  • Rpc:用於和其他端通信。
  • HA-Cluster:高可用集群,目前還沒開源。為 Seata 提供可靠的高可用功能。

 

四、工作流程

1)參與角色

Transaction Coordinator(TC):管理全局的分支事務的狀態,用於全局性事務的提交和回滾。
Transaction Manager(TM):事務管理器,用於開啟全局事務、提交或者回滾全局事務,是全局事務的開啟者。
Resource Manager(RM):資源管理器,用於分支事務上的資源管理,向TC注冊分支事務,上報分支事務的狀態,接受TC的命令來提交或者回滾分支事務。

2)流程

  1. TM向TC請求發起一個全局事務,TC返回一個代表這個全局事務的XID。
  2. XID在rpc中傳播給每一個調用鏈中的服務。
  3. 每個RM拿到XID后向TC發起一個分支事務,TC返回一個代表這個分支事務的XID。
  4. RM完成本地分支的業務,提交本地分支,並且報告給TC。
  5. 全局事務調用鏈處理完畢,TM根據有無異常向TC發起全局事務的提交或者回滾。
  6. 假設某個RM本地事務失敗。該RM自身驅動本地事務回滾,並且報告給TC。
  7. TM檢測到了某個分支事務失敗,向TC發起全局事務回滾。
  8. TC給每一個RM發送消息,通知它們全部回滾。
  9. TC將全局事務回滾的結果發送給TM,全局事務結束。

五、設計思想(重點)

  Seata 的設計思路是將一個分布式事務可以理解成一個全局事務,下面掛了若干個分支事務,而一個分支事務是一個滿足 ACID 的本地事務,因此我們可以操作分布式事務像操作本地事務一樣。Seata 的事務提交方式跟 XA 協議的兩段式提交在總體上來說基本是一致的,但XA 協議它依賴的是數據庫層面來保障事務的一致性,也即是說 XA 的各個分支事務是在數據庫層面上驅動的,由於 XA 的各個分支事務需要有 XA 的驅動程序,一方面會導致數據庫與 XA 驅動耦合,另一方面它會導致各個分支的事務資源鎖定周期長,所以性能較差。

  Seata 在數據源做了一層代理層,所以我們使用 Seata 時,我們使用的數據源實際上用的是 Seata 自帶的數據源代理 DataSourceProxy,Seata 在這層代理中加入了很多邏輯,主要是解析 SQL,把業務數據在更新前后的數據鏡像組織成回滾日志,並將 undo log 日志插入 undo_log 表中,保證每條更新數據的業務 sql 都有對應的回滾日志存在。這樣做的好處就是,本地事務執行完可以立即釋放本地事務鎖定的資源,然后向 TC 上報分支狀態。當 TM 決議全局提交時,就不需要同步協調處理了,TC 會異步調度各個 RM 分支事務刪除對應的 undo log 日志即可,這個步驟非常快速地可以完成;當 TM 決議全局回滾時,RM 收到 TC 發送的回滾請求,RM 通過 XID 找到對應的 undo log 回滾日志,然后執行回滾日志完成回滾操作。

六、其他模式

  上面說的是seata的模式模式AT,seata也針對TCC做了適配兼容,支持TCC事務方案,原理前面已經介紹過,基本思路就是使用侵入業務上的補償及事務管理器的協調來達到全局事務的一起提交及回滾。

七、總結 

1)優點

  • 阿里背書,社區活躍,github1.3w start。
  • 相對2pc來說性能有較大提升,避免多個庫鎖定導致的性能急劇下降。
  • 使用簡單,學習成本低,對業務無入侵,對於AT模式來說,只需一個注解就可以實現分布式事務。
  • 可通過HA-Cluster保證高可用。
  • 靈活,拓展性高,配置,服務發現和注冊,全局鎖,可由用戶自己實現。

2)缺點

  • TC不支持集群部署,一旦TC宕機會導致無法處理分布式事務。
  • Seata的引入全局鎖會額外增加死鎖的風險。
  • 單機多數據源跨服務目前不支持。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM