分布式事务基础理论——TCC

什么是TCC事务

TCC是 try、confirm、cancel三个单词的缩写。

TCC要求每个分支事务实现三个操作:

  • 预处理【try】:try是业务检查和资源预留的操作
  • 确认【confirm】:confirm是业务确认操作
  • 撤销【cancel】:cancel是实现一个与try相反的操作,即回滚

但是我个人感觉TCC和AT实际的执行过程很相像鸭~

TCC执行原理

Try阶段

  • 首先在TCC中,还是存在【全局事务管理】的角色,资源1和2还是指代【事务参与者】
  • 在TCC分布式事务执行中,【全局事务管理】会让每一个【事务参与者】都执行一个try的操作进行业务检查和资源预留,如:
    • 张三要给李四转100块钱,张三需要首先检查自己的卡里是不是有100块钱
    • 下单操作的时候,检查库存是否满足订单的数量,如果满足,还可以进行预留

Confirm阶段

  • 当【事务参与者】在【Try】阶段都执行成功,全局事务进行到下一个阶段【Confirm】
  • 进入【Confirm】阶段,【全局事务管理】会像【事务参与者】进行确认提交事务
  • 在【Confirm】阶段中,只要各个【事务参与者】在【Try】阶段是执行成功的,就默认认为【Confirm】阶段也一定成功

Cancel阶段

Cancel阶段就是回滚阶段,以上图为例:

当有一个或者多个【事务参与者】的【Try】阶段执行失败,就开始全局回滚:即其他【事务参与者】开始进行回滚

总结

  • 【Try】阶段是做业务检查(一致性)以及资源预留(隔离),此阶段仅是一个初步操作,它和后续的【Confirm】一起才能构成一个完整的业务逻辑
  • 【Confirm】阶段的确认操作,是在所有【事务参与者】的【Try】操作都执行完毕后才进行的。通常情况下,TCC认为【Confirm】阶段是不会出现问题的:即只要【Try】成功,【Confirm】也是一定成功的。如果【Confirm】执行失败,就会需要重试机制,或者人工处理。
  • 【Cancel】阶段是在业务执行错误需要回滚的情况下才会进行的,会执行【分支事务】的业务取消、预留资源释放操作。通常情况下,TCC认为【Cancel】阶段也是不会出现问题的,如果【Confirm】执行失败,就会需要重试机制,或者人工处理。

TCC事务管理器

TCC的【TM】是需要独立部署的,也可以让全局事务的发起者充当TM的角色

【TM】在发起全局事务时生成全局事务记录,【全局事务ID】贯穿整个分布式事务调用链条,用来记录事务上下文,追踪记录事物的状态。在TCC中,【Confirm】和【Cancel】是必须执行成功的,一旦这两个阶段执行失败,就需要重试,这时就必须实现操作的幂等性(幂等性是指同一个操作不管请求多少次,其执行结果始终是一样的)

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值