返回

Seata AT模式下的客户端解析

后端

Seata 客户端启动

当Seata客户端启动时,它将执行以下步骤:

  1. 加载Seata客户端配置文件,其中包含了Seata服务器的地址和端口号等信息。
  2. 创建一个Seata客户端实例。
  3. 将Seata客户端实例注册到Seata服务器上。
  4. 启动Seata客户端的定时任务,用于定期向Seata服务器发送心跳包。

TM管理全局事务

TM(Transaction Manager)是Seata中的全局事务管理器,它负责协调分布式事务的各个参与者,并确保分布式事务的原子性、一致性、隔离性和持久性。TM在AT模式下的工作流程如下:

  1. 应用向TM发起一个全局事务请求。
  2. TM为全局事务分配一个全局事务ID。
  3. TM将全局事务ID传播给所有参与分布式事务的资源管理器(RM)。
  4. RM在收到全局事务ID后,会将该ID存储在本地,并开始执行分布式事务的本地操作。
  5. 当RM执行完本地操作后,它会向TM发送一个提交或回滚请求。
  6. TM在收到所有RM的提交或回滚请求后,会对分布式事务进行提交或回滚。

RM一阶段和二阶段

RM(Resource Manager)是Seata中的资源管理器,它负责管理分布式事务中的本地资源,如数据库、消息队列等。RM在AT模式下的工作流程如下:

一阶段

  1. RM收到TM发来的全局事务ID后,会将该ID存储在本地,并开始执行分布式事务的本地操作。
  2. RM在执行本地操作之前,会先向TM发送一个预提交请求。
  3. TM在收到RM的预提交请求后,会将分布式事务的状态设置为“已预提交”。

二阶段

  1. 当TM决定提交分布式事务时,它会向所有参与分布式事务的RM发送一个提交请求。
  2. RM在收到TM的提交请求后,会执行本地事务的提交操作。
  3. 当RM执行完本地事务的提交操作后,它会向TM发送一个提交完成通知。
  4. TM在收到所有RM的提交完成通知后,会将分布式事务的状态设置为“已提交”。

GlobalLock处理脏读脏写

GlobalLock是Seata中的全局锁管理器,它负责管理分布式事务中的全局锁。GlobalLock在AT模式下的工作流程如下:

  1. 当应用在执行分布式事务时,如果需要对某个资源加锁,则会向GlobalLock发送一个加锁请求。
  2. GlobalLock在收到加锁请求后,会将锁信息存储在分布式存储中,并返回一个锁ID给应用。
  3. 应用在收到锁ID后,会将锁ID存储在本地,并继续执行分布式事务的本地操作。
  4. 当RM执行完本地操作后,它会向GlobalLock发送一个解锁请求。
  5. GlobalLock在收到解锁请求后,会将锁信息从分布式存储中删除。

GlobalLock通过这种方式来防止分布式事务中的脏读和脏写问题。