SpringCloudAlibaba Seata AT模式简单理解

一.seata简介

Seata官方文档http://seata.io/zh-cn/docs/overview/what-is-seata.html

TC (Transaction Coordinator) - 事务协调者

维护全局和分支事务的状态,驱动全局事务提交或回滚。

TM (Transaction Manager) - 事务管理器

定义全局事务的范围:开始全局事务、提交或回滚全局事务。

RM (Resource Manager) - 资源管理器

管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

阿里巴巴推荐使用AT模式

整体机制 

两阶段提交协议的演变:

  • 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。

  • 二阶段:

    • 提交异步化,非常快速地完成。
    • 回滚通过一阶段的回滚日志进行反向补偿。

具体实现过程:

一阶段

1.拦截得到业务sql,解析sql 的得到sql的类型(update/delete/...),表,条件等相关信息.

2.查询执行前的数据,生成前镜像

3.执行业务sql

4.查询操作后数据,生成后镜像

5.把前后镜像数据以及业务sql相关的信息组成一条回滚日志记录,插入到undo_log表

6.提交前,向TC注册分支,申请业务表的对应主键的记录的全局锁.

7.本地事务提交

8.将本地事务提交结果上报给TC

二阶段

 提交

1.收到TC的分支提交请求,把请求放入一个异步任务的队列中,马上返回提交成功的结果给TC  

2.异步任务阶段的分支提交请求将异步的和批量的删除相应的undo_log记录

 回滚

 

1.收到TC的回滚分支请求,开启一个本地事务

2.通过XID和BranchId 查找到对应的UNDO_LOG记录

3.数据校验,根据前后镜像与当前数据进行比较,如果匹配则继续回滚逻辑,不匹配,说明数据被别的事务修改过,这种情况需要根据配置策略来做处理.

4.根据UNDO_LOG中前镜像和业务sql生成回滚语句.

5.提交本地事务,并把事务的执行结果上报给TC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值