返回
Seata AT模式下的客户端解析
后端
2023-09-10 20:32:02
Seata 客户端启动
当Seata客户端启动时,它将执行以下步骤:
- 加载Seata客户端配置文件,其中包含了Seata服务器的地址和端口号等信息。
- 创建一个Seata客户端实例。
- 将Seata客户端实例注册到Seata服务器上。
- 启动Seata客户端的定时任务,用于定期向Seata服务器发送心跳包。
TM管理全局事务
TM(Transaction Manager)是Seata中的全局事务管理器,它负责协调分布式事务的各个参与者,并确保分布式事务的原子性、一致性、隔离性和持久性。TM在AT模式下的工作流程如下:
- 应用向TM发起一个全局事务请求。
- TM为全局事务分配一个全局事务ID。
- TM将全局事务ID传播给所有参与分布式事务的资源管理器(RM)。
- RM在收到全局事务ID后,会将该ID存储在本地,并开始执行分布式事务的本地操作。
- 当RM执行完本地操作后,它会向TM发送一个提交或回滚请求。
- TM在收到所有RM的提交或回滚请求后,会对分布式事务进行提交或回滚。
RM一阶段和二阶段
RM(Resource Manager)是Seata中的资源管理器,它负责管理分布式事务中的本地资源,如数据库、消息队列等。RM在AT模式下的工作流程如下:
一阶段
- RM收到TM发来的全局事务ID后,会将该ID存储在本地,并开始执行分布式事务的本地操作。
- RM在执行本地操作之前,会先向TM发送一个预提交请求。
- TM在收到RM的预提交请求后,会将分布式事务的状态设置为“已预提交”。
二阶段
- 当TM决定提交分布式事务时,它会向所有参与分布式事务的RM发送一个提交请求。
- RM在收到TM的提交请求后,会执行本地事务的提交操作。
- 当RM执行完本地事务的提交操作后,它会向TM发送一个提交完成通知。
- TM在收到所有RM的提交完成通知后,会将分布式事务的状态设置为“已提交”。
GlobalLock处理脏读脏写
GlobalLock是Seata中的全局锁管理器,它负责管理分布式事务中的全局锁。GlobalLock在AT模式下的工作流程如下:
- 当应用在执行分布式事务时,如果需要对某个资源加锁,则会向GlobalLock发送一个加锁请求。
- GlobalLock在收到加锁请求后,会将锁信息存储在分布式存储中,并返回一个锁ID给应用。
- 应用在收到锁ID后,会将锁ID存储在本地,并继续执行分布式事务的本地操作。
- 当RM执行完本地操作后,它会向GlobalLock发送一个解锁请求。
- GlobalLock在收到解锁请求后,会将锁信息从分布式存储中删除。
GlobalLock通过这种方式来防止分布式事务中的脏读和脏写问题。