ServiceComb数据一致性解决方案Saga演进介绍

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

传统的单体应用的微服务化改造过程中大多会面临数据库拆分,故而原来由数据库保证的数据一致性也一定面临重新设计和实现,此时需要引入分布式数据一致性方案来解决。常见的解决方案主要有2PC,TCC,事件驱动等,而在微服务开源项目 ServiceComb中提出并实现了使用Saga[1]来解决微服务的数据一致性难题,不同方案的对比可参考《ServiceComb中的数据最终一致性方案》[2]一文。Saga是一个数据最终一致性的解决方案,它允许我们成功地执行所有事务,或在任何事务失败的情况下,补偿已成功的事务,并提供了ACID[3]中ACD的保证(由于事务是交错执行的,可能会看到其他事务的部分结果,因此不能满足隔离性要求)。因此,Saga适用于以下跨服务的事务场景:

  • 嵌套调用。如网上购物时,会依次经过下单、支付服务和第三方支付这几个子事务,其中,下单依赖于支付服务的返回状态,而支付服务也包含了多种可选的支付方式,并依赖于具体支付方式返回的结果。通过Saga,可以清晰地看到一个完整事务中各个服务之间的关系,在异常时也能快速定位出现问题的子事务。

  • 高并发。如秒杀场景下,在成功扣除库存和完成支付后方可认为秒杀成功,若成功扣除库存但支付失败则自动进行补偿(即恢复库存)。鉴于Saga只有提交和补偿两种状态,成功场景下只需对每个子事务进行一次调用即可,因此可以在高并发下保持高性能。

  • 调用时间长。如线上购买电影票,选好座位后一般会有15分钟的支付时间。Saga仅在子事务的提交阶段对资源进行短暂的锁定,且通过超时机制确保事务超时后能自动补偿,即在规定时间内没有支付成功的话就自动释放锁定的座位,极大地简化了业务出现异常时的处理逻辑。

Saga新版本演进

新年新气象,Apache ServiceComb(incubating) Saga[4](以下简称Saga)进行了演进。相对于上一版[2],新演进的设计主要有以下优势:

  • 极大提升易用性。开发者只需使用2-3个注解(即启用事务服务:EnableOmega、全局事务标记:SagaStart和子事务标记:Compensable)。

  • 更方便扩展。对微服务框架的支持更友好。

  • 数据一致性与业务逻辑解耦。在演进后的设计中,通过服务侧omega的引入,saga协调器的职责更为单一(只需负责协调事务的完整性),与具体业务无关,因此,开发人员可以聚焦在具体业务的开发。

Saga演进后的架构,如下图所示,主要包含两个组件,即alpha和omega,其中:

  • alpha充当协调者的角色,主要负责对事务的事件进行持久化存储以及协调子事务的状态,使其最终得以与全局事务的状态保持一致,即保证事务中的子事务要么全执行,要么全不执行。

  • omega是微服务中内嵌的一个agent,负责对网络请求进行拦截并向alpha上报事务事件,并在异常情况下根据alpha下发的指令执行相应的补偿或重试操作。

这里写图片描述

omega内部运行机制

omega是微服务中内嵌的一个agent,负责向alpha上报事务状态并与其它omega直接传递事务上下文信息。其中,每个服务的事务上下文包括:

  • 全局事务id(Global Tx Id):用于唯一标识全局事务,一般在全局事务入口生成,并在整个事务过程中传递。
  • 本地事务id(Local Tx Id):用于唯一标识本地事务,一般由本地事务生成。
  • 父事务id(Parent Tx Id):用于构建子事务间的关系,可由请求上下文中构建。

如下图所示,分布式事务与用于分布式调用链追踪的zipkin[5]的处理流程很类似,在服务提供方,omega会将请求拦截并从中提取请求信

微服务框架ServiceComb Service Center是ServiceComb生态系统中的一个服务注册与发现中心,它基于Apache ServiceComb提供可靠的服务管理。Service Center存储有关每个服务实例的详细信息,包括其状态、位置和可用性信息。服务消费者可以使用这些信息来找到并调用这些服务。如果你已经集成了ServiceComb和Spring Boot,可以使用Spring MVC的注解来创建RESTful API。在这个例子中,和是Spring MVC提供的注解,用于定义一个REST服务端点。 阅读详情

