微服务实战 06 分布式事务框架 seata AT 模式 和 Saga 模式

请添加图片描述
参考《Spring Cloud Alibaba 微服务原理与实战》

分布式事务框架 seata

seata 是一个开源的分布式事务框架,它提供了 AT 、 TCC 、Sage 和 XA 事务模式
XA协议请看这篇文章
TCC协议请看这篇文章

AT 模式

AT 模式 是基于XA演进而来的一种分布式事务模式,它同样分为三大模块

  • TM : 事务管理器
  • RM:资源管理器
  • TC:事务协调器
    其中TM 和 RM 为 Seata 的客户端与业务系统集成,TC作为Seata的服务器单独部署。
    在这里插入图片描述
    执行流程:
  1. TM向TC注册全局事务,并生成一个全局唯一的XID
  2. RM向TC注册分支事务,并将其纳入该XID对应的全局事务范围
  3. RM向TC汇报资源准备情况
  4. TC汇总所有事务参与者的执行状态,决定分布式事务是全部回滚还是提交
  5. TC通知所有RM提交/回滚事务
    AT模式和XA一样,也是一个两阶段事务模型

AT 和 TCC的区别

AT 模式基于 支持本地 ACID 事务 的 关系型数据库:

  • 一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。
  • 二阶段 commit 行为:马上成功结束,自动 异步批量清理回滚日志。
  • 二阶段 rollback 行为:通过回滚日志,自动 生成补偿操作,完成数据回滚。
    相应的,TCC 模式,不依赖于底层数据资源的事务支持:
  • 一阶段 prepare 行为:调用 自定义 的 prepare 逻辑。
  • 二阶段 commit 行为:调用 自定义 的 commit 逻辑。
  • 二阶段 rollback 行为:调用 自定义 的 rollback 逻辑。

Saga 模式

Saga模式又称为长事务解决方案,其核心思想:把一个业务流程中的长事务拆分为多个本地短事务,业务流程中的每个参与者都提交真实的提交给该本地短事务,当其中一个参与者事务执行失败,则通过补偿机制补偿前面已经成功的参与者。
在这里插入图片描述

  • 事务从前到后正常执行
  • 在执行中一个事务遇到异常,执行补偿机制
    两种补偿恢复方式
  • 向后恢复:如果任意一个子事务执行失败,则把之前的捷星的结果注意撤销
  • 向前恢复:不进行补偿,而是对失败的事务进行重试

优势:

  • 与XA和TCC相比,一阶段直接提交本地事务;没有锁等待,性能较高;在事件驱动的模式下,段十五可以异步执行;补偿机制的实现比较简单
    缺点:
  • Saga并不提供原子性和隔离性执行。

Saga 的实现方式

根据Saga模式的定于i,先将长事务拆分多个本地短事务,每个服务的本地事务按照执行孙旭注意提交,一旦其中一个服务的事务出现异常,则采用补偿的方式逐一撤回。这一过程会涉及Saga的协调模式
两种常用的协调模式

  • 事件/编排式: 把Saga的决策和执行顺序逻辑分布在Saga的每一个参与者中,他们通过交换事件的方式来进行沟通
  • 命令/协同式:把Saga的决策和执行顺序逻辑集中在一个Sage控制类中,他以命令/回复的方式之与没想服务进行通信,告诉他们应执行哪些操作
事件/编排式

在基于事件的编排模式中,第一个服务执行完一个本地事务之后,发送一个事件。这个事件会被一个或者多个服务监听,监听到事件的服务再执行本地事务并发布新的事件,直到该业务流程中最后一个服务的本地事务执行结束。

在这里插入图片描述
上图看着复杂,但其实非常简单,通过事件机制,从上往下执行,任何一个执行失败,再通过时间机制向上回滚
在这里插入图片描述

命令/协同式

命令/协同式 需要定义一个Saga协调器,负责告诉每一个参与者该做什么,Saga协调器以命令/回复的方式与每项服务进行通信

在这里插入图片描述
命令/协同式 其实是把整个流程的调用交由Saga协调器管理,按照流程循序依次调用,在任何一个环节执行失败,他都需要向每个参与者发送命令撤销前的事务操作。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

1999

每人一点点,明天会更好

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

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

打赏作者

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

抵扣说明:

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

余额充值