Seata-Server分布式事务原理加源码(二) - 分布式事务解决方案

news2024/11/28 13:39:25

分布式事务解决方案

2PC即两阶段提交协议,是将整个事务流程分为两个阶段,P是指准备阶段,C是指提交阶段。

  1. 准备阶段(Prepare phase)
  2. 提交阶段(commit phase)

举例:比如说相亲对象两个人去吃饭,店老板要求,先付钱在吃饭,这是男女双方提出了AA,也就是说只有男女双方都付钱,才能落座吃饭,但是只要两个人中有一个不统一付款就不能落座吃饭。

  • 准备阶段:老板要求男方付款,男方付款。老板要求女方付款,女方付款
  • 提交阶段:老板出餐,两人纷纷落座

其实此例子就形成了一个事务,如果男女双方有一个人拒绝付款,那么老板就不会出餐,并且会把已收取的钱原路退回。

真个事务过程是由事务管理器和参与者组成的,店老板就是事务管管理器,男女双发就是参与者,事务管理器决策整个分布式事务在计算机中关系数据库支持的两阶段提交协议:

  • 准备阶段(Prepare phase):事务管理器给每个参与者发送Prepare消息,每个数据库参与者在本地执行事务,并写本地的Undo/Redo日志,此时事务没有提交。
  • (Undo日志是记录修改前的数据,用于数据库回滚,Redo日志是记录修改后的数据,用于提交事务后写入数据文件)
  • 提交阶段(commit phase):如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚(Rollback)消息;否则,发送提交(Commit)消息;参与者根据事务管理器的指令执行提交或者回滚操作,并释放事务处理过程中使用的资源。

具体步骤图例:

成功:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oob7X7Qr-1676370455912)(image-20220113180953684.png)]

失败:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aSKqesiv-1676370455913)(image-20220113181028153.png)]

Seata简介

官网:https://seata.io/zh-cn/docs/overview/what-is-seata.html

概念:Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vp18sbB4-1676370455914)(145942191-7a2d469f-94c8-4cd2-8c7e-46ad75683636.png)]

在我们的微服务系统中,对应业务被对应的拆分成独立模块,在官方提供的架构图中,我们可以看出当前是三个服务:

  • 仓储服务:对给定的商品进行增删操作记录数量
  • 订单服务:根据采购者的需求创建订单
  • 账户服务:从用户账户中扣除余额、积分等

在这套架构中,用户下单购买商品的业务,就需要三个服务来完成,每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题就没办法保证,Seata就是来进行解决这种问题的解决方案。

Seata术语

官网地址:https://seata.io/zh-cn/docs/overview/terminology.html

要了解Seata,首先我们要了解一下Seata的几个关键的概念:

  • TC (Transaction Coordinator) - 事务协调者

    维护全局和分支事务的状态,驱动全局事务提交或回滚。

  • TM (Transaction Manager) - 事务管理器(发起者,同时也是RM的一种)

    定义全局事务的范围:开始全局事务、提交或回滚全局事务。

  • RM (Resource Manager) - 资源管理器(每个参与事务的微服务)

    管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SxmLBr4J-1676370455914)(image-20220111191919517.png)]

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

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

相关文章

微服务项目【秒杀商品展示及商品秒杀】

登录方式调整 第1步:从zmall-common的pom.xml中移除spring-session-data-redis依赖 注意: 1)本次不采用spring-session方式,改用redis直接存储用户登录信息,主要是为了方便之后的jmeter压测; 2&#xff09…

魔兽世界WOW私服架设详细教程

1. 写在前面:此教程是针对国服WOW3.3.5.13930版本的,因为目前魔兽单机在此版本下运行最正常。WOW4.0以上版本还有些许问题2. 准备文件(1)WOW3.3.5.13930客户端,没有的可以从这里下载WOW 3.3.2安装文件和WOW3.3.2-3.3.5…

【linux C】daemon函数应用之——进程守护小工具,运维仔看了都说好!并附带shell版本

最近接触到Linux C中的daemon函数,顾名思义,它和守护进程Daemon有关;简单来说Linux Daemon(守护进程)是运行在后台的一种特殊进程; 一般来说,它独立于控制终端并且周期性地执行某种任务或等待处…

认识V模型、W模型、H模型

软件测试与软件工程息息相关,软件测试是软件工程组成中不可或缺的一部分。 在软件工程、项目管理、质量管理得到规范化应用的企业,软件测试也会进行得比较顺利,软件测试发挥的价值也会更大。 要关注软件工程、质量管理以及配置管理与软件测试…

ChatGPT中文网尝鲜,感觉自己快下岗了

最近很火的ChatGPT之初体验 ChatGPT中文网 居然可以回答代码问题 尝试了一下, 它居然说自己是一个人 顺便问了下简单的java代码问题 “使用java语言写一个递归打印D盘中所有文件名的程序” 很流畅的回答了出来,注释还写得比我详细,感觉我离下岗不远了 这就是GPT写的代码 i…