相关推荐

【教程】ServiceComb安装和配置

Apache ServiceComb 提供了融合开源生态的一站式微服务开源解决方案,致力于帮助企业、用户和开发者将应用轻松微服务化上云,实现对微服务应用的高效运维管理。

码农阿福的博客 2234

ServiceComb微服务框架

华为提供的微服务解决方案:Service Comb

学习记录和总结 1万+

ServiceComb介绍与框架源码分析

1. 介绍 ServiceComb是华为开源的微服务解决方案,支持开箱即用、高性能通信、兼容SpringCloud生态、多语言支持、分布式事务等。 关键特性: 开箱即用:支持服务注册发现,负载均衡,熔断容错、分布式事务(Pack)等机制,很容易集成到微服务中 高性能通信:基于Vertx实现纯异步内核,支持同步和异步调用,提供高吞吐量、低时延的服务间通信 兼容SpringCloud生态:支持以spring-boot-starter的方式集成到SpringCloud生态中 多语言支持:支持Java、Go语言微

Just for fun 3112

serviceComb的入门

华为的微服务servicecomb的使用,做了个 小demo

小王的博客 4829

Apache ServiceComb微服务数据最终一致性解决方案 Saga 演进

摘要: 微服务 开源项目 Apache ServiceComb(incubating) 的 微服务事务的数据一致性解决方案 Saga[4](以下简称Saga)进行了演进。相对于上一版[2],新演进的设计主要有以下优势: 极大提升易用性。开发者只需使用2-3个注解(即启用事务服务:EnableOmega、全局事务标记:SagaStart和子事务标记:Compensable)。 更方便扩展。对微服务框...

ServiceComb的博客 1273

Apache ServiceComb Saga Actuator 教程

Apache ServiceComb Saga Actuator 教程 servicecomb-saga-actuatorApache ServiceComb Saga Actuator项目地址:https://gitcode.com/gh_mirrors/se/servicecomb-saga-actuator 1. 项目介绍 Apache ServiceComb Saga Actuator ...

gitblog_01028的博客 962

ServiceComb Saga

摘要:ServiceComb Saga 是 Apache 开源的分布式事务框架,采用 Saga 模式解决微服务数据一致性问题。核心将长事务拆分为多个本地事务,通过补偿机制保证最终一致性。主要特性包括:事件驱动架构(支持3000+ TPS)、多语言SDK(Java/Go)、可视化监控和轻量级设计。架构包含协调器(Alpha)、客户端(Omega)和事件存储组件,支持JDBC/Redis存储。相比2PC等方案更适合长事务场景,但需业务层实现补偿逻辑。

Java_soul_GJH的博客 608

Apache ServiceComb Saga Actuator 常见问题解决方案

Apache ServiceComb Saga Actuator 常见问题解决方案 项目基础介绍 Apache ServiceComb Saga Actuator 是一个开源的分布式事务管理解决方案,旨在帮助用户解决微服务应用中的数据一致性问题。该项目基于 Saga 模式,提供了一个集中化的执行引擎,通过代理外部服务请求来实现最终的数据一致性。主要编程语言为 Java。 新手使用注意事项及解决方案...

gitblog_00932的博客 628

Saga分布式事务解决方案与实践

Saga分布式事务解决方案与实践 我先介绍一下我自己,我叫姜宁,来自于华为开源研究中心,现在负责的是ServiceComb这个开源项目。ServiceComb这个项目已经进到Apache孵化,应该是去年11月份时进到Apache孵化的,这个月我们帮刚发了1.0M1版,但对于SAGA来说我们属于探索的阶段,发布了0.1.0。 我参与过Apache一些项目,我也是Apache的 Member,...

单炒饭 1万+

servicecomb-pack分布式事务解决方案之学习之路(一):saga和tcc-spring-demo

