Seata 是一个开源的分布式事务解决方案,它提供了简单高效的分布式事务服务,以确保分布式环境下的数据一致性。Seata 的 AT 模式(Automatic Transaction)是其中一种事务模式,它通过两阶段提交(2PC)来实现分布式事务管理。 Seata 的原理和 AT 模式的详细讲解:
1. Seata 组件
Seata 包含三个核心组件:
(1) TM(Transaction Manager,事务管理器):负责定义全局事务的范围,包括全局事务的开始、提交和回滚。
(2) RM(Resource Manager,资源管理器):管理分支事务,控制对实际数据资源的访问。它负责与 TC 通信,注册分支事务,并执行分支事务的提交或回滚。
(3) TC(Transaction Coordinator,事务协调器):维护全局和分支事务的状态,协调并驱动全局事务的提交或回滚。
2. Seata AT 模式
AT 模式使用两阶段提交协议来保证分布式事务的一致性。具体流程如下:
第一阶段:准备阶段(Prepare Phase)
-
- 事务开始:由 TM 向 TC 发起一个全局事务的开始请求。
- 业务操作:业务操作在各个参与的微服务中执行,RM 会在执行 SQL 操作之前拦截并记录锁定的行和操作前后的镜像(before image 和 after image)。这些操作暂时未提交。
- 分支事务注册:每个 RM 在执行完本地事务后,向 TC 注册分支事务,TC 会记录这些分支事务的状态。
第二阶段:提交或回滚阶段(Commit or Rollback Phase)
在第二阶段,TM 会根据业务操作的结果决定全局事务的提交或回滚:
-
- 无异常提交:
全局提交:TM 向 TC 发送全局提交请求。
分支提交:TC 通知所有 RM 提交分支事务,RM 提交之前记录的 after image 并释放锁定资源。
结果上报:RM 将提交结果上报给 TC,TC 最终确认全局事务提交成功。
-
- 异常回滚:
全局回滚:如果任一分支事务失败或超时,TM 向 TC 发送全局回滚请求。
分支回滚:TC 通知所有 RM 回滚分支事务,RM 使用记录的 before image 回滚本地事务,并释放锁定资源。
结果上报:RM 将回滚结果上报给 TC,TC 最终确认全局事务回滚成功。
3. Seata AT 模式关键概念
锁定资源:RM 在第一阶段会锁定涉及到的资源(如数据库行),以防止其他事务并发修改这些资源。
镜像(image):在执行事务操作时,RM 会记录操作前(before image)和操作后(after image)的数据镜像,用于回滚操作。
事务上下文:TM 会在全局事务范围内维护事务上下文,包括事务 ID 和相关分支事务的信息。
4. 工作原理总结
事务协调器(TC):TC 是 Seata 的核心组件,负责全局事务的管理和协调。它记录并维护每个全局事务的状态,并协调各分支事务的提交或回滚。
事务管理器(TM):TM 定义事务的边界,管理全局事务的生命周期。它通知 TC 开始、提交或回滚全局事务。
资源管理器(RM):RM 管理分支事务,实际执行数据库操作。它向 TC 注册分支事务,并根据 TC 的指令提交或回滚事务。
通过如上机制,Seata AT 模式能够确保分布式事务的最终一致性,即使在网络分区、节点故障等复杂的分布式环境下也能保证数据的正确性和一致性。
标签:回滚,Seata,事务,模式,提交,RM,原理,全局,TC From: https://www.cnblogs.com/warmNest-llb/p/18207191