介绍

​ 官网: https://seata.apache.org/zh-cn/docs/user/mode/tcc

​ 回顾Seata AT 模式基于 支持本地 ACID 事务关系型数据库,如下:

  • 一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。
  • 二阶段 commit 行为:马上成功结束,自动 异步批量清理回滚日志。
  • 二阶段 rollback 行为:通过回滚日志,自动 生成补偿操作,完成数据回滚。(如果已经被其他事务修改,可能回滚失败,需考虑策略)

​ 当前Seata TCC (Try-Confirm-Cancel)模式则不不依赖于底层数据资源的事务支持,如下:

  • 一阶段 prepare 行为:调用 自定义 的 prepare 逻辑,又称为Try阶段,进行资源检查与预留
  • 二阶段 commit 行为:调用 自定义 的 commit 逻辑,又称为Confirm阶段在全局事务提交时执行,仅使用Try预留的资源要求操作必须成功且幂等。
  • 二阶段 rollback 行为:调用 自定义 的 rollback 逻辑,又称为Cancel阶段在全局事务回滚时触发释放Try阶段预留的资源同样需要保证幂等性。

​ 所谓 TCC 模式,是指支持把 自定义 的分支事务纳入到全局事务的管理中。是高性能分布式事务解决方案,适用于核心系统等对性能有很高要求的场景。

​ TCC 完全不依赖底层数据库,能够实现跨数据库、跨应用资源管理。需要业务系统自行实现 Try,Confirm,Cancel 三个操作,对业务系统有着非常大的入侵性,设计相对复杂

TCC模式示例

电商扣库存例子

1、Try阶段(资源预留)

用户下单触发库存服务冻结库存,优惠卷服务锁定优惠卷,积分服务预扣积分

以库存表设计为例,需要设计资源预留字段(冻结库存),在Cancel时精准恢复库存,避免数据错乱

CREATE TABLE product_stock (product_id BIGINT PRIMARY KEY,available_stock INT,  -- 可售库存(实际可卖数量)frozen_stock    INT   -- 冻结库存(TCC预留数量)...
);

进行冻结库存 update product_stock set frozen_stock = frozen_stock + 1, available_stock = available_stock -1 where product_id=123,其他的(锁定优惠券、预扣积分)所有都返回成功,才能进入下一阶段。

2、Confirm阶段(正式提交)

正式提交时进行扣减冻结库存,核销优惠券,正式扣除积分

以库存表为例,此时需要减去冻结库存

/* 仅减少冻结库存(不碰可用库存) */
UPDATE product_stock
SET frozen_stock = frozen_stock - 1 -- 释放冻结额度
WHERE product_id = 123;

3、Cancel阶段(回滚释放)

出现Cancel主要原因是因业务异常或系统故障导致事务无法完成,如try阶段库存服务响应成功,优惠卷服务未响应,则触发回滚

update product_stock set frozen_stock = frozen_stock - 1 , available_stock = available_stock + 1 where product_id=123

原理分析

Seata角色说明

  • TC (Transaction Coordinator):事务协调器,全局事务调度中心(Seata-Server)。
  • TM (Transaction Manager)事务管理器,用于触发开启/提交/回滚全局事务。而事务管理器分 2 阶段协调所有资源管理器,在第一阶段询问所有资源管理器**“准备”(Try)是否成功**,如果所有资源均“准备”成功则在第二阶段执行所有资源的**“提交”(Confirm)操作**,否则在第二阶段执行所有资源的**“回滚”(Cancel)操作**,保证所有资源的最终状态是一致的,要么全部提交要么全部回滚。
  • RM (Resource Manager):资源管理器,分支事务注册与三阶段方法的真正执行。提供“准备”、“提交”和“回滚” 3 个操作的资源对应 Try、Confirm、Cancel 3 个方法均由业务编码实现 。

0、核心流程设计

  • 事务启动:TM通过GlobalTransactionalInterceptor拦截业务方法,向TC注册全局事务生成XID。
  • 分支注册:TCC服务(如扣库存)被调用时,TccActionInterceptor拦截Try方法,向TC注册分支事务并记录资源预留信息。

RM启动时,通过TCCResourceManager向TC注册TCC资源(含Commit/Rollback方法信息),建立ResourceID到RPC上下文的映射

  • 二阶段决策
    • 提交:TM通知TC → TC遍历分支事务 → 异步调用各RM的Confirm方法。
    • 回滚:流程类似,调用Cancel方法,失败重试直至成功。

常见问题解决

0、TCC vs AT模式的核心差异

TCC需业务编码实现三阶段,无全局锁,适合高性能与非事务型数据库;AT依赖数据库快照和全局锁,对代码无侵入

