分布式事务XA协议2PC、3PC、TCC流程解析
分布式事务XA协议2PC、3PC、TCC流程解析
- 分布式事务XA协议2PC、3PC、TCC流程解析
- XA协议两阶段提交
- 1、X/OpenDTP 事务模型
- 2、XA协议
- 3、JTA
- 4、AP
- 5、RM
- 6、TM
- 7、事务模型
- 总结
提示:以下是本篇文章正文内容,下面案例可供参考
XA协议两阶段提交 1、X/OpenDTP 事务模型是X/Open 这个组织定义的一套分布式事务的标准,也就是定义了规范和 API 接口,由各个厂商进行具体的实现
DTP 是分布式事物处理(Distributed Transaction Processing)的简称
2、XA协议XA是由X/Open组织提出的分布式事务规范。
XA规范主要定义了(全局)事务管理器™和(局 部)资源管理器(RM)之间的接口
主流的数据库产品都实现了XA接口,是一个双向的系统接口,在事务管理器以及多个资源管理器之间作为通信桥梁
3、JTAJava Transaction API,java根据XA规范提供的事务处理标准
4、APapplication, 应用程序也就是业务层,微服务等
5、RMResource Manager,资源管理器。一般是数据库,也可以是其他资源管理器,比如消息队列,文件系统
6、TMTransaction 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)消息;
- 参与者根据事务管理器的指令执行【提交】或者【回滚】操作,并释放事务处理过程中使用的锁资源
- 注意:必须在最后阶段释放锁资源。
总结
- XA协议简单,数据库支持XA协议,开发使用成本比较低
- 对业务侵⼊很小,最⼤的优势就是对使⽤⽅透明
- 用户可以像使⽤本地事务⼀样使⽤基于 XA 协议的分布式事务,能够严格保障事务 ACID 特性
- 事务执⾏过程中需要将所需资源全部锁定,也就是俗称的刚性事务
- 刚性事务:遵循ACID
- 柔性事务:遵循base理论
- 性能不理想,占用锁资源比较多,高并发常见下无法满足
- 商业付费数据库支持好,mysql目前支持不是很完善
- 基于 XA 协议的 除了2PC,还有 3PC等
- 三段提交(3PC)是二阶段提交(2PC)的一种改进版本 ,为解决两阶段提交协议的阻塞问题
- 采用超时机制,解决TM故障后RM的阻塞问题,但与此同时却多了一次网络通信,性能上也不理想
- 2PC和3PC目前使用不是很多,只做简单了解即可



