Seata的AT模式

详细架构和流程

Seata中的基本概念:

  1. TC(transaction coordinator) 事务协调者
    维护全局和分支事务的状态,驱动全局事务提交或回滚(TM之间的协调者)。
  2. TM(transaction manager) 事务管理器
    定义全局事务的范围:开始全局事务,提交或回滚全局事务。
  3. RM(transaction manager)资源管理器
    管理分支事务处理得的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
    架构图
  • TM :业务模块中全局事务的开启者
    • 向TC开启一个全局事务
    • 调用其他微服务
  • RM: 业务模块执行者中,包含RM部分,负责向TC汇报事务执行状态
    • 执行本地事务
    • 向TC注册分支事务,并提交本地执行结果
  • TM:结束对微服务的调用,通知TC,全局事务执行完毕,事务一阶段结束
  • TC: 汇报各个分支事务执行结果,决定分布式事务是提交还是回滚
  • TC通知所有RM 提交/回滚资源,事务二阶段结束。

一阶段:

  • TM开启全局事务,并向TC声明全局事务,包括全局事务XID信息
  • TM所在服务调用其他微服务
  • 微服务,主要由RM执行
    • 查询before_image
    • 执行本地事务
    • 查询after_image
    • 生成undo_log并写入数据库
    • 向TC注册分支事务,告知事务执行结果
    • 获取全局锁(阻止其他全局事务并发修改当前数据)
    • 释放本地锁(不影响其他业务对数据的操作)
  • 待所有业务执行完毕,事务发起者(TM)会尝试向TC提交全局事务。

二阶段:

  • TC统计分支事务执行情况, 根据结果判断下一步行为
    • 分支都成功:通知分支事务,提交事务
    • 有分支执行失败:通知执行成功的分支事务,回滚数据
  • 分支事务的RM
    • 提交事务:直接清空before_image和after_image信息,释放全局锁
    • 回滚事务:
      • 校验after_image, 判断是否有脏写
      • 如果没有脏写, 回滚数据到before_image ,清除before_image和after_image
      • 如果有脏写,请求人工介入
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值