4-Alibaba-Seata(个人理解事务原理)学习笔记2020.10.28

4-Alibaba-Seata(个人事务原理)学习笔记2020.10.28

前言: (官网工作流程)

在整个架构中, 重点的概念就是: TC(事务协调者, 相当于Seata的服务器)、 TM(事务管理者, 控制全局事务的提交与回滚的, 相当与电脑中的鼠标, 项目里面就是标记了@GlobalTransactional)、 RM(本地资源, 相当项目里面的本地事务操作数据库, 参与全局事务者)。

工作流程

TM也就是标记了@GlobalTransactional注解的, 向TC申请开启一个全局事务, 生成一个XID, XID通过微服务调用链传播, 然后去调用其他微服务的本地事务的时候, 本地事务会根据XIDTC进行注册参与相应全局事务与报告事务状态给TC, 然后执行完毕TM结束分布式事务通知TC执行提交或者回滚分布式事务操作, TC决定好操作后通知所有分支RM进行提交或者回滚操作, 流程到此就结束。

工作机制又分为2个阶段

一阶段:

  1. 标记注解的向TC申请开启全局事务, TC会往配置的数据库表里面进行插入一条全局事务记录表, 然后去执行分支事务操作数据库,
  2. 而分支事务通过XID会向TC申请注册加入全局事务, TC会将分支事务记录插入到分支表中, 并上锁此表, 也就是在锁表上插入一条相关数据,
  3. 在执行分支事务前会解析Sql 保存未修改的前镜像sql , 然后执行修改, 然后通过前置镜像ID去查询定位到修改后的结果, 保存为后置镜像, 在得到前后镜像数据后会将镜像数据与sql组合成为一条回滚日志记录插入到对应库里的undo_log表中
  4. 在提交前会向TC申请锁表中的对应数据的全局锁 (分支事务没有全局锁无法提交事务)
  5. 申请得到后, 会将业务数据的更新与插入回滚日志的操作一并提交。
  6. 将本地事务的提交结果上报给TC

二阶段:

没有异常的情况下:
  1. TC接收到分支的提交请求, 会将请求放入一个异步任务队列中, 并马上返回成功结果给TC
  2. 异步任务队列会将分支请求生成的日志表记录批量删除。
出现异常需要回滚的情况:
  1. TC接收到分支出现异常提交的回滚请求, 会通过XID与Branch去找对应的回滚日志记录表中的数据获取到
  2. 然后进行数据校验, 避免脏读, 也就上通过修改后置镜像的数据与当前查询到的数据进行对比, 如果一样则生成前置镜像的回滚数据与sql进行执行回滚语句, 如果不一样则需要人工处理。
  3. 将回滚操作的事务结果上报给TC

1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懵懵懂懂程序员

如果节省了你的时间, 请鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值