TCC(Try-Confirm-Cancel)

简介: 【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^]。

目录
相关文章
|
消息中间件 数据库 RocketMQ
分布式事务常见解决方案
分布式事务常见解决方案
2630 0
|
缓存 负载均衡 Dubbo
Sentinel 集群限流设计原理
Sentinel 集群限流设计原理
Sentinel 集群限流设计原理
|
8月前
|
Arthas 监控 Java
Arthas profiler(使用async-profiler对应用采样,生成火焰图)
Arthas profiler(使用async-profiler对应用采样,生成火焰图)
1262 10
|
程序员 数据库 微服务
长事务管理不再难:Saga模式全面解析
本文介绍了分布式事务中的Saga模式,它用于解决微服务架构下的事务管理问题。Saga通过一系列本地事务和补偿操作确保最终一致性,分为编排和协同两种模式。文章重点讲解了编排模式,其中 Saga 协调者负责事务的执行和失败后的补偿。Saga 模式适用于业务流程明确且需要严格补偿的场景,能有效管理长事务,但实现上可能增加复杂性,并存在一致性延迟。文章还讨论了其优缺点和适用场景,强调了在面对分布式事务挑战时,Saga 模式的价值和潜力。
2606 6
|
存储 Java 应用服务中间件
【分布式技术专题】「架构实践于案例分析」盘点互联网应用服务中常用分布式事务(刚性事务和柔性事务)的原理和方案
【分布式技术专题】「架构实践于案例分析」盘点互联网应用服务中常用分布式事务(刚性事务和柔性事务)的原理和方案
516 0
|
消息中间件 监控 NoSQL
Redis脑裂问题详解及解决方案
Redis脑裂问题是分布式系统中常见的复杂问题,合理配置Redis Sentinel、使用保护模式、采用分布式锁机制以及优化网络和客户端连接策略等措施,可以有效预防和解决脑裂问题。通过深入理解Redis脑裂问题的成因和影响,采取相应的解决方案,能够提高系统的可用性和数据一致性,保障Redis集群的稳定运行。希望本文能帮助你更好地理解和应对Redis脑裂问题。
1120 2
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
1255 0
|
缓存 JavaScript Java
常见java OOM异常分析排查思路分析
Java虚拟机(JVM)遇到 OutOfMemoryError(OOM)表示内存资源不足。常见OOM情况包括:1) **Java堆空间不足**:内存被大量对象占用且未及时回收,或内存泄漏;解决方法包括调整JVM堆内存大小、优化代码及修复内存泄漏。2) **线程栈空间不足**:单线程栈帧过大或频繁创建线程;可通过优化代码或调整-Xss参数解决。3) **方法区溢出**:运行时生成大量类导致方法区满载;需调整元空间大小或优化类加载机制。4) **本机内存不足**:JNI调用或内存泄漏引起;需检查并优化本机代码。5) **GC造成的内存不足**:频繁GC但效果不佳;需优化JVM参数、代码及垃圾回收器
902 7
常见java OOM异常分析排查思路分析
|
SQL NoSQL 数据库
SpringCloud基础6——分布式事务,Seata
分布式事务、ACID原则、CAP定理、Seata、Seata的四种分布式方案:XA、AT、TCC、SAGA模式
SpringCloud基础6——分布式事务,Seata
|
存储 NoSQL 关系型数据库
什么是 CAP 理论和 BASE 理论,看这一篇就够了
什么是 CAP 理论和 BASE 理论,看这一篇就够了
874 12