源码·二阶段:异步提交、反向补偿与超时检测
2026/8/22大约 2 分钟
分布式事务系列 · 阶段 3B · Seata AT 源码 · 第 22/49 篇 · 🚧 占位待学
上一篇:《源码·TC 侧:会话管理与四种存储》
下一篇:《TCC 三段语义:Try / Confirm / Cancel 业务怎么写》
学习大纲:《分布式事务学习总纲》
状态:待学习。 本文为占位文档:知识点清单、实验与验收标准已就绪,正文待按「先学习、先实验、再撰写」补全。
对应总纲单元:阶段 3B · 单元 3B.5
一、本文要解决的问题
二阶段提交为什么只是删日志?回滚怎么用镜像反向补偿、又是怎么发现「数据已被别人改过」的?超时的事务谁来收尸?附一个 SPI 扩展加分实验。
二、知识点清单
- commit 链路:异步批量删 undo_log(二阶段提交如此之轻的原因)
- rollback 链路:BranchRollbackRequest → before 镜像反向补偿 → after 镜像校验防脏写后误回滚
- 重试机制与 timeoutCheck 定时检测全局超时事务
- 分支回滚失败的重试策略与人工介入点
- 加分:Seata SPI 扩展体系——实现一个全局事务审计日志扩展
三、动手实验(学习时必须真跑)
- 断点画出提交、回滚两条完整时序(含失败重试路径)
- 加分实验:实现一个事务事件监听 SPI,把全局事务审计打到自己的表里
四、验收标准(全部通过才进入下一篇)
五、写作提示(补正文时遵守)
- 开篇问题驱动;结构走「是什么 → 为什么 → 怎么做 → 背景知识」
- 所有代码、命令、输出必须先在本机跑通再写入,不得杜撰
- 版本口径以总纲环境清单为准(Apache Seata 2.6.0 / MySQL 8.0 / RocketMQ 5.x / Spring Boot 3.x)
- 涉及版本敏感结论时标注出处与时间
本篇完成后,把文首导航块的「🚧 占位待学」去掉,并在总纲处打卡。