Skip to content

MetaService 架构

概述

MetaService(也称为调度中心)是 RobustMQ 的元数据管理和集群协调中心。它作为整个系统的大脑,负责管理集群元数据、节点协调、故障检测和恢复。基于 Raft 共识算法构建,MetaService 确保集群元数据的高可用性和强一致性。

设计原则

MetaService 基于以下核心原则设计:

  • 高可用性:基于 Raft 的共识确保即使节点故障也能保持集群可用性
  • 强一致性:所有元数据操作在集群中保持强一致性
  • 容错性:自动检测和恢复节点故障
  • 可扩展性:支持动态集群成员变更
  • 性能:针对低延迟元数据操作优化

架构概述

MetaService 架构

MetaService 采用分层架构,职责分离清晰:

1. 服务层

  • gRPC 服务:集群操作的外部 API 接口
  • 内部服务:协议特定的服务实现
  • 服务发现:节点注册和发现机制

2. 核心层

  • 缓存管理:高性能内存元数据缓存
  • 集群控制器:中央协调和控制逻辑
  • 心跳管理:节点健康监控和故障检测
  • 指标收集:性能和操作指标

3. Raft 层

  • 共识引擎:Raft 算法实现分布式共识
  • 状态机:元数据状态管理和转换
  • 日志存储:Raft 操作的持久化日志存储
  • 网络层:节点间通信和消息传递

4. 存储层

  • RocksDB 引擎:元数据和日志的持久化存储
  • 数据路由:请求路由到适当的存储处理器
  • 模式管理:数据模式和管理

核心组件

服务层 (src/server/)

服务层提供外部 API 和内部服务实现。

gRPC 服务

  • MetaServiceService:集群操作的主要 gRPC 服务
  • MQTT 服务:MQTT 特定的元数据操作
  • Journal 服务:存储相关的元数据操作
  • KV 服务:键值元数据操作

服务实现

rust
pub struct GrpcPlacementService {
    raft_machine_apply: Arc<StorageDriver>,
    cluster_cache: Arc<CacheManager>,
    rocksdb_engine_handler: Arc<RocksDBEngine>,
    client_pool: Arc<ClientPool>,
    journal_call_manager: Arc<JournalInnerCallManager>,
    mqtt_call_manager: Arc<MQTTInnerCallManager>,
}

主要职责:

  • 处理外部 gRPC 请求
  • 将请求路由到适当的内部服务
  • 管理客户端连接和身份验证
  • 提供服务发现和健康检查

核心层 (src/core/)

核心层包含基本的业务逻辑和协调机制。

缓存管理器 (cache.rs)

  • 内存缓存:高性能元数据缓存
  • 缓存失效:自动缓存一致性管理
  • 缓存预热:主动缓存填充以提高性能
  • 内存管理:高效内存使用和垃圾回收

集群控制器 (controller.rs)

rust
pub struct ClusterController {
    cluster_cache: Arc<CacheManager>,
    meta_service_storage: Arc<StorageDriver>,
    stop_send: broadcast::Sender<bool>,
    client_pool: Arc<ClientPool>,
    journal_call_manager: Arc<JournalInnerCallManager>,
    mqtt_call_manager: Arc<MQTTInnerCallManager>,
}

主要职责:

  • 集群协调和管理
  • 节点生命周期管理
  • 故障检测和恢复
  • 负载均衡和路由决策

心跳管理 (heartbeat.rs)

  • 节点健康监控:集群节点的持续健康检查
  • 故障检测:自动检测故障节点
  • 恢复协调:协调恢复程序
  • 健康指标:收集和报告节点健康统计

Raft 层 (src/raft/)

Raft 层实现分布式共识以确保元数据一致性。

Raft 节点 (raft_node.rs)

rust
pub struct Node {
    pub node_id: u64,
    pub rpc_addr: String,
}

pub type NodeId = u64;

主要特性:

  • 领导者选举:自动领导者选举和故障转移
  • 日志复制:节点间一致的日志复制
  • 成员变更:动态集群成员管理
  • 快照管理:高效的快照创建和恢复

状态机 (store/state_machine_store.rs)

  • 状态转换:管理元数据状态变更
  • 日志应用:将已提交的日志条目应用到状态
  • 快照创建:创建一致的状态快照
  • 恢复:从快照和日志恢复状态

网络层 (network/)

  • 节点间通信:Raft 节点间的高效通信
  • 消息序列化:优化的消息序列化/反序列化
  • 连接管理:可靠的连接处理
  • 负载均衡:在节点间分布网络负载

存储层 (src/storage/)

存储层为元数据和日志提供持久化存储。

RocksDB 引擎 (rocksdb.rs)

  • 持久化存储:元数据和日志的持久化存储
  • 高性能:针对元数据访问模式优化
  • 压缩:自动数据压缩和优化
  • 备份/恢复:数据备份和恢复功能

数据路由 (raft/route/)

  • 请求路由:将请求路由到适当的处理器
  • 协议支持:支持不同的数据类型和协议
  • 批处理:高效的批处理操作
  • 错误处理:全面的错误处理和恢复

数据流架构

元数据操作流程

  1. 客户端请求:客户端发送元数据操作请求
  2. 服务层:gRPC 服务接收并验证请求
  3. 缓存检查:在内存缓存中检查数据
  4. Raft 共识:如果缓存未命中,向 Raft 集群提议操作
  5. 日志复制:在集群节点间复制操作
  6. 状态应用:将操作应用到状态机
  7. 缓存更新:用新数据更新内存缓存
  8. 响应:向客户端返回结果

节点管理流程

  1. 节点注册:新节点向集群注册
  2. 健康监控:持续心跳监控
  3. 故障检测:通过错过的心跳检测节点故障
  4. 恢复协调:协调恢复程序
  5. 负载重平衡:节点变更后重新平衡负载
  6. 成员更新:更新集群成员

共识流程

  1. 领导者选举:通过 Raft 共识选举领导者
  2. 日志提议:领导者向跟随者提议操作
  3. 投票收集:从多数节点收集投票
  4. 提交:多数同意后提交操作
  5. 状态更新:用已提交的操作更新状态机
  6. 响应:向客户端返回结果

协议特定控制器

MQTT 控制器 (controller/mqtt/)

  • 会话管理:管理 MQTT 客户端会话
  • 主题路由:将消息路由到适当的主题
  • 订阅管理:处理主题订阅
  • QoS 协调:在 broker 间协调 QoS 级别

Journal 控制器 (controller/journal/)

  • 存储协调:与存储节点协调
  • 数据复制:管理存储节点间的数据复制
  • 垃圾回收:协调垃圾回收操作
  • 存储健康:监控存储节点健康

结论

MetaService 是确保 RobustMQ 集群可靠性、一致性和性能的关键组件。其基于 Raft 的共识架构提供强一致性保证,同时保持高可用性和容错性。分层设计和清晰的职责分离使其易于维护和扩展。

内存缓存、高效共识算法和健壮存储机制的结合使 MetaService 能够处理高吞吐量元数据操作,同时保持亚秒级响应时间。这使其适用于需要高可用性和强一致性的苛刻生产环境。


本文档提供了 MetaService 架构的全面概述。有关特定组件的更详细信息,请参考各个组件的文档。