XA实现分布式事务的原理-两阶段提交2PC流程解析

DBC 1.6K 0

简介:讲解XA实现分布式事务的原理

  • XA协议规范-实现分布式事务的原理如下
    • 一般习惯称为 两阶段提交协议(The two-phase commit protocol,2PC)
    • 是XA用于在全局事务中协调多个资源的机制,MySql5.5以上开始支持
    • 准备阶段:
      事务管理器给每个参与者都发送Prepared消息,每个数据库参与者在本地执行事务,并写本地的Undo/Redo日志,此时事务没有提交。

        • Undo日志是记录修改前的数据,用于数据库回滚
        • Redo日志是记录修改后的数据,用于提交事务后写入数据
      • 提交阶段:
        • 如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚(Rollback)消息,否则发送提交(Commit)消息;
        • 参与者根据事务管理器的指令执行【提交】或者【回滚】操作,并释放事务处理过程中使用的锁资源
        • 注意:必须在最后阶段释放锁资源。

XA实现分布式事务的原理-两阶段提交2PC流程解析插图

 

  • 总结
    • XA协议简单,数据库支持XA协议,开发使用成本比较低
    • 对业务侵⼊很小,最⼤的优势就是对使⽤⽅透明
    • 用户可以像使⽤本地事务⼀样使⽤基于 XA 协议的分布式事务,能够严格保障事务 ACID 特性
    • 事务执⾏过程中需要将所需资源全部锁定,也就是俗称的刚性事务
      • 刚性事务:遵循ACID
      • 柔性事务:遵循BASE理论
    • 性能不理想,占用锁资源比较多,高并发常见下无法满足
    • 商业付费数据库支持好,mysql目前支持不是很完善
    • 基于 XA 协议的 除了2PC,还有 3PC等
      • 三段提交(3PC)是二阶段提交(2PC)的一种改进版本 ,为解决两阶段提交协议的阻塞问题
      • 采用超时机制,解决TM故障后RM的阻塞问题,但与此同时却多了一次网络通信,性能上也不理想
    • 2PC和3PC目前使用不是很多,只做简单了解即可

发表评论 取消回复
表情 图片 链接 代码

分享