阿里巴巴Seata分布式事务解决方案

news2024/11/23 3:12:30

Seata是什么

Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。

当开发框架为spring boot或者SSM,都可以使用Seata进行开发。

分布式事务是什么

在大型架构中,一般会把一个应用系统,从功能上划分为多个子服务或子项目。如上图所示,商城网站,当用户新增订单时:订单服务会新增一条订单记录,会员服务会更新用户的会员积分,库存服务会减少库存表的数量。

这三个操作,需要同时提交,或者同时回滚。这样的应用场景下,分布式事务就会产生了,这也是分布式事务所要做的操作。

事务协调者是什么

事务协调者的职责是向各个子服务下达命令,提交或者回滚事务。

当有一个请求到来时,事务协调者会通知各个子服务,开启事务,具体来说就是订单服务向数据库订单表新增一条订单记录。会员服务更新人员的会员积分。库存服务更新库存的余量。

操作完毕后,此时各个服务的事务都是未提交的状态。那在什么时候会进行事务的提交呢?当所有的子服务都把自己的事情做好了之后,向事务协调者回复说我已经操作完毕。当事务协调者收到所有事物反馈的信息后,确保都各个服务都已经处理完毕,然后再向各个子服务发送一个请求,命令各个子服务提交事务,到此,完成了各个服务数据写入操作。

分布式事务,三个重要角色

事务管理器(TM):决定什么时候全局提交/回滚(司令官)

事务协调者(TC):负责通知命令的中间件Seata-Server(传令官)

资源管理器(RM):做具体事情的工具人(大头兵)

三个角色相互配合,完成分布式事务的管理,具体过程如下:

在上面的示例中,商城应用就是TM,

新增订单操作,需要做三件事情,创建订单、增加积分、减少库存,使用Seata提供的@GlobalTransactional注解就可以将命令传达给TC,也就是我们自行安装的Seata服务,当TC接收到要开启全局事务的命令后,开始往下传达,传达给各个子服务,也就是RM。

对上图的示例伪代码进行说明,以订单服务为例,使用@Transactional注解,就会注册分支事务并开启本地事务。向订单表中新增一条订单记录,并提交本地事务,然后将完成的消息告诉TC。

此时TM得知三个服务均已处理完毕,会判断三个服务是否都正常执行完毕,如果都正常执行完毕,则下达全局提交的命令给TC,如果有任何一个或多个执行失败,则下达全局回归的命令给TC。

数据提交和回滚

在上一步提到的向订单表中新增一条订单记录,并提交事务。那么问题来了,如果其他的服务没有成功,Seata AT模式下如何实现数据整体回滚呢?

以上图为例,订单表在新增订单后提交事务后。Seata会往UNDO_LOG表(回滚表)插入一条逆向SQL。也就是删除记录的SQL。如果要执行回滚操作,实际上就是执行了这条逆向SQL。

积分表和库存表也是一样的逻辑。

数据脏读和脏写

如何避免并发场景的数据脏读和脏写?Seata使用了分布式锁的方式来解决这个问题。

如上图所示,同时对ID=1的数据执行更新操作,当tx1执行了更新,但未提交事务前,tx2一直处于等待状态。只有当tx1提交后,tx2才能更新。

上图是官方对脏读和脏写的处理方案。

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

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

相关文章

Cuebric:用AI重新定义3D创作的未来

一、简介 Cuebric 是一家成立于2022年夏天的好莱坞创新公司,致力于为电影、电视、游戏和时尚等行业提供先进的AI多模态SaaS平台。自2024年1月正式推出以来,Cuebric 已经在市场上获得了广泛的认可和积极的反馈。目前,该平台正处于1.0版本的beta测试阶段,已募集约50万美元的…

【Spring IoCDI】IoC容器,IoC注解,Bean的使用

【Spring核心思想:IoC】 spring是一个开源框架,支持广泛的应用场景,简而言之:Spring是包含了众多工具方法的IoC容器 【IoC】 IoC的意思是「控制反转」,也就是说Spring是一个“控制反转”的容器 通用程序的实现代码,类的创建顺序…

Android笔记(三十一):Deeplink失效问题

背景 通过deeplink启动应用之后,没关闭应用的情况下,再次使用deeplink会失效的问题,是系统bug导致的。此bug仅在某些设备(Nexus 5X)上重现,launchMode并且仅当应用程序最初通过深层链接启动并再次通过深层…

深入理解Transformer中的位置编码

1 位置编码的作用 由于注意力的作用机制,不论输入序列的顺序如何,输出结果都是一样的。 也就是丢失了位置信息。 但是对于语言模型, 我们都知道顺序是很重要的, 所以需要对输入序列额外注入位置信息。 2 位置编码方式 Transfor…

Ansible 部署应用

Ansible Ansible 是基于 Python 开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能的自动化运维管理工具。默认通过 SSH 协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动…

根据问题现象、用户操作场景及日志打印去排查C++软件问题,必要时尝试去复现问题

