【2022-12-26】TCC流程简单分析

【2022-12-26】TCC流程简单分析

参考链接:https://developer.aliyun.com/article/682871

1.TCC是什么

分布式事务的解决方案。TCC分别是Try、Confirm、Cancle的简称

  1. Try阶段检查并预留资源

  2. Confirm执行

  3. Cancle取消

 

2.TCC架构

 

image.jpeg

 - 一个完整的业务活动由一个主业务服务与若干从业务服务组成(从业务服务就是我们需要保证事务一致的各个子服务)。

 - 主业务服务负责发起并完成整个业务活动。

 - 从业务服务提供TCC型业务操作。

 - 业务活动管理器控制业务活动的一致性,它登记业务活动中的操作,并在业务活动提交时进行confirm操作,在业务活动取消时进行cancel操作

 

 

3.TCC阶段

TCC大致包含2个节点,1是Try,1是Confirm/Cancle

  • Try

  1. 完成所有必要业务检查

  2. 预留后续执行的业务资源

 

  • Confirm

  1. 只使用Try阶段预留资源、直接执行业务

  2. 重复Confirm须保证幂等

 

  • Cancle

  1. 释放Try阶段预留资源,使之回到最初的状态

  2. 重复Cancle须保证幂等

 

 

4.举个例子

例子:A和B同时向C转100,须保证同时成功,且A、B、C物理不在同一Mysql节点

  • Try

  1. 检查A账户资金足够100

  2. 锁定A账户100资金到冻结户

  3. 检查B账户资金足够100

  4. 锁定B账户100资金到冻结户

 

  • Confirm

  1. Try阶段成功了,则依次执行将A和B冻结户转到C的操作(同时要确保重复执行Confirm幂等)

 

  • Cancle

  1. Try阶段失败or Confirm期间A执行成功但是B执行失败了,则执行Cancle(同时要确保重复执行Cancle幂等)

 

 

5.TCC优缺点

  • 优点

  1. 因为Try期间锁定了预留资源,因此Confirm一般都是会执行成功的

  2. Try期间的资源锁定都是在业务代码中完成,不会blockDB

 

  • 缺点

  1. 由于DB产生次数较多,因此性能有一定损耗,并且TCC整体事务时间被拉长

  2. 从业务服务越多,期间某一Confirm失败的可能性比较高,整体执行Cancle的概率比较大,处理时间也就比较长。(因为是执行失败一个,则会从头遍历执行Cancle方法,节点越多,要被执行的节点也就越多)

 

 

  • 附一张内部执行的流程图

  • 内部执行失败,会有定时任务补偿(在重试一定次数之内的未执行到终态的事务任务,会一直重试执行)

 

image.jpeg

posted @ 2022-12-26 17:10  程序杰杰  阅读(157)  评论(0编辑  收藏  举报