Sagas事务模型

Saga 模式是一种分布式异步事务,一种最终一致性事务,是一种柔性事务,有两种不同的方式来实现saga 事务,最流行的两种方式是:

事件/编排Choreography

没有中央协调器(没有单点风险)时,每个服务产生并聆听其他服务的事件,并决定是否应采取行动。 该实现第一个服务执行一个事务,然后发布一个事件。该事件被一个或多个服务进行监听,这些服 务再执行本地事务并发布(或不发布)新的事件,当最后一个服务执行本地事务并且不发布任何事 件时,意味着分布式事务结束,或者它发布的事件没有被任何 Saga 参与者听到都意味着事务结束。
处理流程说明:
订单服务保存新订单,将状态设置为 pengding 挂起状态,并发布名为 ORDER_CREATED_EVENT 的事件。
支付服务监听 ORDER_CREATED_EVENT ,并公布事件 BILLED_ORDER_EVENT
库存服务监听 BILLED_ORDER_EVENT ,更新库存,并发布 ORDER_PREPARED_EVENT
货运服务监听 ORDER_PREPARED_EVENT ,然后交付产品。最后,它发布 ORDER_DELIVERED_EVENT。
最后,订单服务侦听 ORDER_DELIVERED_EVENT 并设置订单的状态为 concluded 完成。
假设库存服务在事务过程中失败了。进行回滚:
库存服务产生 PRODUCT_OUT_OF_STOCK_EVENT
订购服务和支付服务会监听到上面库存服务的这一事件:
  1. 支付服务会退款给客户。
  2. 订单服务将订单状态设置为失败。
优点: 事件 / 编排是实现 Saga 模式的自然方式 ; 它很简单,容易理解,不需要太多的努力来构建,所有参与者都是松散耦合的,因为他们彼此之间没有直接的耦合。如果您的事务涉及2 4 个步骤,则可能是非常合适的。

命令/协调orchestrator 

中央协调器负责集中处理事件的决策和业务逻辑排序。saga协调器 orchestrator 以命令 / 回复的方式与每项服务进行通信,告诉他们应该执行哪些操作。
订单服务保存 pending 状态,并要求订单 Saga 协调器(简称 OSO )开始启动订单事务。
OSO 向收款服务发送执行收款命令,收款服务回复 Payment Executed 消息。
OSO 向库存服务发送准备订单命令,库存服务将回复 OrderPrepared 消息。
OSO 向货运服务发送订单发货命令,货运服务将回复 Order Delivered 消息。
OSO 订单 Saga 协调器必须事先知道执行 创建订单 事务所需的流程 ( 通过读取 BPM 业务流程 XML 配置获得) 。如果有任何失败,它还负责通过向每个参与者发送命令来撤销之前的操作来协调分布式的回滚。当你有一个中央协调器协调一切时,回滚要容易得多,因为协调器默认是执行正向流程,回滚时只要执行反向流程即可。
优点:
避免服务之间的循环依赖关系,因为 saga 协调器会调用 saga 参与者,但参与者不会调用协调器。集中分布式事务的编排。只需要执行命令/ 回复 ( 其实回复消息也是一种事件消息 ) ,降低参与者的复杂性。在添加新步骤时,事务复杂性保持线性,回滚更容易管理。
如果在第一笔交易还没有执行完,想改变有第二笔事务的目标对象,则可以轻松地将其暂停在协调器上,直到第一笔交易结束。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值