|
|
|
@ -12,8 +12,6 @@ DTM是一款golang开发的分布式事务管理器,解决了跨数据库、 |
|
|
|
|
|
|
|
他优雅的解决了幂等、空补偿、悬挂等分布式事务难题,提供了简单易用、高性能、易水平扩展的解决方案。 |
|
|
|
|
|
|
|
通俗一点说,DTM提供跨服务事务能力,一组服务要么全部成功,要么全部回滚,避免只更新了一部分数据产生的业务问题。 |
|
|
|
|
|
|
|
## 谁在使用DTM(仅列出部分) |
|
|
|
[Tencent 腾讯](https://dtm.pub/other/using.html#tencent) |
|
|
|
|
|
|
|
@ -107,7 +105,7 @@ go run main.go |
|
|
|
|
|
|
|
上述saga分布式事务的时序图如下: |
|
|
|
|
|
|
|
<img src="https://pic3.zhimg.com/80/v2-b7d98659093c399e182a0173a8e549ca_1440w.jpg" height=328 /> |
|
|
|
<img src="https://pic3.zhimg.com/80/v2-b7d98659093c399e182a0173a8e549ca_1440w.jpg" height=428 /> |
|
|
|
|
|
|
|
### 失败情况 |
|
|
|
在实际的业务中,子事务可能出现失败,例如转入的子账号被冻结导致转账失败。我们对业务代码进行修改,让TransIn的正向操作失败,然后看看结果 |
|
|
|
@ -120,7 +118,7 @@ go run main.go |
|
|
|
|
|
|
|
再运行这个例子,整个事务最终失败,时序图如下: |
|
|
|
|
|
|
|
<img src="https://pic3.zhimg.com/80/v2-8d8f1476be8a1e2e09ce97a89b4116c2_1440w.jpg" height=428/> |
|
|
|
 |
|
|
|
|
|
|
|
在转入操作失败的情况下,TransIn和TransOut的补偿操作被执行,保证了最终的余额和转账前是一样的。 |
|
|
|
|
|
|
|
|