📚 分类
spring cloud
🕵🏽‍♀️ 问题描述
你们采用哪种分布式事务解决方案?
👨‍🏫 问题讲解
❒ Seata架构
Seata事务管理中有三个重要的角色:
✔ TC(Transaction Coordinator) 事务协调者: 维护全局和分支事务的状态、协调全局事务提交或回滚。
✔ TM (Transaction Manager) 事务管理器: 定义全局事务的范围、开始全局事务、提交或回滚全局事务。
✔ RM (Resource Manager) 资源管理器: 管理分支事务处理的资源、与TC交谈以注册分支事务和报告分支事务的状态、并驱动分支事务提交或回滚。

❒ XA模式

▣ RM一阶段的工作

✔ 注册分支事务到TC
✔ 执行分支业务sql但不提交
✔ 报告执行状态到TC

▣ TC二阶段的工作

✔ TC检测各分支事务执行状态
✔ 如果都成功,通知所有RM提交事务
✔ 如果有失败,通知所有RM回滚事务

▣ RM二阶段的工作

✔ 接收TC指令,提交或回滚事务

❒ AT模式原理
AT模式同样是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过长的缺陷。

✔ 阶段一RM的工作:注册分支事务记录undo-log(数据快照)执行业务sql并提交报告事务状态
✔ 阶段二提交时RM的工作:删除undo-log即可
✔ 阶段二回滚时RM的工作:根据undo-log恢复数据到更新前


❒ TCC模式原理

✔ Try:资源的检测和预留
✔ Confirm:完成资源操作业务;要求 Try 成功 Confirm 一定要能成功。
✔ Cancel:预留资源释放,可以理解为try的反向操作。
🏳️‍🌈 问题总结
❒ 描述项目中采用的哪种方案(seatalMQ)

✔ seata的XA模式,CP,需要互相等待各个分支事务提交,可以保证强一致性,性能差
✔ seata的AT模式,AP,底层使用undolog实现,性能好
✔ seata的TCC模式,AP,性能较好,不过需要人工编码实现
✔ MQ模式实现分布式事务,在A服务写数据的时候,需要在同一个事务内发送消息到另外一个事务,异步,性能最好。
📖 问题信息
📈 浏览次数:16 | 📅 更新时间:2025-12-04 03:45:11
📦 创建信息
🏷️ ID:65 | 📅 创建时间:2024-12-23 17:46:54