Java面试题更新 2026-08-05

请描述 Seata 框架中事务回滚的具体实现机制。

后端开发技术原理方案权衡

考察说明

考查候选人对分布式事务框架 Seata 回滚原理的理解深度。

回答思路

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