TCC(Try-Confirm-Cancel)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
简介: 【6月更文挑战第5天】

TCC(Try-Confirm-Cancel)是一种分布式事务解决方案,它通过将一个事务拆分成三个阶段来保证事务的一致性。以下是对TCC的详细介绍,包括其概念、实现原理、优缺点以及在分布式系统中的应用。

TCC概念

TCC是由Pat Helland于2007年在论文《Life beyond Distributed Transactions: an Apostate’s Opinion》中提出的,后来由Atomikos公司正式命名为Try-Confirm-Cancel并注册了商标[^3^]。TCC的核心思想是“针对每个操作都要注册一个与其对应的确认和补偿(撤销操作)”,它分为三个操作阶段:
image.png

  1. Try阶段:主要是对业务系统做检测及资源预留。
  2. Confirm阶段:确认执行业务操作。
  3. Cancel阶段:取消执行业务操作。

TCC实现原理

TCC协议将一个分布式事务分为三个阶段:

  1. Try阶段:在这个阶段,系统会完成所有业务检查(一致性),并预留必要的业务资源(准隔离性)。例如,在转账场景中,系统会检查账户余额是否充足,并冻结相应的金额[^1^][^3^]。

  2. Confirm阶段:如果Try阶段成功,系统将进入Confirm阶段,此时会真正执行业务操作,如实际进行资金转账。在这个阶段,不再进行业务检查,因为Try阶段已经完成了所有必要的检查[^1^][^3^]。

  3. Cancel阶段:如果Try阶段失败或在Confirm阶段遇到问题,系统将执行Cancel操作,释放Try阶段预留的资源,确保系统状态回滚到事务开始前的状态[^1^][^3^]。

TCC优缺点

优点

  • 灵活性:TCC允许应用自己定义数据库操作的粒度,这有助于降低锁冲突和提高吞吐量[^2^]。
  • 业务侵入性:TCC的操作在业务层,使得开发人员可以更灵活地处理事务。
  • 资源锁定粒度:TCC允许业务方灵活选择业务资源的锁定粒度,这有助于优化性能。

缺点

  • 开发成本:TCC要求业务逻辑的每个分支都需要实现Try、Confirm、Cancel三个操作,这增加了开发成本[^2^]。
  • 实现难度:需要根据不同的失败原因实现不同的回滚策略,这增加了实现的复杂性。
  • 幂等性要求:Confirm和Cancel接口必须实现幂等性,以确保在网络超时或异常情况下,重复调用不会导致不一致的问题[^3^]。

TCC在分布式系统中的应用

TCC适用于需要强隔离性、严格一致性要求的业务活动,尤其适用于执行时间较短的业务[^3^]。在实际应用中,TCC可以与消息队列MQ结合使用,通过异步解耦来实现系统的数据最终一致性[^2^]。

目录
相关文章
|
5月前
|
关系型数据库 MySQL Java
异常:no transaction is in progress
异常:no transaction is in progress
143 0
|
7月前
事务提交后回调
事务提交后回调
43 2
RabbmitMQ学习笔记-producer的Confirm确认机制
RabbmitMQ学习笔记-producer的Confirm确认机制
75 0
|
前端开发 测试技术 持续交付
gitHooks: commit-msg
gitHooks: commit-msg
177 0
dtm分布式事务——saga事务超时多次触发
saga属于长事务,因此持续的时间跨度很大,可能是100ms到1天,因此saga没有默认的超时时间。dtm支持saga事务单独指定超时时间,到了超时时间,全局事务就会回滚。
480 0
|
FESCAR
Fescar TC-rollback流程
开篇  这篇文章的目的主要是讲解Fescar TC执行rollback的流程,目的是讲解清楚rollback流程中的一些步骤。  遗憾的是因为rollback本身涉及Fescar的分支事务注册上报,如果事先不了解Fescar的分支事务,有些逻辑理解起来会有一些奇怪,对于branchSession本身还未了解,所以只能单独讲解rollback流程。
1101 0
下一篇
无影云桌面