当前位置:首页 > 科技  > 软件

Saga 模式 | 如何使用微服务实现业务事务

来源: 责编: 时间:2024-01-02 09:31:07 283观看
导读最强大的事务类型之一称为两阶段提交,当第一个事务的提交取决于第二个事务的完成时,它是摘要。特别是当您必须同时更新多个实体时,例如确认订单和立即更新库存时,它非常有用。但是,例如,当您使用微服务时,事情变得更加复杂。

最强大的事务类型之一称为两阶段提交,当第一个事务的提交取决于第二个事务的完成时,它是摘要。特别是当您必须同时更新多个实体时,例如确认订单和立即更新库存时,它非常有用。XLT28资讯网——每日最新资讯28at.com

但是,例如,当您使用微服务时,事情变得更加复杂。每个服务都是一个独立的系统,拥有自己的数据库,您不再可以利用本地两阶段提交的简单性来维护整个系统的一致性。XLT28资讯网——每日最新资讯28at.com

当你失去这种能力时,RDBMS成为一个非常糟糕的存储选择,因为你可以完成相同的“单实体原子事务”,但只需使用像Couchbase这样的NoSQL数据库就可以快几十倍。这就是为什么大多数使用微服务的公司也在使用NoSQL。XLT28资讯网——每日最新资讯28at.com

要举例说明此问题,请考虑以下电子商务系统的高级微服务架构:XLT28资讯网——每日最新资讯28at.com

图片图片XLT28资讯网——每日最新资讯28at.com

在上面的示例中,人们不能只在一个ACID交易中下订单,向客户收费,更新库存,并将其发送到交货。要始终如一地执行此整个流程,您将需要创建分布式事务。XLT28资讯网——每日最新资讯28at.com

我们都知道实现分布式任务是多么困难,不幸的是,交易也不例外。处理瞬态状态,服务,隔离和回滚之间的最终一致性是在设计阶段应该考虑的场景。XLT28资讯网——每日最新资讯28at.com

幸运的是,我们已经为它提出了一些好的模式,因为我们已经实施分布式事务已有二十多年了。我今天要谈的那个叫做Saga模式。XLT28资讯网——每日最新资讯28at.com

传奇(Saga)模式

分布式事务最着名的模式之一称为Saga。关于它的第一篇论文发表于1987年,从那时起它就成了一种流行的解决方案。XLT28资讯网——每日最新资讯28at.com

Saga是一系列本地事务,其中每个事务在单个服务中更新数据。第一个事务由对应于系统操作的外部请求启动,然后每个后续步骤由前一个完成触发。XLT28资讯网——每日最新资讯28at.com

使用我们之前的电子商务示例,在一个非常高级的设计中,Saga实现如下所示:XLT28资讯网——每日最新资讯28at.com

图片图片XLT28资讯网——每日最新资讯28at.com


XLT28资讯网——每日最新资讯28at.com

有几种不同的方法来实现传奇交易,但最受欢迎的两种方式是:XLT28资讯网——每日最新资讯28at.com

  1. 事件/Choreography(编舞):当没有中央协调时,每个服务产生并监听其他服务的事件,并决定是否应该采取行动。
  2. 命令 / Orchestration(编曲):协调器服务负责集中saga的决策和排序业务逻辑。

让我们更深入地了解每个实现,以了解它们的工作原理。XLT28资讯网——每日最新资讯28at.com

事件/编舞

事件/Choreography(编舞)方法中,第一个服务执行事务然后发布事件。该事件由一个或多个服务监听,这些服务执行本地事务并发布(或不发布)新事件。XLT28资讯网——每日最新资讯28at.com

当最后一个服务执行其本地事务并且不发布任何事件时,分布式事务结束,或者任何传奇(Saga)参与者都不会听到发布的事件。XLT28资讯网——每日最新资讯28at.com

让我们看看它在我们的电子商务示例中的样子:XLT28资讯网——每日最新资讯28at.com

图片图片XLT28资讯网——每日最新资讯28at.com


XLT28资讯网——每日最新资讯28at.com

  1. 订单服务保存新订单,将状态设置为挂起并发布名为ORDER_CREATED_EVENT的事件。
  2. 付款服务侦听ORDER_CREATED_EVENT,向客户收费并发布事件BILLED_ORDER_EVENT。
  3. Stock Service监听BILLED_ORDER_EVENT,更新库存,准备订单中购买的产品并发布ORDER_PREPARED_EVENT。
  4. Delivery Service侦听ORDER_PREPARED_EVENT,然后选择并交付产品。最后,它发布了ORDER_DELIVERED_EVENT
  5. 最后,Order Service侦听ORDER_DELIVERED_EVENT并将订单状态设置为已结束。

在上面的情况中,如果需要跟踪订单的状态,订单服务可以简单地监听所有事件并更新其状态。XLT28资讯网——每日最新资讯28at.com

分布式事务中的回滚

回滚分布式事务并非免费。通常,您必须实施另一个操作/事务来补偿之前已完成的操作。XLT28资讯网——每日最新资讯28at.com

假设Stock Service在交易期间失败了。让我们看看回滚会是什么样子:XLT28资讯网——每日最新资讯28at.com

图片图片XLT28资讯网——每日最新资讯28at.com


XLT28资讯网——每日最新资讯28at.com

  1. 库存服务生产PRODUCT_OUT_OF_STOCK_EVENT;
  2. 订单服务和付款服务都会收听上一条消息:
  • 付款服务退还客户。
  • 订单服务将订单状态设置为失败。

请注意,为每个事务定义一个公共共享ID至关重要,因此每当您抛出一个事件时,所有侦听器都可以立即知道它所引用的事务。XLT28资讯网——每日最新资讯28at.com

Saga 事件/Choreography(编舞)设计的好处和缺点

事件/编排是实现Saga模式的自然方式;它简单,易于理解,不需要太多的努力来构建,并且所有参与者都是松散耦合的,因为他们没有彼此的直接知识。如果您的交易涉及2到4个步骤,那么它可能非常合适。XLT28资讯网——每日最新资讯28at.com

但是,如果您不断在事务中添加额外的步骤,这种方法很快就会变得混乱,因为很难跟踪哪些服务监听哪些事件。此外,它还可能在服务之间添加循环依赖,因为它们必须订阅彼此的事件。XLT28资讯网——每日最新资讯28at.com

最后,使用这种设计实现测试会很棘手。为了模拟事务行为,您应该运行所有服务。XLT28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-55173-0.htmlSaga 模式 | 如何使用微服务实现业务事务

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 基于Spring Boot,为网络请求添加唯一日志id

下一篇: 九个技巧让你的PyTorch模型训练飞快!

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 最“俊美”淘宝卖家,靠直播和短视频圈粉,上架秒光,年销3000万

    来源 | 电商在线文|易琬玉编辑|斯问受访店铺:Ringdoll戒之人形图源:微博@御座的黄山、“Ringdoll戒之人形”淘宝店铺有关外貌的评价,黄山已经听累了。生于1985年的他,哪
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
Top