【微服务】7、分布式事务

news2025/1/8 13:39:23

在分布系统中,一个业务由多个服务合作完成,每个服务有自己的事务,多个事务需同时成功或失败,这样的事务称为分布式事务。

其中每个服务的事务叫分支事务,整个业务的统一事务叫全局事务。

分布式事务相关知识讲解

  1. 课程引入

    • 分布式事务一直是微服务中的难点问题,此前企业缺乏统一解决方案,解决复杂。随着技术发展,有了一整套解决思路。
  2. 黑马商城下单业务分析

    • 业务流程:以黑马商城下单业务为例,该业务包含创建订单、清理购物车和扣减库存三个核心步骤。
    • 早期单体架构:早期为单体项目,所有数据库操作在一个service方法内的一个事务里,满足事务ACID特性。
    • 微服务架构变化:如今业务拆分到不同微服务,各微服务有独立数据库,各自分开执行。
  3. 分布式事务问题剖析
    在这里插入图片描述

    • 业务执行流程及事务提交:订单服务先处理数据创建订单并保存到数据库,事务提交后远程调用购物车服务清理购物车,购物车服务访问数据库完成清理并提交事务,然后订单服务再调用库存服务(商品服务)扣减库存。
    • 库存不足导致的不一致问题:假设商品服务中库存不足,扣减库存失败,但前两个服务已成功,事务一致性被破坏,ACID特性无法满足。
    • 购物车服务无法感知库存异常:订单服务远程调用购物车和库存服务,库存服务异常时订单服务能感知,但购物车服务无法感知,因其业务在被调用完成后已提交事务,不会回滚。
  4. 不一致性验证

    • 准备工作:通过浏览器登录捷克用户账号,展示其购物车中有三个商品(一个下架,两个可下单),准备将小白鞋库存改为不足来验证事务一致性,即购物车数据是否应回滚。
    • 操作过程及结果:打开数据库连接客户端,将小白鞋库存从1万改为0使其库存不足,然后下单。
    • 下单依次执行创建订单(插入数据)、
    • 清理购物车(删除数据)、
    • 扣减库存(失败)。
    • 最终下单失败但购物车被清理,出现不一致现象。
  5. 分布式事务概念定义

    • 在分布系统中,一个业务由多个服务合作完成,每个服务有自己的事务,多个事务需同时成功或失败,这样的事务称为分布式事务。其中每个服务的事务叫分支事务,整个业务的统一事务叫全局事务。
  6. 后续课程预告

    • 分布式事务出现问题,下一课将讲解如何解决分布式事务。

Seata

  1. Seata简介
    • 开源背景:Seata是2019年1月由蚂蚁金服和阿里巴巴共同开源的分支事务解决方案。

在这里插入图片描述

  1. 分布式事务问题及Seata解决思路
    • 问题场景:以订单业务为例,下单涉及多个微服务,如订单操作、购物车清理、库存扣减等,可能出现部分成功部分失败的情况,导致分支事务间状态不一致。
    • 问题原因:微服务相互独立,执行时不知对方状态,各自提交事务。
    • 解决思路:引入事务协调者(TC),各微服务与之联系并报告状态,TC根据情况通知各服务提交或回滚,Seata基于此思路实现。

在这里插入图片描述

  1. Seata实现方式中的角色及功能
    • 事务协调者(TC):维护全局和分支事务状态,协调各分支提交或回滚,各分支事务向其报告状态,独立于微服务。
    • 事务管理器(TM)
      • 定义事务范围:确定全局事务开始和结束时间,全局事务从请求进入方法开始,如订单业务中进入create order方法,到该方法执行完结束。
      • 监控事务:通过引入Seata依赖监控方法运行,知晓全局事务开始和结束情况,但不了解分支事务内部状态。
    • 资源管理器(RM)
      • 管理分支事务状态:与TC交互,注册分支事务并报告执行结果(成功或失败),使分支与全局事务建立联系,TC借此知晓各分支结果。
      • 注册与报告流程:事务开始调用分支时,RM向TC注册分支事务,告知所属分支,执行完后报告执行结果。
  2. 后续操作
    • 搭建TC服务:TC独立于微服务之外,需搭建该服务。
    • 微服务引入依赖与配置:在微服务中引入Seata依赖,Seata提供TM功能,同时需做简单配置,告知微服务联系TC的方式。

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

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

