DTM是一款开源的GO语言分布式事务管理器,解决跨数据库、跨服务、跨语言栈更新数据的一致性问题。
DTM可适合多语言栈的公司使用。方便go、python、php、nodejs、ruby、c# 各类语言使用。
支持的分布式事务协议包括:SAGA,TCC,XA和二阶段消息这几种模式。
官方网站:https://dtm.pub/
1.启动DTM服务#
项目
1 | https://github.com/dtm-labs/dtm |
git dtm项目
1 | git clone https://github.com/dtm-labs/dtm && cd dtm |
启动dtm
1 | ./dtm |
dtm运行后,会监听两个端口
1 | http:36789 |
2.分布式事务协议#
1.SAGA模式#
Saga核心思想是将长事务拆分为多个短事务,由Saga事务协调器协调,如果每个短事务都成功提交完成,那么全局事务就正常完成,如果某个步骤失败,则根据相反顺序一次调用补偿操作。
适用场景:适合需要最终一致性的大型跨服务事务,且允许一定时间的临时不一致。
优点:实现简单,不需要锁定资源,性能高。
缺点:数据一致性较弱,可能存在短时间的不一致。
2.TCC模式#
TCC分为3个阶段
- Try 资源预留阶段:尝试执行,完成所有业务检查(一致性), 预留必须业务资源(准隔离性)
- Confirm 确认阶段:如果所有分支的Try都成功了,则走到Confirm阶段。Confirm真正执行业务,不作任何业务检查,只使用 Try 阶段预留的业务资源
- Cancel 取消阶段:如果所有分支的Try有一个失败了,则走到Cancel阶段。Cancel释放 Try 阶段预留的业务资源。
适用场景:适合强一致性要求的场景,例如支付扣款、库存预扣等需要确保每个操作的资源在短时间内完全一致。
优点:可以精细控制资源的锁定和释放,提高一致性。
缺点:实现复杂,需为每个操作编写补偿逻辑。
3.二阶段消息模式#
4.XA模式#
总结#
- 二阶段消息模式: 适合不需要回滚的场景
- saga模式: 适合需要回滚的场景
- tcc事务模式: 适合一致性要求较高的场景
- xa事务模式: 适合并发要求不高,没有数据库行锁争抢的场景