分布式事务·入门与解决·贰·Saga

news2024/12/26 23:33:05

文章目录

  • 1 saga分布式事务框架
    • 1.1 分布式事务相关理论
      • 1.1.1 分布式事务的出现
      • 1.1.2 CAP定理
      • 1.1.3 BASE定理——CAP的解决思想
      • 1.1.4 分布式事务四种模式
      • 1.1.5 XA、AT与TCC模式
      • 1.1.6 Saga模式
    • 1.2 分布式事务框架ElegentACTX对Saga模式的解决
      • 1.2.1 ElegentACTX介绍
      • 1.2.2 ElegentACTX快速入门
        • 1.2.2.1 引入maven坐标
        • 1.2.2.2 添加分布式事务的数据存储
        • 1.2.2.3 实现思路
      • 1.2.3 ElegentACTX实现原理

1 saga分布式事务框架

1.1 分布式事务相关理论

1.1.1 分布式事务的出现

什么是分布式事务:在分布式式系统中,一个大操作由同小操作组成,这些小操作属于不同服务器和应用,而在分布式中需要保证这些小操作要么全部成功,要么全部失败,以保证不同数据库的数据一致性。

==========================================================================

如下方用户下单调用链路图:
在这里插入图片描述

1.1.2 CAP定理

指标解释
C (Consistency)一致性用户访问分布式系统中任意节点,得到的数据必须一致。
A(Availability) 可用性用户访问集群中任意健康节点,必须得到响应,而不是超时或拒绝。
P(Partition tolerance ) 分区容错性由于网络等原因造成集群中部分节点与其他节点失去连接,形成独立分区

CAP定理中:三个指标不能同时满足:

在通信链路中,假设N1、N2间网络突然断开,此时有两种解决思路:
保证系统高可用( A ),牺牲数据一致性(C):牺牲数据的一致性,响应旧的数据给用户。即满足AP,保证系统的高可用。
牺牲系统可用性(A),阻塞等待数据一致( C ):牺牲系统的可用性,阻塞等待网络恢复通信,直到网络恢复,在响应给用户。
注意:针对CA来说,CA的出现会在单体项目中。

在这里插入图片描述

1.1.3 BASE定理——CAP的解决思想

BASE:Basically Available(基本可用)、Soft State(软状态)以及Eventually Consistent(最终一致性)的缩写。

