返回

Seata源码(一)概览:架构与核心组件

后端

在分布式事务领域,Seata作为一款备受推崇的中间件,其源码设计精妙,架构清晰。本文将带你深入Seata源码(版本:1.5.0),揭秘其架构之美与核心组件之精髓。

Seata采用二阶段提交(2PC)ACID 事务模型,即AT模式 。该模式下,事务分为两阶段:

  1. Prepare阶段: 参与者准备提交,向协调者发送准备命令。
  2. Commit/Rollback阶段: 协调者收集所有参与者的状态,决定并通知所有参与者提交或回滚。

Seata主要由三个核心组件组成:

  1. Transaction Coordinator (TC): 负责协调全局事务,被称为TC。它负责事务的开始、提交和回滚。
  2. Transaction Manager (TM): 作为客户端事务管理器,被称为TM。它负责发起本地事务,并向TC注册和汇报事务状态。
  3. Resource Manager (RM): 管理分布式事务中的资源,如数据库、消息队列等。它负责执行TC的命令,执行事务提交或回滚。

TC是Seata的核心组件,它负责管理全局事务的生命周期。其架构如下图所示:

[Image: SeataServer架构]

TC由以下核心模块组成:

  1. Manager: 管理全局事务的元数据,如事务状态、参与者信息等。
  2. Transaction: 负责执行事务的生命周期操作,如开始、提交、回滚等。
  3. Protocol: 提供通信协议,处理与TM和RM之间的消息交互。
  4. Store: 存储全局事务元数据,支持持久化和恢复。

TM负责管理本地事务。其架构如下图所示:

[Image: TM架构]

TM由以下核心模块组成:

  1. XATransaction: 实现X/Open XA规范,管理本地事务。
  2. Transaction Hook: 提供事务事件监听和回调机制,与应用代码交互。
  3. ResourceManagerHolder: 保存RM的引用,用于协调事务。

RM负责管理分布式事务中的资源。其架构如下图所示:

[Image: RM架构]

RM由以下核心模块组成:

  1. XADataSource: 实现XA规范,管理数据库事务。
  2. Recovery Manager: 负责事务恢复,如从崩溃中恢复。
  3. Lock Manager: 管理分布式锁,保证事务隔离性。