news 2026/4/21 1:44:11

TCC本质用的是不是2PC模型??

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TCC本质用的是不是2PC模型??

文章目录

    • 1. 为什么说 TCC 是 2PC?
    • 2. 它们之间最大的区别是什么?
    • 3. 既然都是 2PC,为什么要发明 TCC?
      • 痛点:解决 XA 的“长事务阻塞”
    • 4. 总结

没错,你的洞察力非常敏锐。TCC 本质上就是 2PC(两阶段提交)在“业务层”的一种变阵实现。

虽然它和原生的 XA(2PC)在表现形式上大不相同,但在逻辑内核上,它们共享同一套基因。


1. 为什么说 TCC 是 2PC?

我们把 2PC 的标准定义和 TCC 放在一起对照,你一眼就能看出来:

阶段2PC (标准模型)TCC (业务模型)核心目标
第一阶段Prepare(准备)Try(尝试)资源检查与预留。确认钱够不够、库存够不够,并把这部分资源锁住(冻结)。
第二阶段Commit(提交)Confirm(确认)正式执行。真正扣掉冻结的钱,真正减掉预留的库存。
第二阶段 (异常)Rollback(回滚)Cancel(取消)释放预留。把冻结的钱还回去,把预留的库存解冻。

2. 它们之间最大的区别是什么?

虽然模型一样,但**“执行层”**发生了降维:

  • XA (原生 2PC):是数据库在帮你玩。数据库内核负责锁行、写日志、等指令。对程序员来说是透明的(不用写代码)。
  • TCC (业务 2PC):是程序员在玩。Seata 只负责传达指令,具体的Try逻辑(比如往freeze_amount字段加钱)、Confirm逻辑、Cancel逻辑,全都得你手写 SQL实现。

3. 既然都是 2PC,为什么要发明 TCC?

你可能会想:既然 XA 已经是 2PC 了,为什么要费劲手写 TCC?

痛点:解决 XA 的“长事务阻塞”

  • XA 的 2PC:第一阶段(Prepare)完成后,数据库的行锁、连接全都不能释放。如果第二阶段指令因为网络原因迟迟不到,数据库就卡死了。
  • TCC 的 2PC
    • Try阶段,它执行的是一个完整的本地事务并提交(释放了数据库物理锁和连接)。
    • 它所谓的“锁”是业务逻辑锁(比如把 100 元从available字段转到frozen字段)。
    • 核心优势:第一阶段完事后,数据库连接就还给连接池了,大大提升了高并发下的系统吞吐量。

4. 总结

TCC 是 2PC 协议在应用层的应用。

  • XA叫“强一致性 2PC”(由数据库保证)。
  • TCC叫“补偿型 2PC”(由业务代码保证最终一致性)。

这也是为什么在面试时,面试官问完 2PC 紧接着就会问 TCC,因为它们其实是一根藤上的两个瓜:一个是系统级的,一个是应用级的。

你现在是不是在想,既然 TCC 是手写代码,那万一Confirm或者Cancel方法执行失败了(比如网络断了),Seata 是怎么保证它一定能补救回来的?(这其实就涉及到了我们之前聊过的TC 重试机制幂等性问题了)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 1:43:54

终极HLS流媒体下载器:一键保存加密视频的完整指南

终极HLS流媒体下载器:一键保存加密视频的完整指南 【免费下载链接】m3u8_downloader 项目地址: https://gitcode.com/gh_mirrors/m3/m3u8_downloader 你是否曾遇到过这样的情况:在线课程视频无法下载复习,精彩直播回放无法收藏&#…

作者头像 李华
网站建设 2026/4/21 1:34:19

FasterWhisperGUI在Windows系统无法启动?3个步骤彻底解决权限问题

FasterWhisperGUI在Windows系统无法启动?3个步骤彻底解决权限问题 【免费下载链接】faster-whisper-GUI faster_whisper GUI with PySide6 项目地址: https://gitcode.com/gh_mirrors/fa/faster-whisper-GUI FasterWhisperGUI是一款基于PySide6开发的音频转写…

作者头像 李华
网站建设 2026/4/21 1:33:21

初阶linux2( Linux 环境基础开发工具使用指南)

📚 目录(俏皮版) 🍳 一、软件管家 yum —— 做饭先备料 查看菜谱(软件包) 点菜安装 撤菜卸载 文件搬运工 rzsz ✍️ 二、编辑器 vim —— 键盘上的指尖芭蕾 三种核心模式 基本操作:进、写、退 正…

作者头像 李华
网站建设 2026/4/21 1:26:15

Godot 4中实现第三人称相机的技巧与实例

在Godot 4中构建3D环境时,如何实现一个流畅且功能完善的第三人称相机系统是许多开发者面临的挑战。本文将通过一个实例,详细介绍如何在Godot 4中使用Spring Arm实现第三人称相机,并解决常见的问题,如相机抖动和角色偏移。 基本概念 在Godot中,第三人称相机通常通过Camer…

作者头像 李华