思想解释
Basically Available(基本可用分布式系统在出现故障时,允许损失部分可用性,即保证核心业务可用
Soft State(软状态在一定时间内,允许出现中间状态,比如临时的不一致状态
Eventually Consistent(最终一致性在软状态结束后,最终达到数据一致。

1.1.4 分布式事务四种模式

解决方案解释
XA模式强一致性分阶段事务模式,牺牲一定可用性,无业务侵入。
AT模式最终一致性分阶段事务模式无业务侵入,Seata默认模式。
TCC模式最终一致性分阶段事务模式,有业务侵入。
SAGA模式最终一致性分阶段长事务模式,有业务侵入,Saga模式一阶段会提交本地事务,无锁,长流程下可以保证性能多用于渠道层、集成业务系统。事务参与者可以是其它公司服务或者遗留系统的服务,无法进行改造和提供TCC要求的接口时,也可使用Saga模式。

1.1.5 XA、AT与TCC模式

参考:分布式事务·入门与解决·壹

1.1.6 Saga模式

在这里插入图片描述
在上述sage模式的简略架构图中:

  • ① 首先,A调用B,B调用C,在调用过程中,必须编写与业务方法逻辑相反回滚方法(C处于链路末梢,不用编写回滚,由自己本地事务进行回滚)。
  • ② 若C的业务在执行过程中发现异常,首先由自己的本地事务进行回滚。
  • ③ 同时统一事务协调器会通知A、B微服务执行回滚方法。

1.2 分布式事务框架ElegentACTX对Saga模式的解决

1.2.1 ElegentACTX介绍

ElegentACTX (异步分布式事务框架)是基于ElegentAC(异步调用框架)的分布式事务框架。
与传统的通过MQ异步调用的分布式事务相比较,通常使用消息一致性解决,但是,代码不易维护,特别是在链路复杂的情况下。

1.2.2 ElegentACTX快速入门

1.2.2.1 引入maven坐标

<dependency>
    <groupId>cn.elegent</groupId>
    <artifactId>elegent-ACTX</artifactId>
    <version>1.0.0</version>
</dependency>

1.2.2.2 添加分布式事务的数据存储

elegent:
  data:
    type: redis
    redis:
      nodes: 127.0.0.1:6379
      password:

1.2.2.3 实现思路

  • ① 为了方便代码维护,我们通常会把主事务和子事务都定义成常量。
  • ② OrderServiceImpl的vendout方法上添加注解@ACTransaction,指定主事务与子事务名称,OrderServiceImpl的vendout方法将出货数据保存到快照(ElegentACTXContext.setSnapshot方法)。
  • ④ 订单添加事务回滚类,创建类实现RollBackHandler接口,类添加@RollBack注解,指定主事务和子事务名称。
  • ⑤ doRollBack回滚方法的逻辑:修改订单状态为出货失败 修改支付状态为退款中,发起退款。

1.2.3 ElegentACTX实现原理

在这里插入图片描述
说明:

  • ① 可以将上图分成两条线路来看,绿色线路表示程序正常执行情况,红色表示发生异常后组件调用情况。
  • 绿色线路中,用户在业务方法上加@ACTransation注解会被框架统一协调器(类似Seata中的TC)进行增强,统一事务协调器(类似Seata中的TC)根本是一个AOP切面类,在这个业务方法开始、结束、开始回滚、回滚完成等每个生命周期节点,都会调用事务存储器将这些信息记录到数据库
  • 红色箭头中,当某方法发生异常时,会调用事务管理器(类似Seata中的TM)实现方法的回滚,这时候就需用到ElegentAC框架,ElegentACTX依赖于ElegentAC,通过ElegentAC向每个微服务节点发送回滚消息,每个微服务会由回滚消息分发处理器调用回滚方法,这里使用到策略模式
组件说明
分布式事务协调器根据事务注解信息创建对象,将事务信息存储在统一事务存储器中。
统一事务管理器当业务执行过程出现异常时,由统一事务管理器发送回滚消息。
统一事务存储器框架核心数据存储器(数据库),封装事务存储数据存储逻辑。
回滚消息分发处理器接收到统一书屋管理器发送的回滚消息是,由回滚消息非法处理器分发具体的回滚处理类来进行处理。
ElegentDataElegent的基础组件,为Elegent诸多框架提供存储服务,在ElegentACTX中存储事务数据和快照数据(数据库)需用到。
ElegentAC异步调用框架,ElegentACTX与ElegentAC 做回滚消息的发送。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/611512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

低代码开发的新趋势:公民自动化和公民开发

在企业数字化转型领域&#xff0c;公民自动化是一个比较“陌生又熟悉”的词汇&#xff0c;它在公民开发运动中引起了不小的轰动。那么&#xff0c;什么是公民自动化&#xff1f;什么是公民开发呢&#xff1f;它们之间又有什么不同之处&#xff1f; 什么是公民开发 自低代码诞生…

Neural Network学习笔记3

损失函数和反向传播网络 在进行损失函数计算后&#xff0c;再进行.backward()反向传播。 import torch import torchvision from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential from torch.utils.data import DataLoader from torch…

外贸人注意!这件事不能再对客户承诺了!

你还在配合客户低开发票吗&#xff1f; 本文目录&#xff1a; 什么是低开发票&#xff1f; 低开发票有什么风险&#xff1f; 哪些国家客户喜欢低开发票&#xff1f; 哪些国家低开发票会被抓&#xff1f; 很多人认为客户索要低开发票偷税漏税是人之常情。为了加强合作关系&a…

2015 年一月联考逻辑真题

2015 年一月联考逻辑真题 真题&#xff08;2015-26&#xff09; 26.晴朗的夜晚我们可以看到满天星斗&#xff0c;其中有些是自身发光的恒星&#xff0c;有些是自身不发光但可以反射附近恒星光的行星。恒星尽管遥远&#xff0c;但是有些可以被现有的光学望远镜“看到”。和恒星不…

YOLOv8训练参数详解

全部参数表 首先罗列一下官网提供的全部参数。 1. model ✰✰✰✰✰ model: 模型文件的路径。这个参数指定了所使用的模型文件的位置&#xff0c;例如 yolov8n.pt 或 yolov8n.yaml。 选择.pt和.yaml的区别 若我们选择 yolov8n.pt这种.pt类型的文件&#xff0c;其实里面是包…

从0到1实现IOC

一、什么是 IOC 我们先来看看spring官网对IOC的定义&#xff1a; IoC is also known as dependency injection (DI). It is a process whereby objects define their dependencies, that is, the other objects they work with, only through constructor arguments, argumen…

阿里工程师手打的MySQL学习笔记,轻松拿捏MySQL

我们都知道阿里经历过几次重大的技术变革&#xff0c;其中就包括放弃Oracle和Hadoop&#xff0c;全面拥抱MySQL。 讲道理其实靠OracleHadoop也能撑一撑&#xff0c;为啥偏得变。当然肯定不是因为阿里爸爸没钱&#xff0c;而是即便再花个几千万还是不能彻底解决问题&#xff0c…

压力测试遭遇大量TIME_WITE之后(这样解决)

前言&#xff1a;http协议是互联网中最常使用的应用层协议&#xff0c;它的绝大多数实现是基于TCP协议的。 目录 一 问题描述 二 问题跟踪 三 跟进分析 四 解决方法 一、问题描述 某天&#xff0c;在对一个提供http接口的后台服务进行压力测试过程中&#xff0c;我们设定了…

科班出身又如何?这类人连外包都不要...

在软件测试这个领域&#xff0c;多数人对于外包公司是有戴有色眼镜看待的&#xff0c;外包测试员往往会处于一个比较尴尬的局面。主要是由于雇主公司比较核心或者底层的东西是不会让外包人员作的。外包人员一般做的都是“边角料”。而这些活往往对于技术要求不高&#xff0c;所…

python接口自动化 —— 接口测试工具介绍(详解)

简介 “工欲善其事必先利其器”&#xff0c;通过前边几篇文章的介绍&#xff0c;大家大致对接口有了进一步的认识。那么接下来让我们看看接口测试的工具有哪些。 目前&#xff0c;市场上有很多支持接口测试的工具。利用工具进行接口测试&#xff0c;能够提供测试效率。例如&…

运维小白必学篇之基础篇第十集:系统启动流程实验

系统启动流程实验 实验作业&#xff1a; 1、现在有一台服务器因为长时间不使用&#xff0c;管理员密码已经丢失&#xff0c;现在想要启动该服务器&#xff0c;如何操作 第一步&#xff1a;开启系统&#xff0c;在GRUB界面按E进行编辑 在linux16行中centos/swap后添加 rd.break参…

【AI】InsCode AI 创作助手 --使用心得

CSDN AI写作助手上线了&#xff01;InsCode AI 创作助手不仅能够帮助用户高效创作文章&#xff0c;而且能够作为对话式AI回答你想知道的问题。成倍提高生产力&#xff01;欢迎大家使用新功能后分享自己的使用心得与建议&#xff01; 文章目录 一、你平时会使用这类AI工具吗&am…

navicat与SQLyog的区别

在之前的学习中由于先学的SQL Server&#xff0c;后来才学的MySQL&#xff0c;导致我刚学习的时候冥冥之中感觉到那有点不对劲&#xff0c;但是又说不出来。通过进行深入的学习解除到了Navicat Premium和SQLyog这两个工具&#xff0c;才让我明白了MySQL与之前学习的内容是有所出…

影响代理ip纯净度的原因及目标网站如何识别代理ip

网络上代理ip很多&#xff0c;但真正可以为我们所用的大部分都是付费ip&#xff0c;那为什么免费ip不能为我们所用呢&#xff1f;下面我们就纯净度和目标网站是如何识别代理ip来分析一下。 一、纯净度 ip纯净度是什么意思呢&#xff1f;简单一点开始就是指使用这个ip的人少&…

教你 5 分钟快速部署开源网关

最近在研究开源网关&#xff0c;找了一圈&#xff0c;发现这个叫 Apinto 的开源网关符合我的需求&#xff0c;下面我将演示如何部署这样一个开源网关。 Apinto功能架构图 开始部署 部署资源 设备推荐配置设备数量部署对象4核8G&#xff0c;250G磁盘空间&#xff0c;2.5GHz1控制…

SQL-基础

SQL-小基础 1 SQL简介 英文&#xff1a;Structured Query Language&#xff0c;简称 SQL结构化查询语言&#xff0c;一门操作关系型数据库的编程语言定义操作所有关系型数据库的统一标准对于同一个需求&#xff0c;每一种数据库操作的方式可能会存在一些不一样的地方&#xff…

RPC接口测试技术-Tcp 协议的接口测试

【摘要】 首先明确 Tcp 的概念&#xff0c;针对 Tcp 协议进行接口测试&#xff0c;是指基于 Tcp 协议的上层协议比如 Http &#xff0c;串口&#xff0c;网口&#xff0c; Socket 等。这些协议与 Http 测试方法类似&#xff08;具体查看接口自动化测试章节&#xff09;&#xf…

Ingress Controller高可用部署

Ingress-controller 高可用解说 Ingress Controller 是集群流量的接入层&#xff0c;对它做高可用非常重要&#xff0c;可以基于 keepalive 实现 nginx-ingress-controller 高可用&#xff0c;具体实现如下&#xff1a; Ingress-controller 根据 Deployment nodeSeletorpod 反…

揭秘广告投放的9大关键环节,了解真相让你成为广告投放高手!

正式开始本章的内容之前&#xff0c;先来简单复习一下上一章的主要内容&#xff1a; 核心要点1&#xff1a;广告投放的意义主要有三点&#xff1a;传播品牌、宣传产品、促成转化&#xff1b; 核心要点2&#xff1a;广告投放的主要流程有这样 9 个阶段&#xff1a; 本章我们以…

OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

1. 概述2. 接口介绍resize()flip()rotate()仿射变换warpAffine()getRotationMatrix2D()-变换矩阵1getAffineTransform()-变换矩阵2 透视变换warpPerspective()getPerspectiveTransform() 1. 概述 为了方便开发人员的操作&#xff0c;OpenCV还提供了一些图像变换的API&#xff…