首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Saga 事务

Saga 事务Saga 事务核心思想是将"长事务拆分为多个本地短事务",由 Saga 事务协调器协调,如果正常结束那就正常完成, 如果"某个步骤失败,则根据相反顺序一次调用补偿操作"。...Saga 事务基本协议如下:1、每个 Saga 事务由一系列幂等的有序子事务(sub-transaction) Ti 组成。...TCC事务补偿机制有一个预留(Try)动作,相当于先报存一个草稿,然后才提交;Saga事务没有预留动作,直接提交。...优点命令协调设计的优点如下:服务之间关系简单,避免服务之间的循环依赖关系,因为 Saga 协调器会调用 Saga 参与者,但参与者不会调用协调器。...由于 Saga 模型中没有 Prepare 阶段,因此事务间不能保证隔离性。

10200

试试SAGA

这里的重试本质上就是rollback的另一种形式,在saga里算是“forward recovery”。 借机又翻看了一下相关的文章,贴到了文末。...Saga vs TCC 1) Saga相比TCC的缺点是缺少预留动作,所以某些情况补偿的实现比较麻烦甚至无法撤销只能补救。不过没有预留动作也意味着不必担心资源释放的问题。...2) TCC最少通信次数为2n,Saga为n(n=sub-transaction的数量)。 3) 第三方服务没需要提供有Try接口。 总体感觉下来SAGA更适合微服务的多数场景。...试用 Saga 思想 解决这类问题当然可以直接引入一些已存在的saga框架,不过这里存在学习、部署等成本。如果只是小范围的解决问题,或许可以使用下面的形式。...可以把callback看作是saga事务参与方发送消息到"message broker"。而调用链的第一个节点就充当了saga的协调者。

