分散式事務框架dtm1.4.1釋出,支援高階SAGA

葉東富發表於2021-11-01

更新日誌

  • 支援併發SAGA
  • 支援SAGA超時回滾
  • 支援自定義重試間隔

新功能示例

csaga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)).
    Add(Busi+"/TransOut", Busi+"/TransOutRevert", req).
    Add(Busi+"/TransIn", Busi+"/TransInRevert", req).
    EnableConcurrent() // 開啟併發
    // .AddBranchOrder(1, []int{0}) // 指定分支依賴關係
csaga.RetryInterval = 60 // 指定事務分支重試的間隔為60s
csaga.TimeoutToFail = 1800 // 指定saga事務超過1800s未完成,則進行回滾
err := csaga.Submit()

上述程式碼中EnableConcurrent開啟SAGA各分支的併發執行,縮短整個SAGA事務的總耗時

上述程式碼中的註釋:AddBranchOrder(1, []int{0}),則可以新增事務分支間的依賴關係。例如這行註釋的依賴關係為下標為1的分支,依賴下標為0的分支,只有等0完成後,1才能執行。

跨語言分散式事務管理器

DTM是一款golang開發的分散式事務管理器,解決了跨資料庫、跨服務、跨語言棧更新資料的一致性問題。

他優雅的解決了冪等、空補償、懸掛等分散式事務難題,提供了簡單易用、高效能、易水平擴充套件的解決方案。

作者受邀參加中國資料庫大會分享多語言環境下分散式事務實踐

誰在使用dtm

Ivydad 常青藤爸爸

Eglass 視咖鏡小二

極歐科技

[金數智聯]()

亮點

  • 極易接入

    • 支援HTTP,提供非常簡單的介面,極大降低上手分散式事務的難度,新手也能快速接入
  • 使用簡單

    • 開發者不再擔心懸掛、空補償、冪等各類問題,框架層代為處理
  • 跨語言

    • 可適合多語言棧的公司使用。方便go、python、php、nodejs、ruby、c# 各類語言使用。
  • 易部署、易擴充套件

    • 僅依賴mysql,部署簡單,易叢集化,易水平擴充套件
  • 多種分散式事務協議支援

    • TCC、SAGA、XA、事務訊息

與其他框架對比

目前開源的分散式事務框架,暫未看到非Java語言有成熟的框架。而Java語言的較多,有阿里的SEATA、華為的ServiceComb-Pack,京東的shardingsphere,以及himly,tcc-transaction,ByteTCC等等,其中以seata應用最為廣泛。

下面是dtm和seata的主要特性對比:

特性DTMSEATA備註
支援語言Go、Java、python、php、c#...Javadtm可輕鬆接入一門新語言
異常處理子事務屏障自動處理手動處理dtm解決了冪等、懸掛、空補償
TCC事務
XA事務
AT事務建議使用XAAT與XA類似,效能更好,但有髒回滾
SAGA事務併發模式狀態機複雜模式
事務訊息dtm提供類似rocketmq的事務訊息
單服務多資料來源
通訊協議HTTP、gRPCdubbo等協議,無HTTPdtm對雲原生更加友好

從上面對比的特性來看,如果您的語言棧包含了Java之外的語言,那麼dtm是您的首選。如果您的語言棧是Java,您也可以選擇接入dtm,使用子事務屏障技術,簡化您的業務編寫。

效能測試報告

教程與文件

如果您覺得yedf/dtm不錯,或者對您有幫助,請賞顆星吧!

相關文章