Seata事务管理---Seata简介

1 什么是Seata

       Seata是SpringCloud Alibaba开发出的一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 ATTCCSAGAXA 事务模式,为用户打造一站式的分布式解决方案。可以很好的解决分布式系统中事务的问题。

       Seata的主要特点是无侵入以及高性能。对业务无侵入是指减少技术架构上的微服务化所带来的分布式事务问题对业务的侵入,高性能则是减少分布式事务解决方案所带来的性能消耗。可以很好的帮助我们在开发中应对分布式事务所带来的问题,如:数据不一致等等。

       在Seata事务处理中主要有3个重要的角色,分别是:事务的协调者(TC),事务的管理者(TM)和事务的作业管理器(RM),并且在默认的AT事务模式中,还有一个全局的事务ID。

事务协调者(TC) :管理全局的分支事务的状态,用于全局性事务的提交和回滚。

事务管理者(TM) :用于开启、提交或回滚事务。

资源管理器(RM) :用于分支事务上的资源管理,向 TC 注册分支事务,上报分支事务的状态,接收 TC 的命令来提交或者回滚分支事务。
Seata事务管理---Seata简介_第1张图片
       如上图所示,左边的是我们分布式系统中所要涉及到分布式事务,右边则是事务的协调者(简单点理解就是:左边的是我们自己开发出来的分布式系统,里面包含一个个微服务,右边则是Seata事务协调者,它本身也是一个微服务,一个已经开发完成的微服务,我们只需要下载启动就好了,跟nacos一样)。在整个分布式系统中,一个事务要设计到多个微服务和数据库,TM事务管理器则是负责开启我们的事务,而RM则是每一个微服务系统中操作数据库资源的一个方法或者接口,TM和RM在对数据库和事务进行操作时,都有向TC汇报,由TC来统一安排。

2 事务模式(AT)

       AT模式的特点就是对业务无入侵式 ,整体机制分二阶段提交 ,对应我们分布式事务解决方案中的2PC(2阶段提交)方案。Seata中AT模式下两个阶段主要为:

分布式事务解决方案请参考: https://blog.csdn.net/I_am_fine_/article/details/124622313

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

二阶段: 二阶段主要有两种模式,分别是事务提交和事务回滚。事务提交主要是指一阶段没有出现错误或异常,事务可以提交;而事务回滚则是一阶段出现了异常,通过一阶段的回滚日志来对事务进行回滚。
Seata事务管理---Seata简介_第2张图片
执行流程(官方解释):

1.TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID;

2.XID 在微服务调用链路的上下文中传播;

3.RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖;

4.TM 向 TC 发起针对 XID 的全局提交或回滚决议;

5.TC 调度 XID 下管辖的全部分支事务完成提交或回滚请求。

简单理解:

1.事务管理者(TM)向事务协调者(TC)申请开启一个全局事务,这时候TC会会生成一个全局的事务ID(XID)给TM

2.TM拿到这个XID后,在整个事务的执行过程中上下传播

3.在事务执行过程中,资源管理者(RM)开始执行相关的事务,并向TC注册,这时候也会生成一个个相对应的ID,TC会将这些ID归纳在XID下进行管理(注意,这个时候虽然RM执行了事务,但还没有提交的)

4.当所有的RM执行完相关的事务后,TM会向TC发起针对全局事务的一个提交或者回滚

5.这时候TC会调度XID下的所有ID进行一个统一的提交或者回滚

你可能感兴趣的:(SpringCloud,Alibaba篇,java,分布式,spring,cloud,mysql)