XA、AT、TCC、SAGA二阶段提交分布式事务学习笔记
1.概念
- 全局事务:整个分布式事务
- 分支事务:分布式事务中包含的每个子系统的事务
- 最终一致性:各分支事务分别执行并提交,如果有不一致的情况,想办法补偿恢复,达到数据的最终一致性
- 强一致性:各事务执行完业务不要提交,等待彼此结束,之后统一提交或回滚
事务管理中三个重要的角色:
- **TC(Transaction Coordinator)-事务协调者:**维护全局和分支事务的状态,协调全局事务提交或回滚。
- **TM(Transaction Manager)-事务管理器:**定义全局事务的范围、开始全局事务、提交或回滚全局事务。
- **RM(Resource Manager)-资源管理器:**管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
1. XA模式 二阶段提交流程:
TM开启全局事务
RM一阶段: 1.注册分支事务到TC 2.执行分支业务sql 但不提交 3.报告执行状态到TC
TC二阶段: TC检测到各分支事务执行状态, 如果都成功,通知所有RM提交事务, 如果有失败,则通知所有RM回滚事务;
RM二阶段:接收TC指令,提交或回滚事务
TM 提交或回滚全局事务
优点: 1.事务一致性强,满足acid 2.常用数据库都支持,实现简单,没有代码侵入
缺点:因为一阶段需要锁定数据库资源,等待二阶段结束后才释放,所以性能较差; 依赖关系型数据库实现事务;
2.AT模式与XA模式区别:
XA模式一阶段不提交事务,锁定资源; AT模式一阶段直接提交,不锁定资源。
XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚;
XA模式强一致;AT模式最终一致;
优点:
一阶段完成直接提交事务,释放数据库资源,性能较好;
3.TCC模式:
与AT模式类似,每阶段都是独立事务,但是回滚需要人工编码来实现
Try :资源检测和预留 Confirm :完成资源操作业务,要求try成功 confirm也一定成功 Cancel:预留资源释放,理解为try的反向操作
优点:一阶段完成直接提交事务,释放数据库资源,性能好;相比AT模型,无需生产快照,无需使用全局锁,性能最强; 不依赖数据库事务,而是依赖补偿操作,可以用于非事务型数据库
TCC的缺点:有代码侵入,需要人为编写try,confirm, cancel接口,事务是最终一致;需要做好幂等处理,考虑confirm和cancel失败的情况