TCC(Try-Confirm-Cancel)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 【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^]。

目录
相关文章
|
4月前
|
数据库
TCC+ SAGA事务
【8月更文挑战第12天】
49 0
|
6月前
|
Apache 开发者
Apache Seata 如何解决 TCC 模式的幂等、悬挂和空回滚问题
【6月更文挑战第8天】Apache Seata 是一款分布式事务框架,解决TCC模式下的幂等、悬挂和空回滚问题。通过记录事务状态处理幂等,设置超时机制避免悬挂,明确标记Try操作成功来处理空回滚。Seata 提供丰富配置和管理功能,确保分布式事务的可靠性和效率,支持复杂事务处理场景,为企业业务发展提供支持。
242 7
|
7月前
事务提交后回调
事务提交后回调
47 2
RabbmitMQ学习笔记-producer的Confirm确认机制
RabbmitMQ学习笔记-producer的Confirm确认机制
79 0
分布式事务之TCC提交协议
分布式事务之TCC提交协议
80 0
dtm分布式事务——saga事务超时多次触发
saga属于长事务,因此持续的时间跨度很大,可能是100ms到1天,因此saga没有默认的超时时间。dtm支持saga事务单独指定超时时间,到了超时时间,全局事务就会回滚。
489 0
|
物联网 Linux 开发者
Pthread_cancel 线程取消|学习笔记
快速学习 Pthread_cancel 线程取消
|
前端开发 数据库
谈下我对TCC的一些理解
谈下我对TCC的一些理解
697 0