事务、分布式事务以及seata

news2024/11/24 17:48:27

事务

事务就是用户定义的一系列数据库操作,这些操作可以视为一个完成的逻辑处理工作单元,要么全部执行,要么全部不执行,是不可分割的工作单元。

事务的四个特效ACID

  • Atomic 原子性,原子性是指事务必须是一个原子的操作序列单元。事务中包含的各项操作在一次执行过程中,只允许出现两种状态之一,要么都成功,要么都失败;
  • Consistency 一致性,事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处以一致性状态;
  • Isolation 隔离性,隔离性是指在并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰。也就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间;
  • Druation 持久性,事物的持续性也称持久性,是指一个事务一旦提交,它对数据库的改变将是永久性的,因为数据刷进了物理磁盘了,其他操作将不会对它产生任何影响。

事务的并发问题

  • 脏读,在事务A修改数据之后提交数据之前,这时另一个事务B来读取数据,如果不加控制,事务B读取到A修改过数据,之后A又对数据做了修改再提交,则B读到的数据是脏数据,此过程称为脏读Dirty Read。;
    在这里插入图片描述
  • 不可重复读,一个事务内在读取某些数据后的某个时间,再次读取以前读过的数据,却发现其读出的数据已经发生了变更、或者某些记录已经被删除了;
    在这里插入图片描述
  • 幻读,事务A在按查询条件读取某个范围的记录时,事务B又在该范围内插入了新的满足条件的记录,当事务A再次按条件查询记录时,会产生新的满足条件的记录(幻行 Phantom Row)
    在这里插入图片描述

事务的隔离级别

  • 读未提交(read uncommitted),一个事务还没有提交时,它做的变更就能被别的事务看到;
  • 读提交(read committed),一个事物提交之后,它做的变更才会被其他事务看到;
  • 可重复读(repeatable read),一个事物执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。未提交变更对其他事务也是不可见的。
  • 串行化(serializable),强制事务串行执行,对于同一行记录,“写” 会加 “写锁”,“读” 会加 “读锁”,当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。这样多个事务互不干扰,不会出现并发一致性问题;在此级别下,事务串行执行。可以避免脏读、不可重复读、幻读等读现象。但是效率低下,耗费数据库性能,不推荐使用。

针对不同的隔离级别,并发事务时可能发生的问题也会不同:
在这里插入图片描述

分布式事务

分布式事务是一种全局事务,它由一连串的分支事务构成,这些分支事务就是我们下面提到的本地事务。
在这里插入图片描述

本地事务
在一个单体架构中,对于下单场景,假设有库存订单和账号三个模块,三个模块都用一个数据源,所有事务也有这个本地事务管理。如图所示:
单体架构的本地事务

在微服务中情况变得复杂
三个模块变成三个service,每个service有自己专门的数据源。每个本地事务都只能保证各自模块的数据一致性,那么整体的一致性该怎么解决?
微服务下的分布式事务
分布式事务的三个角色

  • TC 事务协调器,它是事务的协调者(这里指的是 Seata 服务器),主要负责维护全局事务和分支事务的状态,驱动全局事务提交或回滚。
  • TM 事务管理器,它是事务的发起者,负责定义全局事务的范围,并根据 TC 维护的全局事务和分支事务状态,做出开始事务、提交事务、回滚事务的决议。
  • RM 资源管理器,它是资源的管理者(这里可以将其理解为各服务使用的数据库)。它负责管理分支事务上的资源,向 TC 注册分支事务,汇报分支事务状态,驱动分支事务的提交或回滚。
    在这里插入图片描述

seata 简介

seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。seata 继承了分布式事务中的核心思想,它也有TC,TM,RM 三种角色。附上seata源码和官方文档:链接

seata 生命周期

  • TM asks TC to begin a new global transaction. TC generates an XID representing the global transaction.TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID
  • XID is propagated through microservices’ invoke chain.XID 在微服务调用链路的上下文中传播。
  • RM registers local transaction as a branch of the corresponding global transaction of XID to TC.RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖。
  • TM asks TC for committing or rollbacking the corresponding global transaction of XID.TM 向 TC 发起针对 XID 的全局提交或回滚决议。
  • TC drives all branch transactions under the corresponding global transaction of XID to finish branch committing or rollbacking.TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。
    在这里插入图片描述

seata 四种事务模式–待续

  • XA
  • AT
  • TCC
  • SAGA

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

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

相关文章

手摸手教你Vite+Vue3项目初始化及开源部署到GItee

