seata的TCC模式分析

TCC是 Try- Confirm-Cancel 这3个名词的首字母简称,是一个2阶段提交的变体思路。

Try:对资源的检查和预留;

Confirm: 确认对预留资源的消耗,执行业务操作;

Cancel:预留资源的释放;

TCC的事务交互过程和AT类似,业务先发起全局事务,向TC申请全局XID,再把这个全局XID传递给各个微服务,各微服务在进行本地第一阶段处理之前,都要向

TCC模式最重要的事情就是要把自己的业务模型都拆分为2个阶段,能够支持预留和确认两个阶段,并且需要自行编码来实现try-confirm-cancel对应的业务逻辑,深度侵入业务和代码,当然带来的好处也非常明显,相比AT模式可以大大提高并发度。

常见的电商下单案例中,涉及商品库存扣减、账户金额扣扣减、订单创建 这3大业务,3个业务要支持TCC,首要的是把业务模型拆分为两阶段。

1、库存扣减 2阶段模型

     需要把库存拆分为3部分: 实际库存、可售库存、冻结库存

     其中 实际库存 = 可售库存+ 冻结库存

     Try:增加冻结库存、减少可售库存、实际库存保持不变

     Confirm: 什么都不做;

     Cancel:减少冻结库存,增加可售库存,实际库存不变;

2、账户金额扣减的2阶段模型和库存扣减完全一致。

3、订单创建 2阶段模型

     订单需要增加一个 创建中 状态。

     Try : 订单数据插入DB中,但是订单状态为 创建中;

     Confirm:订单状态变更为 正常状态;

     Cancel:订单状态变更为  无效状态

TCC模式,第1阶段库存、账户、订单这3者其实都是各自提交了本地事务,没有全局锁什么事,第2阶段,无论是Confirm还是Cancel 也都是本地事务提交,也没有全局事务什么事,基于这种模式对于各自业务的总体并发度几乎没有影响,不像AT模式还是有全局的行级锁,整体式是串行的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值