針對不同的應用場景,GTS 主要提供標準模式(AT)和自定義模式(MT)兩種事務模式。
-
AT 模式:是 GTS 最主要的事務模式,通過 GTS 基于 MySQL/RDS 的數據源,對 SQL 語句提供分布式事務支持。它幫助應用方以最小的改造代價來實現數據庫的事務功能。
-
MT(TCC) 模式:提供用戶可以介入兩階段提交過程的一種模式。在這種模式下,用戶可以根據自身業務需求自定義在 GTS 的兩階段中每個階段的具體行為。MT 模式提供了更多的靈活性,可能性,以達到特殊場景下的自定義優化,及特殊功能的實現。
MT 模式不依賴于數據庫,這是它相對于 AT 模式的一個最大的優勢。MT 模式幾乎滿足任何事務場景。
在 AT 和 MT 這兩種模式下,GTS 又提供了三種具體的使用方式:
-
AT 模式下,在用戶代碼中使用注解接入分布式事務
這種方式需要在代碼中依賴 GTS 的 SDK,在希望引入分布式事務的方法上,僅需一行注解就可以輕松實現分布式事務。適用的場景包括跨數據庫事務、MQ 的消息事務、EDAS 的服務事務及多場景混合型事務方案。
-
AT 模式下,DRDS 中接入分布式事務
與 DRDS < 5.2.x 版本集成使用時無需 @TxcTransaction 注解,且無需引入 GTS 的 SDK,僅需要在用戶的 SQL 語句中使用 select last_txc_xid() 這條 SQL 語句接入 GTS 分布式事務。通過這種方式,用戶在使用 DRDS 實現分庫分表后,就可以使用 GTS 實現和傳統單機數據庫一致的分布式事務。
說明:除了 DRDS 獨立使用 GTS 的場景,還有一種情況,即在 EDAS 上使用 DRDS,這種情況下,可以把 DRDS 看做一個普通的數據庫,通過注解方式來使用 GTS。
-
MT 模式下,通過兩階段提交接入分布式事務
允許應用介入事務的兩階段提交,分為補償型事務和預留型事務兩類。
- 補償型事務:應用需要在第一階段實現具體的業務操作,第二階段實現提交或者回滾操作。
- 預留型事務:應用需要在第一階段預留業務資源,第二階段提交時實現真正的業務邏輯或者回滾。
MT 模式下,每一個業務表需要建立一個臨時表。通過 @MtBranch 注解指定事務各階段具體的實現接口。