更新日誌
- 更加友好的gRPC型別支援,輸入輸出支援任何型別
- 新增例子啟動時等待mysql,避免因mysql啟動慢而退出
新功能示例
舊的proto檔案示例:
message BusiRequest {
BranchInfo Info = 1;
string Dtm = 2;
bytes BusiData = 3;
}
使用時需要進行轉化
req := TransReq{}
dtmcli.MustUnmarshal(in.BusiData, &req)
handleGrpcBusiness(in, req.TransOutResult, dtmcli.GetFuncName())
新的proto檔案示例
message BusiReq {
int64 Amount = 1;
string TransOutResult = 2;
string TransInResult = 3;
}
使用時,直接是強型別,完全與dtm定義的branchInfo等無關
func (s *busiServer) TransOut(ctx context.Context, in *BusiReq) (*emptypb.Empty, error) {
return handleGrpcBusiness(in, in.TransOutResult)
}
在新版本情況下,業務的gRPC介面,完全獨立於dtm,做到了更好的相容
跨語言分散式事務管理器
DTM是一款golang開發的分散式事務管理器,解決了跨資料庫、跨服務、跨語言棧更新資料的一致性問題。
他優雅的解決了冪等、空補償、懸掛等分散式事務難題,提供了簡單易用、高效能、易水平擴充套件的解決方案。
作者受邀參加中國資料庫大會分享多語言環境下分散式事務實踐
誰在使用dtm
[金數智聯]()
亮點
極易接入
- 支援HTTP,提供非常簡單的介面,極大降低上手分散式事務的難度,新手也能快速接入
使用簡單
- 開發者不再擔心懸掛、空補償、冪等各類問題,框架層代為處理
跨語言
- 可適合多語言棧的公司使用。方便go、python、php、nodejs、ruby、c# 各類語言使用。
易部署、易擴充套件
- 僅依賴mysql,部署簡單,易叢集化,易水平擴充套件
多種分散式事務協議支援
- TCC、SAGA、XA、事務訊息
與其他框架對比
目前開源的分散式事務框架,暫未看到非Java語言有成熟的框架。而Java語言的較多,有阿里的SEATA、華為的ServiceComb-Pack,京東的shardingsphere,以及himly,tcc-transaction,ByteTCC等等,其中以seata應用最為廣泛。
下面是dtm和seata的主要特性對比:
特性 | DTM | SEATA | 備註 |
---|---|---|---|
支援語言 | Go、Java、python、php、c#... | Java | dtm可輕鬆接入一門新語言 |
異常處理 | 子事務屏障自動處理 | 手動處理 | dtm解決了冪等、懸掛、空補償 |
TCC事務 | ✓ | ✓ | |
XA事務 | ✓ | ✓ | |
AT事務 | 建議使用XA | ✓ | AT與XA類似,效能更好,但有髒回滾 |
SAGA事務 | 併發模式 | 狀態機複雜模式 | |
事務訊息 | ✓ | ✗ | dtm提供類似rocketmq的事務訊息 |
單服務多資料來源 | ✓ | ✗ | |
通訊協議 | HTTP、gRPC | dubbo等協議,無HTTP | dtm對雲原生更加友好 |
從上面對比的特性來看,如果您的語言棧包含了Java之外的語言,那麼dtm是您的首選。如果您的語言棧是Java,您也可以選擇接入dtm,使用子事務屏障技術,簡化您的業務編寫。
效能測試報告
教程與文件
如果您覺得yedf/dtm不錯,或者對您有幫助,請賞顆星吧!