Page

【DTM】分布式事务框架DTM初体验,TCC跟SAGA模式差异

1208Anson21-07-27


DTM是首款golang分布式事务管理框架,与其他框架不同的是,DTM提供了极简单的HTTP接入方式,支持多语言,并且在框架层处理了各类子事务乱序难题。

官方github:https://github.com/yedf/dtm


1、首先根据文档把dtm部署在服务器

2、下面演示【SAGA模式】 用户2给用户1转账30元 的例子

a、数据表有两个账户

image.png


b、先把用户1记录锁起来,使之不能被转账

image.png

c、运行saga示例

go run app/main.go saga_barrier


d、查看账户表情况,可以看到用户2被扣款30元,扣款事务已提交持久化,但因为用户1账户被锁了,saga事务需要等待

image.png


e、当等待锁时长超过了innodb_lock_wait_timeout配置的时间,则程序会panic,但程序依然继续重试。直到超过上限(1hour)

panic unknown response: {"code":500,"message":"Error 1205: Lock wait timeout exceeded; try restarting transaction"}, will be retried handlered


f、这时候把用户1解锁,就可以看到用户1的转账到账了(重试有时间间隔,不一定马上到账)

commit;

image.png


3、下面演示【TCC模式】 用户2给用户1转账30元 的例子

a、b同上

c、运行tcc实例

go run app/main.go tcc_barrier

d、查看当前余额表以及交易记录表,可以看到用户2的余额事务还没提交,但交易记录表有记录

image.png

image.png


e、释放用户1锁后,正常扣款到账

image.png


4、注意事项

需要使用最新版master代码,旧代码重试两次就不会重试,已跟作者反馈,作者已修复(2021-7-29)https://github.com/yedf/dtm/issues/8





来自anson博客 

http://www.tp0.top

2021-07-27 19:02:43