分布式事务-四种模式

本文详细介绍了分布式事务解决方案Seata的四种模式:XA、AT、TCC和SAGA。Seata作为分布式事务协调者,通过不同的模式实现强一致性和最终一致性。在XA模式中,遵循两阶段提交,但在AT模式中,通过数据快照实现事务提交。TCC模式依赖于预检查和补偿操作,而SAGA模式则是基于事件驱动的长事务解决方案。四种模式各有优缺点,适用于不同的业务场景。
摘要由CSDN通过智能技术生成

目录

 一、初识Seata

 1.1.Seata的架构

二、XA模式

2.1.两阶段提交

 2.2.Seata的XA模型

 2.3.XA模式工作流程

2.4.XA模式优缺点

三、 AT模式

 3.1.Seata的AT模型

 3.2.AT模式工作流程

 3.3.流程梳理

 3.4.AT与XA的区别

 3.5.脏写问题

 3.6.AT模式优缺点

 四、TCC模式

 4.1.流程分析

4.2.Seata的TCC模型 

 4.3.TCC模式优缺点

 4.4.事务悬挂和空回滚

1)空回滚

2)业务悬挂

五、SAGA模式 

5.1.原理

 5.2.SAGA模式优缺点

六、四种模式对比 


 

 一、初识Seata

 Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。致力于提供高性能和简单易用的分布式事务服务,为用户打造一站式的分布式解决方案。

官网地址:http://seata.io/,其中的文档、播客中提供了大量的使用说明、源码分析。

 1.1.Seata的架构

Seata事务管理中有三个重要的角色:

  • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。

  • TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。

  • RM (Resource Manager) - 资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

整体的架构如图:

 

Seata基于上述架构提供了四种不同的分布式事务解决方案:

  • XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入

  • TCC模式:最终一致的分阶段事务模式,有业务侵入

  • AT模式:最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式

  • SAGA模式:长事务模式,有业务侵入

无论哪种方案,都离不开TC,也就是事务的协调者。

二、XA模式

XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范 提供了支持。

2.1.两阶段提交

XA是规范,目前主流数据库都实现了这种规范,实现的原理都是基于两阶段提交。

正常情况:

异常情况:

一阶段:

  • 事务协调者通知每个事物参与者执行本地事务

  • 本地事务执行完成后报告事务执行状态给事务协调者,此时事务不提交,继续持有数据库锁

二阶段:

  • 事务协调者基于一阶段的报告来判断下一步操作

    • 如果一阶段都成功,则通知所有事务参与者,提交事务

    • 如果一阶段任意一个参与者失败,则通知所有事务参与者回滚事务

 2.2.Seata的XA模型

Seata对原始的XA模式做了简单的封装和改造,以适应自己的事务模型,基本架构如图:

 2.3.XA模式工作流程

RM一阶段的工作:

  1. ​ 注册分支事务到TC
  2. ​ 执行分支业务sql但不提交
  3. 报告执行状态到TC

TC二阶段的工作:

  • TC检测各分支事务执行状态

    a.如果都成功,通知所有RM提交事务

    b.如果有失败,通知所有RM回滚事务

RM二阶段的工作:

  • 接收TC指令,提交或回滚事务

2.4.XA模式优缺点

XA模式的优点是什么?

  • 事务的强一致性,满足ACID原则。

  • 常用数据库都支持,实现简单,并且

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛杉矶暖男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值