XA协议两阶段提交
1、X/OpenDTP 事务模型
是X/Open 这个组织定义的一套分布式事务的标准,也就是定义了规范和 API 接口,由各个厂商进行具体的实现
DTP 是分布式事物处理(Distributed Transaction Processing)的简称
2、XA协议
XA是由X/Open组织提出的分布式事务规范。
XA规范主要定义了(全局)事务管理器(TM)和(局 部)资源管理器(RM)之间的接口
主流的数据库产品都实现了XA接口,是一个双向的系统接口,在事务管理器以及多个资源管理器之间作为通信桥梁
3、JTA
Java Transaction API,java根据XA规范提供的事务处理标准
4、AP
application, 应用程序也就是业务层,微服务等
5、RM
Resource Manager,资源管理器。一般是数据库,也可以是其他资源管理器,比如消息队列,文件系统
6、TM
Transaction Manager ,事务管理器、事务协调者,负责接收来自用户程序(AP)发起的 XA 事务指令,并调度和协调参与事务的所有 RM(数据库),确保事务正确完成
7、事务模型
在分布式系统中,每一个机器节点能够明确知道自己在进行事务操作过程中的 结果是成功还是失败,但无法直接获取到其他分布式节点的操作结果
当一个事务操作跨越多个分布式节点的时候,为了保持事务处理的 ACID 特性,
需要引入一个“协调者”(TM)来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点被称为 AP。
TM 负责调度 AP 的行为,并最终决定这些 AP 是否要把事务真正进行提交到(RM)
XA协议规范-实现分布式事务的原理如下
- 一般习惯称为 两阶段提交协议(The two-phase commit protocol,2PC)
- 是XA用于在全局事务中协调多个资源的机制,MySql5.5以上开始支持
- 准备阶段:事务管理器给每个参与者都发送Prepared消息,每个数据库参与者在本地执行事务,并写本地的Undo/Redo日志,此时事务没有提交。 Undo日志是记录修改前的数据,用于数据库回滚 Redo日志是记录修改后的数据,用于提交事务后写入数据
- 提交阶段:
- 如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚(Rollback)消息,否则发送提交(Commit)消息;
- 参与者根据事务管理器的指令执行【提交】或者【回滚】操作,并释放事务处理过程中使用的锁资源
- 注意:必须在最后阶段释放锁资源。
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
总结
- XA协议简单,数据库支持XA协议,开发使用成本比较低
- 对业务侵⼊很小,最⼤的优势就是对使⽤⽅透明
- 用户可以像使⽤本地事务⼀样使⽤基于 XA 协议的分布式事务,能够严格保障事务 ACID 特性
- 事务执⾏过程中需要将所需资源全部锁定,也就是俗称的刚性事务
- 刚性事务:遵循ACID
- 柔性事务:遵循BASE理论
- 性能不理想,占用锁资源比较多,高并发常见下无法满足
- 商业付费数据库支持好,mysql目前支持不是很完善
- 基于 XA 协议的 除了2PC,还有 3PC等
- 三段提交(3PC)是二阶段提交(2PC)的一种改进版本 ,为解决两阶段提交协议的阻塞问题
- 采用超时机制,解决TM故障后RM的阻塞问题,但与此同时却多了一次网络通信,性能上也不理想
- 2PC和3PC目前使用不是很多,只做简单了解即可