分布式事务解决方案专题-04-TCC

什么是TCC事务

TCC是Try、Confirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认Confirm、撤销Cancel

  • Try操作做业务检查及资源预留
  • Confirm做业务确认操作
  • Cancel实现一个与Try相反的操作回滚操作

执行流程:

  • TM首先发起所有的分支事务的try操作,
    • 任何一个分支事务的try操作执行失败,TM将会发起所有分支事务的Cancel操作,

    • 若try操作全部成功,TM将会发起所有分支事务的Confirm操作

    • 其中Confirm/Cancel操作若执行失败,TM会进行重试

分支事务成功的情况:
在这里插入图片描述

分支事务失败的情况
在这里插入图片描述
TCC分为三个阶段:

  1. Try 阶段是做业务检查(一致性)资源预留(隔离),此阶段仅是一个初步操作,它和后续的Confirm 一起才能真正构成一个完整的业务逻辑。

  2. Confirm 阶段是做确认提交,Try阶段所有分支事务执行成功后开始执行 Confirm。通常情况下,采用TCC则认为 Confirm阶段是不会出错的。即:只要Try成功,Confirm一定成功若Confirm阶段真的出错了,需引入重试机制或人工处理

  3. Cancel 阶段是在业务执行错误需要回滚的状态下执行分支事务的业务取消,预留资源释放。通常情况下,采用TCC则认为Cancel阶段也是一定成功的。若Cancel阶段真的出错了,需引入重试机制或人工处理。

  4. TM事务管理器:TM事务管理器可以实现为独立的服务,也可以让全局事务发起方充当TM的角色,TM独立出来是为了成为公用组件,是为了考虑系统结构和软件复用。

TM在发起全局事务时生成全局事务记录,全局事务ID贯穿整个分布式事务调用链条,用来记录事务上下文,追踪和记录状态,由于Confirm 和cancel失败需进行重试,因此需要实现为幂等

幂等性是指同一个操作无论请求多少次,其结果都相同。

TCC 解决方案

框架名称 Gitbub地址 star数量
tcc-transaction https://github.com/changmingxie/tcc-transaction 3850
Hmily https://github.com/yu199195/hmily 2407
ByteTCC https://github.com/liuyangming/ByteTCC 1947
EasyTransaction https://github.com/QNJR-GROUP/EasyTransaction 1690

框架名称Gitbub地址star数量
tcc-transactionhttps://github.com/changmingxie/tcc-transaction3850
Hmilyhttps://github.com/Dromara/hmily2407
ByteTCChttps://github.com/liuyangming/ByteTCC1947
EasyTransactionhttps://github.com/QNJR-GROUP/EasyTransaction1690

上一节所讲的Seata也支持TCC,但Seata的TCC模式对Spring Cloud并没有提供支持。我们的目标是理解TCC的原理以及事务协调运作的过程,因此更请倾向于轻量级易于理解的框架,因此最终确定了Hmily。

Hmily
Hmily是一个高性能分布式事务TCC开源框架。基于Java语言来开发(JDK1.8),支持Dubbo,Spring Cloud等RPC框架进行分布式事务。它目前支持以下特性:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值