架构概览
RocketMQ-Rust 继承了 Apache RocketMQ 经验证的架构设计,同时结合了 Rust 在性能与安全性方面的优势。
系统架构
组件说明
1. Name Server
Name Server 是轻量级注册中心,主要提供:
功能:
- Broker 注册与发现
- 路由信息维护
- 心跳检测
特点:
- 无状态设计
- 集群部署提升可用性
- 节点之间无需数据同步
典型操作:
// 伪代码流程:
// 客户端向 NameServer 查询 TopicTest 路由
// NameServer 返回 Broker/Queue 路由信息
2. Broker
Broker 是消息系统的核心处理节点:
职责:
- 消息接收与存储
- 消息查询与投递
- 消费位点(offset)管理
- 高可用复制(HA)
Broker 内部组件:
消息存储结构:
- CommitLog:所有消息的顺序存储
- ConsumeQueue:面向消费的索引结构
- IndexFile:用于 Key 查询的哈希索引
3. Producer
Producer 负责向 Broker 发送消息:
特性:
- 异步发送
- 发送失败自动重试
- 跨 Broker 负载均衡
- 支持事务消息
发送流程:
4. Consumer
Consumer 负责接收并处理消息:
类型:
- Push Consumer:事件驱动,Broker 推送消息
- Pull Consumer:轮询拉取,由消费者主动拉消息
消费模式:
- Clustering(集群):组内负载均衡
- Broadcasting(广播):每个消费者接收全部消息
消费流程:
消息流转
消息发送路径
1. Producer 向 Name Server 查询 Topic 路由
2. Name Server 返回 Broker 列表及队列信息
3. Producer 选择队列(负载均衡)
4. Producer 向 Broker 发送消息
5. Broker 将消息写入 CommitLog
6. Broker 更新 ConsumeQueue 索引
7. Broker 返回发送结果
消息消费路径
1. Consumer 向 Name Server 查询 Topic 路由
2. Name Server 返回 Broker 列表及队列信息
3. Consumer 执行 Rebalance 分配队列
4. Consumer 从分配队列拉取消息
5. Consumer 处理消息
6. Consumer 提交消费位点
7. Consumer 继续拉取下一批消息
高可用设计
Broker 高可用
Broker 支持主从复制:
- Master:处理读写请求
- Slave:复制主节点数据,通常承担读请求
- 同步模式:支持同步复制与异步复制
Name Server 高可用
Name Server 以集群方式部署:
- 每个 Broker 向所有 Name Server 注册
- 客户端可查询任意 Name Server
- 避免单点故障
Rust 设计优势
内存安全
RocketMQ-Rust 基于 Rust 所有权模型:
- 无需手动内存管理
- 避免空指针解引用
- 编译期消除数据竞争
异步架构
基于 Tokio 运行时:
- 非阻塞 I/O
- 资源利用率高
- 低开销支持高并发
零成本抽象
- 通过泛型保证类型安全
- 编译期优化
- 抽象层不引入额外运行时开销