深入理解Seata流程

本文深入探讨Seata,一个阿里开源的分布式事务解决方案,采用基于二阶段提交的AT模式。文章介绍了Seata的角色:TC、TM和RM,详细阐述了一阶段和二阶段提交的过程,包括事务的成功和失败情况。最后,总结了全局流程,并预告后续将解析源码。
部署运行你感兴趣的模型镜像

一:概述

   Seata是阿里开源的一个分布式事务解决方案,主要用的是基于二阶段提交思想的AT模式,通过注解实现非业务侵入。在看Seata源码前,首先要做的是理解它的原理。毕竟代码是基于原理具象化,而原理是代码的抽象化!

 

二:原理-二阶段提交

   二阶段提交有三个角色:

   1、TC(Transaction Coordinator),事务协调者,在源码中Seata Server充当事务协调者身份,维护全局锁状态,协调全局事务的提交与回滚。

   2、TM(Transaction Manager),事务管理者,业务代码中使用了全局事务注解的服务属于事务管理者,控制全局事务的范围,执行全局事务的提交与回滚。

   3、RM(Resource Manager),资源管理者,业务代码中被远程调用的部分,负责执行本地事务,和提交与回滚本地事务。

 

 

                                                                             一阶段执行流程

1、第一阶段如上图所有的RM执行自己的本地事务。在执行本地事务时,用大白话讲其实就是jdbc执行sql时,seata使用了数据源代理,在执行sql前,对sql进行解析,生成前置镜像sql,后置镜像sql,同时向undo log插入一条数据,方便后期万一出现异常做回滚,然后向TC注册分支事务,提交本地事务,最后向TC提交它的分支事务状态。

 

二阶段,二阶段分两种情况。

1、所有RM本地事务执行成功,此时TM会向TC发起全局事务提交,TC会立马释放全局锁然后异步驱动所有RM做分支事务的提交。

2、存在一个RM本地事务不成功,此时TM会向TC发起全局事务回滚,TC会驱动所有的RM做回滚操作,等待所有的RM回滚成功后然后再释放全局锁。

                                                           所有本地事务执行成功流程

这个阶段所有RM提交分支事务,其实就是删除Undo Log表里的记录,如果提交分支事务失败,并不会影响业务数据,可以手动的做Undo Log删除。

 

                                                          存在本地事务执行失败

这个阶段,所有的RM执行分支事务回滚,此时是去Undo Log表中查找数据,然后通过第一阶段生成的后置镜像sql,与数据进行校验,通过前置镜像sql做回滚,然后删除Undo Log日志。

 

三:总结

   最后上一张全局的流程图,可以看出来二阶段提交的思想其实还是很简单,下面的文章会对配置文件加载、角色之间RPC通信、RM、TM、TC、全局锁实现,六个主要部分源码进行解析。

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值