知识点
-
Seata框架(XA、AT、TCC)
-
MQ
Seata架构
Seata事务管理中三个重要角色:
- TC(Transaction Coordinator)事务协调者:维护全局和分支事务的状态,协调全局事务提交和回滚
- TM(Trasaction Manager)事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务
- RM(Resource Manager)资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚
Seata的XA模式(CP 强一致性)
RM一阶段的工作:
- 注册分支事务到TC
- 执行分支业务sql但不提交
- 报告执行状态到TC TC二阶段的工作:
- TC检测各分支事务的执行状态
- 如果都成功,通知所有RM提交事务
- 如果都失败,通知所有RM回滚事务 RM二阶段的工作:
- 接收TC指令,提交或回滚事务
Seata的AT模式(AP 高可用、官方推荐、项目使用多)
AT模式同样是分阶段提交的事务模型,不过却弥补了XA模型中资源锁定周期过长的缺陷。
阶段一RM的工作:
- 注册分支事务
- 记录undo-log(数据快照)
- 执行业务sql并提交
- 报告事务状态
阶段二提交时RM工作:
- 删除undo-log即可
阶段二回滚时RM的工作:
- 根据undo-log恢复数据到更新前
Seata的TCC模式(AP)
- Try:资源的检测和预留
- Confirm:完成资源操作业务:要求try成功confirm一定成功
- Cancel:预留资源释放
MQ分布式事务
你们项目中采用的是哪一种分布式事务解决方案
- 简历上写的微服务,只要是发生了多个服务之间的写操作,都需要进行分布式事务控制
- 描述项目中采用的哪种方案(seata|mq)
- seata的XA模式,CP,需要互相等待各个分支事务的提交,可以保证强一致性,性能较差 【银行业务】
- seata的AT模式,AP,底层使用undo log实现,性能较好 【互联网业务】
- seata的TCC模式,AP,性能较好,不过需要人工编码实现 【银行业务】
- MQ模式实现分布式事务,在A服务写数据的时候,需要在同一个事务内发送消息到另一个事务,异步的,性能好 【互联网业务】