首页 > 其他分享 >【seata的AT模式】

【seata的AT模式】

时间:2024-11-08 11:46:43浏览次数:3  
标签:回滚 seata 事务 模式 提交 RM TC

seata的AT模式

seata是阿里开源的一个分布式事务解决方案

seata三大组件
TC: 事务协调器, 这是一个独立服务, 不包含业务代码, 负责全局事务统一调度, 比如维护全局事务状态、通知RM执行分支事务提交/回滚
TM: 事务管理器, 对应微服务中的聚合服务, 负责发起一个全局事务,或结束(提交/回滚)一个全局事务
RC: 资源管理器, 对应微服务中的某个微服务 (也可以理解为管理数据库链接的对象) 负责注册和执行某个事务分支

AT(auto-commit transaction)是seata支持的一种事务模式, 是基于2PC协议的, 通过代理数据源, 使本地事务全局事务能够统一管理

优点: 无侵入性, 不需要改造代码
缺点: 需要部署seata服务, 配置对应的数据库表
注意: 这个模式仅支持具有ACID特性的关系型数据库

==使用起来是非常简单的, 只需要引入@GlobalTransactional注解==

@GlobalTransactional
public void method(Long id, Long busId){
	//远程服务A
	Long aId = remoteServiceA.method(id, busId)
	//远程服务B
	remoteServiceB.method(aId);
}

两阶段主要干了啥事

一阶段

1、RM解析本地事务要执行的SQL 比如sql的类型是insert还是update、修改的表是哪个、where条件是那些等
2、RM得到解析结果后, 执行SQL,并生成变更前后快照, 步骤如下
进行一次查询, 生成变更前快照before image
执行sql语句
在查询一次, 生成变更后的快照after image
3、将更新前后快照和sql信息打包成一条回滚日志, 插入undo_log表
4、提交前去TC注册事务分支, 并申请本次需改记录需要的排他锁
5、将本次数据更新和上面的undo_log回滚日志一并提交
6、把本地事务执行结果上报给TC

二阶段

一阶段分支事务执行完后, TM向TC发起全局事务提交请求, TC会发起投票询问所有RM是否可以提交事务 。
提交: 所有RM分支事务都执行成功了, TC就释放本次全局事务上的锁, 异步调用RM清除undo_log
回滚: 有RM分支事务执行失败了或者网络故障了, TC就协调进行回滚, 步骤如下:

1、用XID和Branch ID查找相应的undo_log记录
2、对比当前数据和after image,
一致
说明提交成功, 用before image和sql信息执行回滚sql
不一致
说明提交失败, 需要比较before image和after image
这俩如果一致说明提交失败或已经回滚无需处理
这俩如果不一致说明有脏数据, 需要抛出异常人工处理
3、执行完回滚sql,提交事务,并将结果上报给TC

标签:回滚,seata,事务,模式,提交,RM,TC
From: https://blog.csdn.net/weixin_44541808/article/details/143560142

相关文章

  • 大模型-大模型-架构设计-6种设计模式-09
    目录1.路由分发架构模式2.代理架构模式3.基于缓存的微调架构模式4.面向目标的Agent架构模式5.Agent智能体组合架构模式6.双重安全架构设计模式架构设计模式已成为程序员的重要技能。然而,当我们转向大模型应用领域,情况可能会有所不同。面对新兴技术,比如:生成式AI,我们尚缺......
  • 内核调度抢占模式——voluntary和full对比
    一、背景在之前的内核调度子系统专栏里,我们已经把调度有关的如CFS调度/RT调度,调度时间片,调度时延,cfs唤醒抢占特性,这些基本概念和细节都讲了一遍。其实这些细节更多的是帮助我们理解调度系统是如何运作的,调度系统里的大部分参数其实我们都是不会去调整,或者说不敢去做大的调整的......
  • springboot策略设计模式最佳实践
    假设我们希望实现以下需求:支付方式(如支付宝、微信支付)可以动态切换。支付方式配置从配置文件中加载,或者支持在数据库中动态更新。配置文件或数据库中指定当前生效的支付方式。步骤1:配置文件定义支付方式我们可以在application.yml或application.properties中定义支......
  • 高性能的Reactor和Proactor模式学习
    0、引言在上一篇的笔记中,我们学习了操作系统提供的高效I/O管理技术,主要用于解决服务器在高并发场景下的资源浪费和瓶颈问题。但是在实际的代码编写中,要是我们都全部调用底层的I/O多路复用接口来编写网络程序这种面向过程的方式,必然会导致开发的效率不高。于是在这一章节,我们来学......
  • grafana对redis哨兵模式监控添加主库信息
    【环境说明】redis+sentinel哨兵模式+prometheus+grafana监控面板【要求】redis哨兵模式,需要查看主库节点信息,如果发生切换,能查到历史变化信息【配置操作】当前已经安装好三个redis数据库跟哨兵模式,并且都安装好了redis-exporter监控服务prometheus配置监控信息:prometheus.......
  • 更快更强 | HP15加热台新品78折!Max温度350度,200度只需60秒!30~150W功率可调,恒温加热和
    【新品优惠】正点原子HP15加热台更快更强!新品首发78折!最高温度可达350度,200度只需60秒!30~150W功率可调,恒温加热和回流焊双模式!HP15是正点原子全新推出的迷你恒温加热台,设备支持30~150W功率可调,在150W功率下从室温升至200度仅需60秒,可控温度高达350度,同时支持恒温加热和回流焊双......
  • 社交电商全球化:开源链动模式的引领与挑战
    摘要本文探讨了社交电商全球化的发展现状及挑战。介绍了开源链动2+1模式S2B2C商城小程序在社交电商走向世界过程中的重要作用,包括智能名片功能、链动模式与S2B2C商城模式优势及实际应用案例。分析了社交电商全球化面临的文化差异和法规限制等挑战,并提出了加强跨文化沟通......
  • Win11计算器 科学模式
    不再盲目按!带你了解Win11计算器各个按键的功用_缩写_三角函数_显示(22条消息)计算器上DEGRADGRAD是什么意思有什么区别?-知乎【MC】memoryclear的缩写,作用是删除记忆按键刚才保存的内容【MR】memoryrecall的缩写,作用是读取记忆按键存储的内容,用来显示按下记忆按键时的......
  • Vue2(路由守卫,路由器两种工作模式)
    一、路由守卫作用:对路由进行权限控制分类:全局守卫、独享守卫、组件内守卫1.全局守卫全局前置路由守卫每次路由切换之前被调用,初始化时被调用beforeEach接收三个参数:to,from,next路由元信息meta,用于存放一些自定义属性//src/router/index.js...routers:[{......
  • RabbitMQ如何保证发送的消息可靠(RabbitMQ的Confirm模式和2.Return模式)
    RabbitMQ如何保证发送的消息可靠(RabbitMQ的Confirm模式和2.Return模式)1、RabbitMQ消息Confirm模式(保证从生产者到交换机的消息可靠)1.1、Confirm模式简介1.2、具体代码实现1.2.1、application.yml开启确认模式1.2.2、生产者方式1:实现RabbitTemplate.ConfirmCallback生产......