19220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    事务 - Saga模式

    协议介绍 Saga的组成: 每个Saga由一系列sub-transaction Ti 组成 每个Ti 都有对应的补偿动作Ci,补偿动作用于撤销Ti造成的结果 可以看到,和TCC相比,Saga没有“预留”...Saga的执行顺序有两种: T1, T2, T3, ..., Tn T1, T2, ..., Tj, Cj,..., C2, C1,其中0 < j < n Saga定义了两种恢复策略: backward...而Saga则就直接发送邮件了(Ti),如果要撤销则得再发送一份邮件说明撤销(Ci),实现起来有一些麻烦。...TCC最少通信次数为2n,而Saga为n(n=sub-transaction的数量)。 有些第三方服务没有Try接口,TCC模式实现起来就比较tricky了,而Saga则很简单。...实现Saga的注意事项 对于服务来说,实现Saga有以下这些要求: Ti和Ci是幂等的。 Ci必须是能够成功的,如果无法成功则需要人工介入。

    1.3K30

    redux-saga

    redux-saga负责调度管理 Saga来头不小(1W star不是浪得的),是某篇论文中提出的一种分布式事务机制,用来管理长期运行的业务进程 P.S.关于Saga背景的更多信息,请查看Background...task与当前saga有关 fork所在的saga会等待forked task,只有在所有forked task都执行结束后,当前saga才会结束 fork的执行机制与all完全一致,包括cancel和...术语Saga指的是一系列操作的集合,是个运行时的抽象概念 redux-saga里的Saga形式上是generator,用来描述一组操作,而generator是个具体的静态概念 P.S.redux-saga...里所说的Saga大多数情况下指的都是generator形式的一组操作,而不是指redux-saga自身。...简单理解的话:在redux-saga里,Saga就是generator,Sagas就是多个generator Sagas有2种顺序组合方式: yield* saga() call(saga) 同样,直接

    1.9K41

    轻松实现 Saga 模式

    轻松实现 Saga 模式 翻译自 Making the Saga Pattern Work Without All the Headaches 。...Saga 模式是持久微服务执行的绝佳工具,但它会使维护变得困难。这是使其适用于您的系统的方法。...了解 Saga 模式 Saga 模式为这一旅程提供了一份路线图。该模式最早在 1987 年的一篇论文中讨论,通过使复杂过程能够彼此通信,将持久执行引入其中。中央控制器管理该服务通信和事务状态。...然而,使用 Saga 模式需要付出巨大的代价。原则上概念并没有问题,但一切取决于实现。开发人员传统上必须将该模式作为应用程序的一部分自己编写代码。...公司在使用 Saga 模式处理软件进程中的上下文切换方面已经朝着正确的方向迈出了一步。但是,通过将这些 Saga 模式抽象为一个独立的服务而不是应用层,公司可以走得更远。

    10410

    分布式事务XA、AT、TCC、SAGA

    中不同的分布式事务解决方案: XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入 TCC模式:最终一致的分阶段事务模式,有业务侵入 AT模式:最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式 SAGA...有代码侵入,需要人为编写try、Confirm和Cancel接口 软状态,事务是最终一致 需要考虑Confirm和Cancel的失败情况,做好幂等处理 # SAGA模式 Saga模式是SEATA提供的长事务解决方案...也分为两个阶段: 一阶段:直接提交本地事务(TCC是预留) 二阶段:成功则什么都不做;失败则通过编写补偿业务来回滚 Saga模式优点: 事务参与者可以基于事件驱动实现异步调用,吞吐高 一阶段直接提交事务...,无锁,性能好 不用编写TCC中的三个阶段,实现简单 缺点: 软状态持续时间不确定,时效性差 没有锁,没有事务隔离,会有脏写 如图所示,SAGA模式下,事务一旦有一个出现问题,则反向按照事务调用顺序进行补偿...,从而保证一致性 # 四种模式对比 - XA AT TCC SAGA 一致性 强一致 弱一致 弱一致 最终一致 隔离性 完全隔离 基于全局锁隔离 基于资源预留隔离 无隔离 代码侵入 无 无 有,需要编写

    2.7K21

    Saga分布式事务

    Saga saga是30年前的一篇数据库论文提到的概念。...论文中定义saga事务是一个长事务,整个事务可以由多个本地事务组成,每个本地事务有相应的执行模块和补偿模块,当saga事务中任意一个事务出错了,可以调用相关事务进行对应的补偿恢复,达到事务的最终一致性。...隔离性 saga事务没有准备阶段,不具备隔离性,如果多个saga事务同时操作同一资源会遇到多线程临界资源的情况,产生数据丢失或者脏数据。...Saga事务框架实现 组成部分: 服务发现模块 微服务处理模块 集中式/分布式saga协调器 saga执行模块 saga协调器 处理saga调用请求接收,分析及执行和结果查询等内容。...saga执行模块 通过分析请求的json数据,构建调用关系图谱,json用来描述saga事务串型调用子事务并执行子事务。

    1.2K20

    聊聊MassTransit——实现Saga模式概览(译)

    原文地址:Saga Overview Introduce 编排一系列事件的能力是一个强大的功能,而MassTransit使这成为可能。 saga是由协调器管理的长期事务。...saga是由事件发起的,saga编排事件,saga维护整个事务的状态。saga旨在管理分布式事务的复杂性,而不需要锁定和一致性。它们管理状态并跟踪发生部分故障时所需的任何补偿。...State Machine Sagas MassTransit包括Automatonymous,它提供了一个强大的状态机(State Machine)语法来创建saga。...Consumer Sagas MassTransit支持Comsumer Sagas,它实现一个或多个接口来消费相关的saga events。...包含此支持,以便将应用程序从其他saga实现轻松移动到MassTransit。 Definitions Saga 定义用于指定消费者的行为,以便可以自动配置它们。

    18820

    React-Redux-Saga实现原理

    前言React-Redux-Saga是一个用于处理Redux异步操作的中间件,它的实现原理基于生成器函数(Generator Functions)和事件监听模式。...本文的主题为 saga 的实现原理,那么与其说 sage 的实现原理,不如说在 saga 中如何通过 yield 获取异步返回的结果,在 React-Saga 中如何通过 yield 获取到数据之前,我还是建议去把博主在...好了,废话不多了,首先来看几个示例,对应的这几个案例分别说明了几个注意点,然后我们在实现 saga 中通过 yield 获取异步数据的底层实现代码,第一个示例如,定义了一个生成器函数, 这个函数保存了...然后调用定义的函数获取异步数据,然后在通过拿到的可迭代对象调用 next 方法将获取到的方法,传递给上一次 yield 进行变量赋值,然后我们在自定义生成器函数的 yield 当中就获取到异步数据了从而实现了 saga

    28350
    领券