工人不戴安全帽自动检测识别 opencv

工人不戴安全帽自动检测识别通过pythonopencv深度学习网络模型,工人不戴安全帽自动检测识别算法对现场人员穿戴进行全天候不间断识别检测,发现现场人员违规行为着装自动抓拍存档。Python是一门解释性脚本语言。解释性语言:解释型语言&#xf…

C语言中大小端问题

目录 一、什么是大小端 二、 举个例子 三、大小端演示 四、解释"二"中举例的问题 ​五、怎么判断是大端还是小端 六、一个题目 一、什么是大小端 大端模式(大端字节序存储):就是高位字节数据存放在内存的低地址端&#xff…

工序排序问题--约翰逊法精讲

什么是约翰逊法?约翰逊法是作业排序中的一种排序方法。选出最短加工时间i*,若最短加工时间有多个,任选1个.若i*出现在机床1,它对应的工件先安排加工,否则放在最后安排,安排后划去该工件,重复上两个步骤,直…

python3.11下载安装详细教程

python3.11新的功能特性 1. 支持新的字符串格式化功能,允许使用更多的格式化选项; 2. 支持新的数据类型,如结构化数据类型; 3. 支持新的编程模型,如asyncio; 4. 支持新的编程语言特性,如f-s…

别在用scroll去做懒加载了,交叉观察器轻松搞定

Ⅰ、前言 「懒加载」是网页中非常 常见的;为了减少系统的压力,对于一些电商系统出场频率非常高;那么大家一般用什么方式去实现 「懒加载」 呢 ? ① 通过 scroll 的形式: 通过 滚动「scroll」事件,然后去判…

浅析 Makefile

Makefile逻辑 Makefile就是将一系列的工作流串在一起自动执行,构成Makefile最基本的要素是目标、依赖、命令。也就是为了实现目标需要哪些依赖并执行什么样的命令。 target: dependences1 dependences2 ... command1 command2 ...其中,target表示要生…

Thinking--FastDom消除浏览器布局抖动

Thinking系列,旨在利用10分钟的时间传达一种可落地的编程思想。 对于大量操作 DOM 的场景,页面时常会出现卡顿现象,导致用户体验不佳。卡顿的原因是由于掉帧导致!! 掉帧 现在屏幕大部分的固定刷新频率为60Hz&#xf…

30个HTML+CSS前端开发案例(完结篇)

30个HTMLCSS前端开发案例(完结篇)flex弹性布局-今日头条首页热门视频栏代码实现效果flex弹性布局-微博热搜榜单代码实现效果grid网格布局-360图片展示代码实现效果综合实例-小米商城左侧二级菜单代码实现效果资源包flex弹性布局-今日头条首页热门视频栏 …

Pinia快速入门

Pinia学习1.做什么用的❓2.优势❓3. 介绍❓3.1、与vuex对比与 Vuex 3.x/4.x 的比较#4.实操使用💪版本须知4.1创建项目4.2运行项目4.3使用pinia安装全局引入挂载使用stategettersactions示例代码分析1.做什么用的❓ 与vuex的作用一致,用于做网页存储的Pin…

【STC15单片机】模拟I2C操作AT24C02数据读取【更新中】

目录 I2C时序结构 I2C代码 AT24C02代码(继承I2C底层代码) PCF8591 PCB上线的长短可能影响数据传输的时间,写I2C时序可能就要加一点延时 I2C时序结构 起始条件:SCL高电平期间,SDA从高电平切换到低电平终止条件&…

什么蓝牙耳机好用性价比高?性价比最高的蓝牙耳机品牌排行

无线耳机迅速成为了电子产品中的佼佼者,无论是日常通勤、办公或是休闲、娱乐,几乎都能看到戴耳机听音乐的人,细心的朋友应该能够发现,蓝牙耳机在这几年有了很大的进步,下面我就分享几款当前性价比最高的蓝牙耳机。 TO…

T38,数的递归

描述 输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空…

分账系统逻辑

一、说明 主体与业务关系方进行相关利益和支出的分配过程 使用场景: 在分销业务中,主营商户收到用户购买分销商品所支付的款项后,可以通过分账逻辑,与分销商进行佣金结算。在零售、餐饮等行业中,当销售人员完零售等…

小樽 C++指针—— (壹) 指针变量

(壹) 指针变量 一、指针的概念与定义 二、给指针变量p赋值 三、指针变量的的、-运算 四、无类型指针 五、多重指针 C (壹) 指针变量 小明想把从李华家借来的书——《CCF中学生计算机程序设计》还给李华,但李华不在家,于是把书放到书架第3层的最右边…

入门介绍对ChatGPT的应用程序接口API的访问<openai模块>

首先本人建议使用国内环境安装openai模块(这是我切换环境使用国外IP之后安装有问题的建议)pip install openai -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com安装好了之后,我们切换成科学上网,然后我们来到https://platform.openai…