请描述 Seata 框架中事务回滚的具体实现机制。
考察说明
考查候选人对分布式事务框架 Seata 回滚原理的理解深度。
回答思路
- 【回答框架 1】Seata 的 AT 模式回滚基于两阶段提交协议。在全局事务的提交阶段,若任一分支事务失败,TC 会向所有分支发送回滚指令。
- 【回答框架 2】在分支事务执行时,Seata 会解析 SQL 生成逆向 SQL,并记录数据快照到 undo_log 表,包括前镜像和后镜像。回滚时,通过 undo_log 中的前镜像数据执行反向补偿,恢复原始数据。
- 【回答框架 3】回滚过程中需要保证幂等性,通过全局锁和事务状态控制避免重复回滚;同时依赖 TC 的协调,确保所有分支都回滚后才能结束全局事务。
- 【回答框架 4】若原始 SQL 涉及复杂场景(如并发修改、分布式ID),回滚可能失败,需人工介入或使用 TCC 模式提供更强的回滚保证。
- 【关键点 1】At 模式通过 undo_log 记录前后镜像,回滚时执行逆向 SQL 恢复数据。
- 【关键点 2】两阶段提交中,回滚由 TC 统一协调,分支事务执行反向补偿。
- 【关键点 3】回滚保证幂等性依赖全局锁和事务状态管理。
- 【关键点 4】undo_log 表需与业务表同库,保证本地事务原子性。
- 【易错点 1】将分布式事务回滚等同于数据幂等,实际上需额外机制确保补偿操作幂等。
- 【易错点 2】忽略 undo_log 存储开销和清理策略,可能导致表膨胀。
- 【易错点 3】认为回滚一定能成功,实际并发冲突或脏写可能使回滚失败。