本文介绍: TCC模式每个阶段是做什么的?Try资源检查和预留Confirm业务执行提交Cancel:预留资源的释放TCC的优点是什么?一阶段完成直接提交事务,释放数据库资源性能好相比AT模型,无需生成快照,无需使用全局锁,性能最强不依赖数据库事务,而是依赖补偿操作可以用于非事务型数据库TCC的缺点是什么?有代码侵入,需要人为编写try、Confirm和Cancel接口,太麻烦软状态,事务是最终一致。

提示文章写完后,目录可以自动生成如何生成参考右边的帮助文档


TCC模式

一个分布式全局事务,整体两阶段提交模型全局事务是由若干分支事务组成的,分支事务要满足 两阶段提交 的模型要求,即需要每个分支事务都具备自己的:

两阶段提交 的模型

在这里插入图片描述

TCC模式与AT模式非常相似,每阶段都是独立事务,不同的是TCC通过人工编码实现数据恢复。需要实现三个方法

1.流程分析

举例,一个扣减用户余额的业务假设账户A原来余额是100,需要余额扣减30元。

阶段一( Try ):

检查余额是否充足,如果充足则冻结金额增加30元,可用余额扣除30

初始余额:
在这里插入图片描述
余额充足,可以冻结:
在这里插入图片描述
此时,总金额 = 冻结金额 + 可用金额,数量依然是100不变。事务直接提交无需等待其它事务。

阶段二(Confirm):

假如要提交(Confirm),之前可用金额已经扣减,并转移到冻结金额。因此可用金额不变,直接冻结金额扣减30即可
在这里插入图片描述
此时,总金额 = 冻结金额 + 可用金额 = 0 + 70 = 70元

阶段二(Canncel):

如果要回滚(Cancel),则释放之前冻结的金额,也就是冻结金额扣减30,可用余额增加30
在这里插入图片描述

2.事务悬挂 和 空回滚

假如一个分布式事务中包含两个分支事务,try阶段,一个分支成功执行,另一个分支事务阻塞

在这里插入图片描述
如果阻塞时间太长,可能导致全局事务超时触发二阶段的cancel操作两个分支事务都会执行cancel操作
在这里插入图片描述

回滚

  • 要知道,其中一个分支是未执行try操作的,直接执行了cancel操作,反而会导致数据错误
  • 因此,这种情况下,尽管cancel方法要执行,但其中不能做任何回滚操作,这就是空回滚

防悬挂

以上问题都需要我们编写try、cancel方法处理

3.总结

TCC模式每个阶段是做什么的?

  • Try:资源检查和预留
  • Confirm:业务执行和提交
  • Cancel:预留资源的释放

TCC的优点是什么?

TCC的缺点是什么?

原文地址:https://blog.csdn.net/weixin_48052161/article/details/134724409

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_17855.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注