本片文章是一篇servicecomb-pack的使用教程说明,理论知识会另起一篇文章再详细说明(架构理论传送门1,架构理论传送门2) servicecomb是华为开源的一个微服务框架,后进入Apache软件基金会孵化,现已毕业,是apache顶级开源项目,而servicecomb-pack是servicecomb孵化的三个子项目之一,是分布式事务最终一致性解决方案,0.3.0版本之前叫saga,...

Ice166的博客 3694

saga分布式事务框架原理学习

一、SAGA介绍 SAGA来源于1987年普林斯顿大学的Hector Garcia-Molina和Kenneth Salem发表了一篇Paper Sagas,讲述的是如何处理long lived transaction(长活事务)。Saga是一个长活事务可被分解成可以交错运行的子事务集合。其中每个子事务都是一个保持数据库一致性的真实事务。通俗来说,这个长活事务是由多个本地事务所组成, 每个本地事务...

敲代码的文科生的博客 4382

mysql comb_servicecomb-saga开发实战

最近的工作主要是微服务框架的设计与开发,期间要解决多个微服务的分布式事务问题,由于要解决的主要场景是用spring boot写的java项目,最终选择了业界成熟的servicecomb-saga方案,这里稍微记录下以备忘。为何会有分布式事务这里不作深入叙述,网上有相当好的参考资料-聊聊分布式事务,再说说解决方案。为何选择saga方案两阶段提交方案实现较复杂,而且对性能影响太大;TCC方案好像只有阿...

weixin_30095869的博客 402

Apache ServiceComb Saga Actuator 项目推荐

Apache ServiceComb Saga Actuator 项目推荐 项目基础介绍和主要编程语言 Apache ServiceComb Saga Actuator 是一个开源的分布式事务管理项目,旨在帮助用户解决微服务应用中的数据一致性问题。该项目主要使用 Java 编程语言开发,同时也包含少量的 JavaScript 和 HTML 代码。 项目核心功能 分布式事务管理:Saga Actu...

gitblog_00672的博客 873

Apache ServiceComb Saga Actuator 使用教程

Apache ServiceComb Saga Actuator 使用教程 1. 项目的目录结构及介绍 Apache ServiceComb Saga Actuator 是一个用于解决微服务应用中数据一致性问题的开源项目。以下是项目的目录结构及其介绍servicecomb-saga-actuator/ ├── saga-core/ # 事务和补偿处理逻辑 ├── ...

gitblog_00326的博客 406

微服务Apache ServiceComb 数据一致性Saga演进介绍

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33971205的博客 189

Apache ServiceComb 中的微服务数据最终一致性方案

本文转自 微服务开源框架 Apache ServiceComb 官方博客 http://servicecomb.incubator.apache.org/cn/docs/saga_pack_design/本文由华为微服务引擎技术团队&&ServiceComb社区授权发布。数据一致性是构建业务系统需要考虑的重要问题 , 以往我们是依靠数据库来保证数据的一致性。但是在微服务架构以及分布...

ServiceComb的博客 707

分布式事务数据最终一致性之serviceComb-Saga使用方法

准备环境 1.安装JDK 1.8 2.安装Maven 3.x 3.安装Docker 编译 $ git clonehttps://github.com/apache/incubator-servicecomb-saga.git $ cd incubator-servicecom...

chouyun6496的博客 831

SpringBoot集成ServiceComb Pack

SpringBoot2.x集成ServiceComb pack ###事务基本概念 ​ 有过后端数据库编程经验的童鞋应该知道事务的基本理论知识同时网上有许多更为规范的文档参考,我在这里大致简单介绍一下。在数据库编程中我们通常知道ACID的基本概念,为什么会存在这个理论知识的,我个人认为人们在实践的经验中总结出来了对数据库的基本范式和编程规范。 ###本地事务场景 ​ 这里简单的那一个业务场景举例,...

liyong1028826685的专栏 2594
上一篇: GitFlow分支模型下的代码全量格式化流程
下一篇: 科技无障碍盛会举办,人工智能和创新成为高频词
csdn研发技术
博客等级 码龄9年 1379粉丝 90原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值