当前位置: 首页 > news >正文

详细介绍Seata的AT模式分布式事务

一、在Seata的AT模式中,事务的提交也是分成了2阶段的


一阶段


1、RM 针对本次要执行的本地事务的SQL进行解析,得到SQL的类型、修改的表以及where条件等信息


2、RM 根据 SQL 解析的结果,先进行一次查询,根据查询结果生成相应的 before image 前置镜像(变更前数据快照)


3、执行SQL语句进行数据库变更


4、再查询一次变更后的记录,作为 after image 后置镜像(变更后的数据快照)


5、把 before/after image 以及业务 SQL 相关的信息组成一条回滚日志记录,插入到 undo log 表中


6、提交前,向 TC 注册分支,并申请表中本次需要修改的所有记录的排他锁


7、将业务数据的更新和前面生成的 undo log 一并提交


8、将本地事务的执行结果上报给 TC


二阶段


在一阶段,业务操作完成后,TMTC 发起提交请求。TC 会发起投票请求,询问所有的 RM是否可以提交事务


那么就会出现 2 种情况:


提交事务


如果所有的 RM 都同意提交,说明他们此时他们的本地事务都已经执行成功了,那么TC就可以释放该全局事务的所有锁,然后异步调用RM清理 undo log


回滚事务:如果任一 RM 投票否决或者出现故障,那么就要协调事务进行回滚


1、通过 XIDBranch ID 查找到相应的 undo log 记录


2、会拿当前数据先跟 afterImage 进行比较,如果一致,执行第三步


如果不一致,则在比较一下当前数据是否 和 beforeImage,如果一致性,说明未提交成功或者已经回滚了,则无需处理


如果不一致,那么说明有脏数据了,需要抛出异常,人工处理


3、根据 undo log 中的 beforeImage 和业务 SQL 的相关信息生成并执行回滚的语句


4、执行SQL并提交本地事务。并把本地事务的执行结果上报给 TC

http://www.zskr.cn/news/10618.html

相关文章:

  • VMware VeloCloud 漏洞分析:未授权远程代码执行全链条攻破
  • HJ9 提取不重复的整数
  • PRISMS Junior Varsity Training 20250919
  • 为你的数据选择合适的分布:8个实用的概率分布应用场景和选择指南
  • 台风呢
  • 架设moon节点
  • 字符串哈希模板
  • Markdown基本与阿法
  • isEmpty/isNotEmpty/isNotBlank/isBlank-isAnyEmpty/isNoneEmpty/isAnyBlank/isNoneBlank
  • 牛客周赛 Round 110 E,F题解
  • 安装 elasticsearch-9.1.4 - 集群 和 kibana-9.1.4
  • 实测对比:权威榜单之公众号排版Top 5(含效果对比与适用建议)
  • 原码补码反码
  • C#学习1
  • 02020406 EF Core基础06-EF Core生成的SQL
  • 软工第一次编程
  • 从软件开发公司到用户体验设计公司:如何实现全链路数字化产品服务
  • 日志|力扣|不同路径|最小路径和|动态规划|Javase|IO|File|Javaweb
  • 如何建立 5 μm 精度的视觉检测?不仅仅是相机的事
  • 函数 cmd_info_change_cur_model_group
  • 线程--相关概念、两种创建线程的方式
  • 恢复某个数据文件不适当,导致DataGuard无法open数据库
  • 洛谷B4040 [GESP202409 四级] 黑白方块 题解
  • 代码随想录算法训练营第七天 |第454题.四数相加II、383. 赎金信、第15题. 三数之和
  • 9月23号
  • 第一次个人编程作业-论文查重
  • 差分电压
  • 【ChipIntelli 系列】ASR部分——合成语言模型和多网络(多语种)切换
  • dots.llm1:小红书开源的 MoE 架构大语言模型 - 实践
  • 软工9.23