相关文章

基于 Boost.Asio 和 Boost.Beast 的异步 HTTP 服务器(学习记录)

已完成功能: 支持 GET 和 POST 请求的路由与回调处理。 解析URL请求。 单例模式 管理核心业务逻辑。 异步 I/O 技术和 定时器 控制超时。 通过回调函数注册机制,可以灵活地为不同的 URL 路由注册处理函数。 1. 项目背景 1.1 项目简介 本项目是一个基于…

Linux标准IOday1

1:思维导图 2:将 student.c这个练习题&#xff0c;改成链表后实现 头文件link.h #ifndef __STRUCT_H__ #define __STRUCT_H__ #include <stdio.h> #include <stdlib.h> typedef struct Student{char name[20];double math;double chinese;double english;double…

全局变量(PHP)(小迪网络安全笔记~

免责声明&#xff1a;本文章仅用于交流学习&#xff0c;因文章内容而产生的任何违法&未授权行为&#xff0c;与文章作者无关&#xff01;&#xff01;&#xff01; 附&#xff1a;完整笔记目录~ ps&#xff1a;本人小白&#xff0c;笔记均在个人理解基础上整理&#xff0c;…

gateway的路径匹配介绍

gateway是一个单独服务。通过网关端口和predicates进行匹配服务 1先看配置。看我注解你就明白了。其实就是/order/**配置机制直接匹配到orderservice服务。 2我试着请求一个路径&#xff0c;请求成功。下面第三步是请求的接口。 3接口。

RabbitMQ-基本使用

RabbitMQ: One broker to queue them all | RabbitMQ 官方 安装到Docker中 docker run \-e RABBITMQ_DEFAULT_USERrabbit \-e RABBITMQ_DEFAULT_PASSrabbit \-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 \--network mynet\-d \rabbitmq:3…

模式识别-Ch2-分类错误率

分类错误率 最小错误率贝叶斯决策 样本 x x x的错误率&#xff1a; 任一决策都可能会有错误。 P ( error ∣ x ) { P ( w 2 ∣ x ) , if we decide x as w 1 P ( w 1 ∣ x ) , if we decide x as w 2 P(\text{error}|\mathbf{x})\begin{cases} P(w_2|\mathbf{x}), &…

CAD批量打印可检索的PDF文件

本文虽介绍CAD使用方法&#xff0c;但还是劝告大家尽早放弃使用CAD软件。。。。太TM难用了 当你打开CAD时发现如下一堆图纸&#xff0c;但是不想一个一个打印时。你可以按照下面操作实现自动识别图框实现批量打印。 1.安装批量打印插件 2.安装后打开CAD&#xff0c;输入命令Bp…

BERT:深度双向Transformer的预训练用于语言理解

摘要 我们介绍了一种新的语言表示模型&#xff0c;名为BERT&#xff0c;全称为来自Transformer的双向编码器表示。与最近的语言表示模型&#xff08;Peters等&#xff0c;2018a&#xff1b;Radford等&#xff0c;2018&#xff09;不同&#xff0c;BERT旨在通过在所有层中联合调…

搭建企业AI助理的创新应用与案例分析

在大健康零售行业&#xff0c;企业面临着日益增长的市场需求和复杂的供应链管理挑战。AI助理的应用不仅能够提升客户服务效率&#xff0c;还能优化供应链管理&#xff0c;降低运营成本。 一、AI助理在大健康零售行业的创新应用 个性化健康咨询 AI助理可以通过分析客户的健康…

apex安装

安装过程复杂曲折&#xff0c;网上说的很多办法&#xff0c;貌似成功了&#xff0c;实际还是没起作用。 先说成功过程&#xff0c;执行下面命令&#xff0c;安装成功&#xff08;当然&#xff0c;前提是你要先配置好编译环境&#xff09;&#xff1a; &#xff08;我的环境&a…

select下拉框,首次进入页面没有显示value的情况

bug场景&#xff1a; 类似这种bug情况排查如下&#xff1a; 首先 理解含义 options就是存放键值对的&#xff0c;id就是key&#xff0c;对上了它就自动把label显示 而且如果你用来当作key和label的字段&#xff0c;与后端返回的不一致&#xff0c;还可以进行更改 其次 排查接…

krpano 实现文字热点中的三角形和竖杆

krpano 实现文字热点中的三角形和竖杆 实现文字热点中的三角形和竖杆 一个后端写前端真的是脑阔疼 一个后端写前端真的是脑阔疼 一个后端写前端真的是脑阔疼 实现文字热点中的三角形和竖杆 上图看效果 v&#xff1a;2549789059

playwright 录制

一、新建项目TestProject3 二、准备swagger 三、开始录制 打开PowerShell 7 (x64) cd D:\xxx\xxx\VS2022Projects\TestProject3\TestProject3\bin\Debug\net8.0 pwsh playwright.ps1 codegen --targetcsharp -b chromium localhost:5252/swagger/index.html #支持的语言 java…

uni-app 资源引用(绝对路径和相对路径)方法汇总

文章目录 一、前言&#x1f343;二、绝对路径和相对路径2.1 绝对路径2.2 相对路径 三、引用组件四、引用js4.1 js 文件引入4.2 NPM支持 五、引用css六、引用json6.1 json文件引入 七、引用静态资源7.1 模板内引入静态资源7.2 css 引入静态资源7.3 js/uts 引入静态资源7.4 静态资…

go如何从入门进阶到高级

针对Go语言的学习&#xff0c;不同阶段应采取不同的学习方式&#xff0c;以达到最佳效果.本文将Go的学习分为入门、实战、进阶三个阶段&#xff0c;下面分别详细介绍 一、社区 Go语言中文网 作为专注于Go语言学习与推广的平台&#xff0c;Go语言中文网为开发者提供了丰富的中…

现代密码学期末重点(备考ing)

现代密码学期末重点&#xff0c;个人备考笔记哦 密码学概念四种密码学攻击方法什么是公钥密码&#xff1f;什么是对称密码&#xff1f;什么是无条件密码&#xff1f; 中国剩余定理&#xff08;必考&#xff09;什么是原根什么是阶 经典密码学密码体制什么是列置换&#xff1f; …

基于SMT32U575RIT单片机-中断练习

任务 查看手册对所有的拓展板上和相对应的底板的引脚对应的端口找到以下结论 通过STM32MX软件对各个引脚进行相应的配置 1.第一种切换模式电脑发送 #include "main.h" #include "icache.h" #include "usart.h" #include "gpio.h"/*…

KCP解读:拥塞控制

本文是系列文章中的一篇&#xff0c;内容由浅到深进行剖析&#xff0c;为了方便理解建议按顺序一一阅读。 KCP技术原理 KCP解读&#xff1a;基础消息收发 KCP解读&#xff1a;重传机制 KCP解读&#xff1a;滑动窗口 KCP解读&#xff1a;拥塞控制 本文摘取https://xiaolincodin…

HCIA-Access V2.5_8_2_EPON基本架构和关键参数

EPON数据利用方式 EPON和GPON同样只有一根光纤&#xff0c;所以为了避免双向发送数据出现冲突&#xff0c;我们同样采用WDM技术&#xff0c;那么主要利用两个波长&#xff0c;一个是1490纳米的波长&#xff0c;一个是1310纳米的波长&#xff0c;下行OLT给ONU发送数据的时候&…

如何快速上手一个鸿蒙工程

作为一名鸿蒙程序猿&#xff0c;当你换了一家公司&#xff0c;或者被交接了一个已有的业务。前辈在找你之前十分钟写了一个他都看不懂的交接文档&#xff0c;然后把一个鸿蒙工程交接给你了&#xff0c;说以后就是你负责了。之后几天你的状态大概就是下边这样的&#xff0c;一堆…