目录 1、概述 2、通过现有信息无法定位问题时,则需要尝试去复现问题 3、非崩溃问题与崩溃问题的一般排查思路 3.1、非崩溃问题的排查思路 3.2、崩溃问题的排查思路 4、难以复现问题的可能原因总结 4.1、问题难以复现,可能和某种特殊的业务场景或操…

STL——string(2)

博客ID:LanFuRenC系列专栏:C语言重点部分 C语言注意点 C基础 Linux 数据结构 C注意点 今日好题 声明等级:黑色->蓝色->红色 欢迎新粉加入,会一直努力提供更优质的编程博客,希望大家三连支持一下啦 目录 1) …

Spark的集群环境部署

一、Standalone集群 1.1、架构 架构:普通分布式主从架构 主:Master:管理节点:管理从节点、接客、资源管理和任务 调度,等同于YARN中的ResourceManager 从:Worker:计算节点:负责利…

【大数据学习 | kafka】kafka的数据存储结构

以上是kafka的数据的存储方式。 这些数据可以在服务器集群上对应的文件夹中查看到。 [hexuanhadoop106 __consumer_offsets-0]$ ll 总用量 8 -rw-rw-r--. 1 hexuan hexuan 10485760 10月 28 22:21 00000000000000000000.index -rw-rw-r--. 1 hexuan hexuan 0 10月 28 …

【Leecode】Leecode刷题之路第40天之组合总和II

题目出处 40-组合总和II-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 40-组合总和II-官方解法 方法1:回溯 思路: 代码示例:(Java&…

网络编程入门——网络原理初识

一、网络发展史 1.1 独立模式 即计算机之间相互独立,互不连通的。 1.2 网络互联 即将多台计算机连接在一起,完成数据共享。 数据共享本质是⽹络数据传输,即计算机之间通过⽹络来传输数据,也称为⽹络通信。 根据网络互联规模的不…

关于爬虫需要了解的基础知识 (一、 http协议)

声明 文章仅供学习与交流!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关! 一、何为爬虫 爬虫(Crawler)是一种按照既定规则,在网络上自动爬取信息的程序或脚本,也称为网际网…

VidPanos:从随手拍摄的平移视频生成全景视频

在当今数字化时代,视频拍摄已经成为人们记录生活和分享经历的重要方式。然而,普通手机拍摄的视频往往受到视角的限制,无法完整地展现一个广阔的场景。今天,我们要介绍的 VidPanos 技术,为解决这个问题提供了一种创新的方法。 VidPanos 是由来自华盛顿大学、谷歌 DeepMind…

【05】如何解决tomcat命令提示符控制台乱码问题

Web项目开发过程中,直接在命令提示符窗口中通过输入startup.bat命令运行tomcat,在新弹出的tomcat命令提示符窗口中输出的中文是乱码问题的处理。 如何解决tomcat命令提示符控制台乱码问题 文章目录 如何解决tomcat命令提示符控制台乱码问题1.解决问题思路…

02- 模块化编程-003 LCD1602液晶显示时间与日期

1、液晶显示电路 2、电路原理简介 1. 电路组件与功能 PIC单片机(PIC16F887): 主控制器,负责处理输入输出。 LCD显示屏(LM061): 驱动数码管显示器,以显示时间和日期信息。 支持多个段…

conda下jupyterlab安装问题以及交互绘图问题记录

安装 1. 直接conda install jupyterlab就好,只要在base环境下安装就行,可以在任意环境下执行jupyter lab启动。 2. 打开jupyter lab后显示Could not determine jupyterlab build status without nodejs,可以执行conda install nodejs安装no…

华为OD机试 - 预订酒店(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…

LM Head weights;ChatGPT-3词汇量:175,000;llama7b 词汇量,词嵌入维度:4096

目录 LM Head weights ChatGPT-3词汇量:175,000 llama7b 词汇量 词汇量:32000 max_position_embeddings: 4096 LM Head weights ChatGPT-3词汇量:175,000 ChatGPT-4 确切的词向量种类数量公开信息。但可以根据一些语言模型的相关知识进行推测分析。 一般来说,语言模…

极简实现酷炫动效:Flutter隐式动画指南第二篇之一些酷炫的隐式动画效果

目录 前言 1.弹性放大按钮效果 2.旋转和缩放组合动画 3.颜色渐变背景动画 4.缩放进出效果 前言 在上一篇文章中,我们介绍了Flutter中的隐式动画的一些相关知识,在这篇文章中,我们可以结合多个隐式动画 Widget 在 Flutter 中创建一些酷炫的视觉效果&…

【ONLYOFFICE 文档 8.2 版本深度测评】功能革新与用户体验的双重飞跃

引言 在数字化办公的浪潮中,ONLYOFFICE 文档以其强大的在线协作功能和全面的办公套件解决方案,赢得了全球用户的青睐。随着 8.2 版本的发布,ONLYOFFICE 再次证明了其在办公软件领域的创新能力和技术实力。 一.协作编辑 PDF:团队合…