1. 课程导论:消息队列读写分离的背景、课程目标与学习路径
1.1 为什么需要读写分离?—— 从单机瓶颈说起
在分布式消息队列的典型生产场景中,生产者(Producer)持续写入消息,消费者(Consumer)并发拉取消费。当业务流量增长到一定规模,单节点 Broker 会同时面临以下三重压力:
- 磁盘 I/O 争抢:写入落盘与消费读取共用同一块磁盘,随机读写与顺序追加相互干扰。
- CPU 资源竞争:消息序列化/反序列化、索引维护、网络处理在同一个进程中抢占 CPU 时间片。
- 内存与锁竞争:PageCache 的脏页回刷、消费位点更新等操作需要加锁,导致吞吐抖动。
核心矛盾:读写混合部署时,延迟敏感型的消费请求会被吞吐密集型的写入请求拖尾,反之亦然。读写分离正是为了解耦这两种截然不同的负载特征。
1.2 读写分离架构概览
读写分离将 Broker 节点划分为 写节点(Leader / Primary)和 读节点(Follower / Replica)。生产者只向写节点发送消息,写节点完成持久化后,通过内部复制协议将数据同步到读节点;消费者从读节点拉取消息,从而隔离读写压力。
架构要点:写节点通常只有 1 个(避免写入冲突),读节点可以横向扩展至 N 个。复制延迟是读写分离的核心质量指标,也是本课程测试验证的重点。
1.3 课程目标
本课程旨在通过可复现的基准测试,量化评估消息队列在读写分离模式下的吞吐(Throughput)与延迟(Latency)表现。完成本课程后,你将能够:
| 目标维度 | 具体产出 |
|---|---|
| 理解原理 | 掌握读写分离的复制模型、一致性级别与故障转移机制 |
| 搭建环境 | 独立部署包含 1 写 2 读的 RocketMQ / Kafka 集群 |
| 设计测试 | 编写压测脚本,控制消息体大小、并发数、同步/异步刷盘等变量 |
| 分析数据 | 绘制吞吐-延迟曲线,识别复制延迟拐点与资源瓶颈 |
| 调优决策 | 根据测试结果给出读写分离比、节点规格、刷盘策略的优化建议 |
1.4 学习路径与章节地图
课程共 30 章,按“基础 → 环境 → 测试 → 分析 → 调优”五阶段递进:
学习建议:阶段 1 和阶段 2 是动手测试的基础,请务必完成环境搭建章节的实操练习。跳过基础直接进入测试可能导致对复制延迟、一致性语义等关键概念理解不深,影响后续分析。
1.5 你需要具备的前置知识
- 熟悉至少一种消息队列的基本使用(如 RocketMQ、Kafka、RabbitMQ)。
- 了解 Linux 基本操作(SSH、文件编辑、进程查看)。
- 具备基础的 Java 或 Python 编程能力(用于编写压测脚本)。
- 理解网络延迟、吞吐量、P99 延迟等基本性能指标。
1.6 课程使用的工具与版本
| 工具/组件 | 版本 | 用途 |
|---|---|---|
| Apache RocketMQ | 5.1.x | 主测消息队列(支持读写分离) |
| Apache Kafka | 3.5.x | 对比测试消息队列 |
| OpenMessaging Benchmark | 0.3.0 | 标准化压测框架 |
| Prometheus + Grafana | 最新稳定版 | 实时监控 Broker 指标 |
| Python 3.10+ | 3.10 | 自定义压测脚本与数据分析 |