微服务保护和分布式事务(5)
2.3 XA 模式:
Seata 支持四种不同的分布式事务解决方案:
XA
TCC
AT
SAGA
这里我们以XA模式和AT模式来给大家讲解其实现原理。
XA 规范是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范提供了支持。
2.3.1 两阶段提交:
正常情况:
异常情况:
一阶段:
事务协调者通知每个事务参与者执行本地事务。
本地事务执行完成后报告事务执行状态给事务协调者,此时事务不提交,继续持有数据库锁。
二阶段:
事务协调者基于一阶段的报告来判断下一步操作。
如果一阶段都成功,则通知所有事务参与者,提交事务。
如果一阶段任意一个参与者失败,则通知所有事务参与者回滚事务。
2.3.2 Seata 的 XA 模型:
Seata 对原始的 XA 模式做了简单的封装和改造,以适应自己的事务模型,基本架构如图:
RM一阶段的工作:
注册分支事务到TC。
执行分支业务 sql 但不提交。
报告执行状态到TC。
RM二阶段的工作:
接收TC指令,提交或回滚事务。
2.3.3 优缺点:
XA模式的优点是什么?
事务的强一致性(只要事务不提交或回滚,会一直持有数据库锁),满足 ACID 原则。
常用数据库都支持,实现简单,并且没有代码侵入。
XA模式的缺点是什么?
因为一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差。
依赖关系型数据库实现事务。
2.3.4 实现步骤:
首先,我们要在配置文件中指定要采用的分布式事务模式。
seata: data-source-proxy-mode: XA
2.4 AT 模式:
2.4.1 Seata 的 AT 模式:
阶段一RM的工作:
注册分支事务。
记录 undo-log(数据快照)。
执行业务 sql 并提交。
报告事务状态。
阶段二提交时RM的工作:
删除 undo-log 即可。
阶段二回滚时RM的工作:
根据 undo-log 恢复数据到更新前。
2.4.2 AT 与 XA 的区别:
简述AT模式与XA模式最大的区别是什么?
XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源。
XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚。
XA模式强一致;AT模式最终一致。
可见,AT 模式使用起来更加简单,无业务侵入,性能更好。因此企业 90% 的分布式事务都可以用 AT 模式来解决。
参考文献:
黑马程序员
本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!
云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:
《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq
想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