Seata原理 与 AT模式

 

  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 模式能够确保分布式事务的最终一致性,即使在网络分区、节点故障等复杂的分布式环境下也能保证数据的正确性和一致性。

 

posted @ 2024-05-22 21:41  学Java的`Bei  阅读(42)  评论(0编辑  收藏  举报