1、空回滚(Cancel未执行Try)如何识别空回滚

Try因网络超时未执行,但全局事务因超时触发回滚Cancel。

可以通过查询事务记录表,若无对应XID的Try记录,则判定为空回滚,直接返回成功

  • 事务记录表记录Try状态(如tcc_status(xid, branch_id, status)
  • Cancel执行时检查记录:无记录则空回滚(直接返回成功)

2、**悬挂(Cancel先于Try执行)**如何解决

Try网络延迟,Cancel执行后Try才到达,导致资源永久锁定。

在Cancel执行时插入回滚记录(状态CANCELLED),Try执行前检查此记录。若存在则放弃Try,避免资源锁定

  • Try执行前检查事务记录表,若存在CANCELLED状态则拒绝执行。
  • 分布式锁确保Try/Cancel互斥(如Redis锁)

3、幂等控制,如何保证

网络重传或补偿机制导致Confirm/Cancel重复调用。

通过事务记录表状态机实现。二阶段执行后更新状态,重复调用时根据状态直接返回

  • 事务记录表增加状态字段(如init/committed/cancelled),二阶段执行后更新状态,重复调用时直接返回

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94944.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94944.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/94944.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day37--动态规划--52. 携带研究材料(卡码网),518. 零钱兑换 II,377. 组合总和 Ⅳ,57. 爬楼梯(卡码网)

Day37–动态规划–52. 携带研究材料(卡码网),518. 零钱兑换 II,377. 组合总和 Ⅳ,57. 爬楼梯(卡码网) 本文全部都是 ” 完全背包 “ 问题,从零到入坑,从入坑到爬出来。 本…

Linux文件操作

Linux文件Linux下的文件类型b 块设备文件---->存储类设备(硬盘)c 字符设备文件--->输入输出设备d 目录文件--->文件夹- 普通文件--> xxx.c xxx.h xxx.txt xxx.jpg xxx.mp4 a.outl 软链接文件-->快捷方式s 套接字文件-->网络通信p 管道…

Linux epoll 触发模式详解:LT vs ET

两种核心触发模式 1. 水平触发 (Level-Triggered, LT) 工作方式: 当文件描述符处于就绪状态时,epoll 会持续通知 只要状态未改变,每次调用 epoll_wait 都会返回该描述符 特点: c // 内核处理逻辑 (ep_send_events_proc) if (!(epi->event.events & EPOLLET)) { /…

STM32学习笔记6-TIM-2输出比较功能

第二部分,定时器的输出比较功能OC(Output Compare)输出比较输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4…

MATLAB核心技巧:从入门到精通

一 1.数值 显示 格式 format style 设置 eg: pi format longE; or 2.清除指令 clc 清除命令行窗口 clear 清除工作区 cls 3.搜索路径设置 path(path,E:\ads\) or addpath 4.M文件 用户把要实现的命令写在一个以.m为扩展的文件中,然后由matlab系统进行解读…

AnyDesk远程工具免费版,v9.5.110绿色便携版,秒连远程桌面,剪贴板同步超实用

[软件名称]: AnyDesk远程工具免费版 [软件大小]: 7.5 MB [软件大小]: 夸克网盘 | 百度网盘 软件介绍 AnyDesk 让远程工作变得轻而易举。无论您身处办公室的另一端还是世界的另一侧,只需在设备上下载、安装并启动 AnyDesk.exe,即可轻松访问远程屏幕。…

AI: 给Gemini CLI配上“说明书”, 精通的GEMINI.md项目记忆

嘿,各位技术同好!今天我们来聊一个能极大提升AI编程助手效率的酷炫功能——Google Gemini CLI 中的 GEMINI.md 文件。 在日常开发中,我们越来越依赖像 Gemini 这样的 AI 助手来帮我们写代码、调试 Bug 甚至重构项目。但大家是否遇到过这种情况…

[激光原理与应用-205]:光学器件 - LD与DFB的比较

一、相同点核心原理均基于半导体材料的受激辐射机制,通过电子-空穴复合产生光子。依赖谐振腔实现光反馈与放大,形成激光振荡。采用电泵浦方式驱动,电流注入激发载流子,实现粒子数反转。材料体系主要使用III-V族化合物半导体&#…

Cursor手机版:一半是神,一半是坑

大家好,我是羊仔,专注AI工具、智能体、编程。今天想和大家聊的这个工具,叫Cursor,可能很多朋友已经不陌生了,它作为一款AI原生代码编辑器,之前可谓是风光无两。但最近,它又搞了点新花样&#xf…

康养休闲旅游服务虚拟仿真实训室:筑牢技能人才培养的数字基石

随着康养休闲旅游行业数字化、网络化、智能化发展趋势的深化,行业对高素质技能人才的实践能力和数字素养提出了更高要求。康养休闲旅游服务虚拟仿真实训室作为对接行业需求、创新实践教学模式的重要载体,正成为中等职业教育康养休闲旅游服务专业人才培养…

【Python 高频 API 速学 ⑤】

一、为什么把字典和集合放同一篇? • 底层都是哈希表,API 设计高度对称。 • 日常任务无非「读-写-去重-集合运算」,这 5 个方法就能打穿。二、三件套 & 二板斧一览名称作用返回值原地?dict.get(key, default)安全读取值或 de…

el-tree方法的整理

1.点击树的文字不要收缩仅点击图标的时候收缩 expand-on-click-node&#xff1a;是否在点击节点的时候展开或者收缩节点&#xff0c; 默认值为 true&#xff0c;如果为 false&#xff0c;则只有点箭头图标的时候才会展开或者收缩节点。<el-tree:expand-on-click-node"f…

支持多网络协议的测试工具(postman被无视版)

本文介绍接口调试工具&#xff0c;尽可能覆盖支持多种网络协议。写给一直写http接口&#xff0c;突然调试其他协议接口的开发 在后端开发中&#xff0c;接口调试工具的选择取决于网络协议类型和具体需求。以下是覆盖多种协议的主流工具分类推荐&#xff0c;附关键特点和场景建议…

太阳平近点角详解:概念、计算与应用

太阳平近点角详解&#xff1a;概念、计算与应用 1. 基本定义 **太阳平近点角&#xff08;Mean Anomaly&#xff0c;M&#xff09;**是描述天体&#xff08;如地球&#xff09;在其轨道上平均运动位置的角度参数。对于太阳系中的行星或卫星而言&#xff0c;它表示假设天体以恒定…

ruoyi关闭shiro校验,任何接口可以直接访问

文章目录1.找到ShiroConfig.java文件2.上述适用于get请求&#xff0c;post请求如何关闭&#xff1f;1.找到ShiroConfig.java文件 修改代码 // 原始代码 filterChainDefinitionMap.put("/**", "user,kickout,onlineSession,syncOnlineSession,csrfValidateFilt…

数据结构进阶 详谈红黑树

目录 1. 红⿊树的概念 红⿊树的规则 红⿊树如何确保最⻓路径不超过最短路径的2倍的&#xff1f; 红⿊树的效率&#xff1a; 2. 红⿊树的实现 红⿊树的结构 红⿊树的插⼊ 红⿊树树插⼊⼀个值的⼤概过程 情况1&#xff1a;变⾊ 情况2&#xff1a;单旋变⾊ 情况3&#…

【MySQL】MySQL去重查询详解

前言 在日常的数据库操作中&#xff0c;数据去重是一个非常常见的需求。无论是查询结果去重、数据清洗&#xff0c;还是统计分析&#xff0c;我们都需要掌握MySQL中的各种去重技术。本文将详细介绍MySQL中常用的去重关键字和操作方法&#xff0c;结合实际业务场景&#xff0c;帮…

Pinterest视觉营销自动化:亚矩阵云手机实例与多分辨率适配技术

Pinterest月活突破4.5亿的视觉经济时代&#xff0c;多分辨率适配与跨设备一致性成为品牌触达用户的核心挑战。传统营销因素材模糊、设备参数固化&#xff08;如固定分辨率1080P&#xff09;、行为机械化&#xff08;如定时批量上传&#xff09;&#xff0c;导致点击率低于行业均…

01数据结构-图的邻接矩阵和遍历

01数据结构-图的邻接矩阵和遍历1.图的遍历1.1深度优先遍历1.2广度优先搜索2.邻接矩阵的代码实现1.图的遍历 1.1深度优先遍历 深度优先搜索的过程类似于树的先序遍历&#xff0c;首先从例子中体会深度优先搜索&#xff0c;例如下图1是个无向图&#xff0c;采用深度优先算法遍历…

OpenAI发布的GPT-5 更新了哪些内容,它的核心能力有哪些?AI编码能力这么强,前端程序员何去何从?

目录**1. GPT-5的核心能力与技术突破****1.1 智能水平的质变****1.2 代码生成与优化****1.3 上下文处理与长文本能力****1.4 安全与可靠性改进****2. GPT-5的应用场景与案例****2.1 医疗领域****2.2 教育与学习****2.3 企业级应用****2.4 软件开发****3. 技术细节与创新****3.1…