分布式事务
文章目录
TCC 分布式事务
TCC 是 Try、Confirm、Cancel 三个词语的缩写。
TCC 分为 3 个阶段
- Try 阶段:尝试执行,完成所有业务检查(一致性), 预留必须业务资源(准隔离性)
- Confirm 阶段:如果所有分支的 Try 都成功了,则走到 Confirm 阶段。Confirm 真正执行业务,不作任何业务检查,只使用 Try 阶段预留的业务资源
- Cancel 阶段:如果所有分支的 Try 有一个失败了,则走到 Cancel 阶段。Cancel 释放 Try 阶段预留的业务资源。
TCC 分布式事务里,有 3 个角色,与经典的 XA 分布式事务一样:
- AP/应用程序,发起全局事务,定义全局事务包含哪些事务分支
- RM/资源管理器,负责分支事务各项资源的管理(相当于一个个微服务)
- TM/事务管理器,负责协调全局事务的正确执行,包括 Confirm,Cancel 的执行,并处理网络异常
如果我们要进行一个类似于银行跨行转账的业务,转出(TransOut)和转入(TransIn)分别在不同的微服务里,一个成功完成的 TCC 事务典型的时序图如下:
典型的 TCC 事务时序图
典型的 TCC 事务回滚时序图
TCC 网络异常
TCC 在整个全局事务的过程中,可能发生各类网络异常情况,典型的是空回滚、幂等、悬挂,由于 TCC 的异常情况,和 SAGA、可靠消息等事务模式有相近的地方。
解决方案呢??
『TODO: 待处理』
第三方库
- seata 是阿里推出的一款开源分布式事务解决方案,目前有 AT、TCC、SAGA、XA 四种模式。
- https://github.com/yedf/dtm
相关文章
- 用 Go 轻松完成一个 TCC 分布式事务,保姆级教程
- 分布式事务你不能不知的坑,一个函数调用帮你搞定它 『TODO: 待阅读』