项目初始化 本片文章主要记录项目的环境,项目搭建。 在开始本次学习中,鉴于你有前端三件套和vue的知识基础。 文档创建于2023年5月20日,大家都去过情人节了~我在肝代码! 环境的搭建 node版本使用18.16.0。 目前(202…

重磅!超星未来发布全新NOVA-ADCU智能驾驶参考方案

近日,超星未来重磅发布基于惊蛰R1芯片面向多场景打造的全新NOVA-ADCU智能驾驶参考方案,并亮相科技成果展。方案覆盖高阶行泊一体、轻量级行泊一体、双目智驾、路侧感知等场景,携手产业链上下游伙伴构建开放共赢的智能驾驶新生态。 以智能驾驶…

一种新的算法模型,填补微生物组纵向研究数据中的缺失值

谷禾健康 微生物组的纵向研究是一种长期跟踪微生物组变化的研究方法。在这类研究中,样本从同一人群或个人中多次采集,通过检测样本中微生物群落丰度的变化(如不同菌群的比例和种类),来了解微生物组随时间的变化趋势和特…

【LeetCode225.用队列实现栈】你足够了解栈和队列吗?

​ 你好,欢迎来到我的博客!作为一名程序员,我经常刷LeetCode题目来提升自己的编程能力。在我的博客里,我会分享一些我自己做过的题目和解题思路,希望能够帮助到大家。今天,我想和大家分享一道挑战性较高的题…

ApplicationRunner使用

本文来说下CommandLineRunner和ApplicationRunner的使用 文章目录 ApplicationRunner使用示例程序结果 CommandLineRunner使用示例程序结果 ApplicationListener触发时机使用实例程序结果注意问题 ApplicationRunner 使用起来很简单,只需要实现CommandLineRunner或者…

手机也可以搭建个人博客?安卓Termux+Hexo搭建属于你自己的博客网站【cpolar实现公网访问】

文章目录 1. 安装 Hexo2. 安装cpolar内网穿透3. 公网远程访问4. 固定公网地址 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并…

领英Linkedin开发客户技巧分享

近期领英也是发布公告说2023年8月9号linkedin将关闭领英职场,我看很多有在用领英的小伙伴在问,这里回复一下,国内职场跟咱们做外贸使用linkedin国际版没啥太大关系,大可放心,要说影响的话肯定是有一些的,以…

数据库提权

数据库提权的前提就是得到数据库的账号密码。在webshell或本地进行提权。 数据库提权分为四步: 1.服务探针,探测出数据库的类型(端口扫描等) 2.信息搜集,就是获取到数据库的账号密码。权限要高。 读取数据库密码的…

SUSE系统修改静态IP

Suse系统使用yast管理配置,默认创建虚拟机,是使用DHCP获取动态IP的,这样非常不利于管理。因此,最好使用静态IP。 当前操作系统: eoisu01:~> uname -a Linux su01 6.3.2-1-default #1 SMP PREEMPT_DYNAMIC Mon May …

【服务器数据恢复】断电导致raid6磁盘扇区损坏的数据恢复案例

服务器数据恢复环境: 某品牌存储,12块SAS硬盘组建RAID6磁盘阵列,划分一个卷,分配给几台Vmware ESXI主机做共享存储。 卷中存放了大量的Windows虚拟机,虚拟机通过模板创建的,系统盘大小一致,数据…

苹果营收及增速分析,2022年营收达2055亿美元,增速为7%

众所周知,2007年1月,被乔布斯称为“苹果将彻底改变手机”的第一代iPhone正式发布,并于当年6月底上市销售。上市后,其受欢迎程度令人咋舌,销量一骑绝尘。短短5年内,其市场份额也由最初的3%升至18%&#xff0…

学术科研专用ChatGPT来了!

自从ChatGPT发布之后,各路大神都开始研究如何把它加入到自己的「科研工作流」当中。 比如「数学天才」陶哲轩就表示,他已经将ChatGPT纳入了自己的工作流程。 最近,一位网友也分享了自己的「ChatGPT 学术优化」项目。 没想到,在Gi…

六、数据仓库详细介绍(ETL)工具篇上

0x00 前言 在上篇,我们介绍过,ETL 的实现方式可以分为三种类型:完全依赖数据库、自研、第三方 ETL 工具。 我们需要根据实际情况去选择合适的方案。对于相对简单的 ETL 系统我们可以完全依赖数据库或者内部开发一个小型的的流程控制、调度工…

燕千云助力ITSM知识沉淀与复用

数字化时代IT服务知识沉淀痛点 随着企业数字化进程的推进,企业需要购入更多的智能化、数字化设备及软件,高效生产的同时,问题也层出不穷。而IT服务管理,可以为企业减少密集型的资源消耗,帮助企业以更高效、更流程化的…

28K入职字节的那天,我哭了····

先说一下自己的个人情况,计算机专业,18年本科毕业,一毕业就进入了“阿里”测试岗(进去才知道是接了个阿里外包项目,可是刚毕业谁知道什么外包不外包的)。 更悲催的是:刚入职因为家里出现一些变故,没有精力…

小电源,大讲究

高速先生成员--姜杰 成功的电源设计千篇一律,失败的直流压降各有各的秘密。 对于电源的直流压降,高速先生之前分享过一些低电压、大电流的电源案例,其实,对于种类繁多的小电源,由于电流相对较小,设计过程中…

玩了一下Midjourney很酷的设计工具

阿酷tony / 原创内容 / 2023-5-23 Midjourney是一款2022年3月面世的AI绘画工具,只要输入想到的文字,就能通过人工智能产出相对应的图片,耗时只有大约一分钟。 图 / Midjourney效果 图 / Midjourney效果 图 / Midjourney效果 图 / Midjourne…

基于copy命令的图片文本隐写(Misc出题)

这是一张普通的图片 我们使用010editor打开,很正常的jpg图片 这里顺便说一下,jpg图片会高亮,png则不会,下图则是一张png的图片 新建一个TXT文本,里面是我们想要给出的提示内容 在cmd里面切换到这些文件所在目录 copy命…

详细讲解u-boot之网络移植与调试

目录 一、前章回顾 二、硬件原理图检查 1.确认硬件原理图的fec对应的phy地址 2.修改网卡fec1的phy地址 3.网络初始化检查 4.fec部分管脚确认 5.检查是否存在多设备管脚复用 6.使用默认ENET2 三、编译烧写,下载验证 1.设置网络环境变量 2.使用软件配置&…

Http协议网络读卡器Request获取刷卡数据Response回应驱动显示

三种提交方式可自由设置 RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) HttpReader.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebCont…