1. 课程导论:消息队列读写分离的背景、课程目标与学习路径

1.1 为什么需要读写分离?—— 从单机瓶颈说起

在分布式消息队列的典型生产场景中,生产者(Producer)持续写入消息,消费者(Consumer)并发拉取消费。当业务流量增长到一定规模,单节点 Broker 会同时面临以下三重压力:

  • 磁盘 I/O 争抢:写入落盘与消费读取共用同一块磁盘,随机读写与顺序追加相互干扰。
  • CPU 资源竞争:消息序列化/反序列化、索引维护、网络处理在同一个进程中抢占 CPU 时间片。
  • 内存与锁竞争:PageCache 的脏页回刷、消费位点更新等操作需要加锁,导致吞吐抖动。
核心矛盾:读写混合部署时,延迟敏感型的消费请求会被吞吐密集型的写入请求拖尾,反之亦然。读写分离正是为了解耦这两种截然不同的负载特征。

1.2 读写分离架构概览

读写分离将 Broker 节点划分为 写节点(Leader / Primary)和 读节点(Follower / Replica)。生产者只向写节点发送消息,写节点完成持久化后,通过内部复制协议将数据同步到读节点;消费者从读节点拉取消息,从而隔离读写压力。

消息队列读写分离架构总览 生产者集群 写节点 (Leader) 写入 + 持久化 读节点 1 读节点 2 读节点 N 消费者集群 内部复制协议同步数据
架构要点:写节点通常只有 1 个(避免写入冲突),读节点可以横向扩展至 N 个。复制延迟是读写分离的核心质量指标,也是本课程测试验证的重点。

1.3 课程目标

本课程旨在通过可复现的基准测试,量化评估消息队列在读写分离模式下的吞吐(Throughput)与延迟(Latency)表现。完成本课程后,你将能够:

目标维度 具体产出
理解原理 掌握读写分离的复制模型、一致性级别与故障转移机制
搭建环境 独立部署包含 1 写 2 读的 RocketMQ / Kafka 集群
设计测试 编写压测脚本,控制消息体大小、并发数、同步/异步刷盘等变量
分析数据 绘制吞吐-延迟曲线,识别复制延迟拐点与资源瓶颈
调优决策 根据测试结果给出读写分离比、节点规格、刷盘策略的优化建议

1.4 学习路径与章节地图

课程共 30 章,按“基础 → 环境 → 测试 → 分析 → 调优”五阶段递进:

课程学习路径五阶段 阶段 1:基础 第 1-5 章 阶段 2:环境 第 6-10 章 阶段 3:测试 第 11-18 章 阶段 4:分析 第 19-24 章 阶段 5:调优 第 25-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 自定义压测脚本与数据分析

1.7 本章小结