Seata-AT 如何保证分布式事务一致性
Seata 事务模式是什么?
1. Seata 对事务的定义
Seata 定义了全局事务的框架。
全局事务定义为若干分支事务的整体协调:
1. TM 向 TC 请求发起(Begin)、提交(Commit)、回滚(Rollback)全局事务。 2. TM 把代表全局事务的 XID 绑定到分支事务上。 3. RM 向 TC 注册,把分支事务关联到 XID 代表的全局事务中。 4. RM 把分支事务的执行结果上报给 TC。(可选) 5. TC 发送分支提交(Branch Commit)或分支回滚(Branch Rollback)命令给 RM。
Seata 的全局事务处理过程,分为两个阶段:
执行阶段 :执行分支事务,并保证执行结果满足是可回滚的(Rollbackable)和持久化的(Durable)。 完成阶段 :根据执行阶段结果形成的决议,应用通过 TM 发出的全局提交或回滚的请求给 TC, TC 命令 RM 驱动 分支事务 进行 Commit 或 Rollback。
Seata 的所谓事务模式是指:运行在 Seata 全局事务框架下的分支事务的行为模式。 准确地讲 ,应该叫作 分支事务模式 。
不同的事务模式区别在于分支事务使用不同的方式达到全局事务两个阶段的目标。 即,回答以下两个问题:
执行阶段 :如何执行并保证执行结果满足是可回滚的(Rollbackable)和持久化的(Durable)。 完成阶段 :收到 TC 的命令后,做到事务的回滚/提交。
2. 其它二阶段事务如何在 Seata 事务框架下运转
1)TCC 事务模式
2)XA 事务模式
AT 模式是什么?
1. 一阶段
-
解析 sql 并查询得到前镜像:select id, name, since from product where name = 'TXC'。 -
执行业务 sql。 -
查询执行后的数据作为后镜像:select id, name, since from product where id = 1。
2. 二阶段
AT 如何保证分布式事务一致性?
1. 写隔离
-
一阶段本地事务提交前,需要确保先拿到全局锁 。 -
拿不到全局锁,不能提交本地事务。 -
拿全局锁的尝试被限制在一定范围内,超出范围将放弃,并回滚本地事务,释放本地锁。
2. AT 模式二阶段处理
3. AT 模式与 Seata 支持的其它二阶段模式区别
-
数据锁定
-
死锁(协议阻塞)
-
性能
Seata 近期规划
-
控制台
-
Raft 集成
-
undoLog 压缩
钉钉群:识别下方二维码或直接搜索群号:32033786 进群
QQ 群:直接搜索 216012363 进群
总结