Skip to content

第 10 章 · 分布式压测

本章目标:掌握 Locust 的 master/worker 分布式架构,学会跨多台机器发起大规模并发压力。

10.1 为什么需要分布式

单台机器的 CPU、内存和网络带宽有限。当需要模拟数万甚至数十万虚拟用户时,单进程 Locust 无法提供足够的吞吐量。Locust 的分布式模式通过一个 master 节点 + 多个 worker 节点解决此问题:

text
┌──────────┐     ┌──────────┐
│  Master  │────▶│ Worker 1 │──▶ 目标系统
│(统计汇总) │     └──────────┘
│          │     ┌──────────┐
│          │────▶│ Worker 2 │──▶ 目标系统
└──────────┘     └──────────┘

Master 不产生任何请求——它仅负责向 worker 分发用户数和任务定义,并汇总所有 worker 的统计数据。每个 worker 是独立的 Python 进程,运行相同的 locustfile。

10.2 启动 Master

bash
locust -f locustfile.py --master --host https://api.example.com
# 默认监听 8089 端口(Web UI)
# worker 通信端口为 5557(TCP)和 5558(UDP)

关键参数:

参数说明
--master以 master 模式启动
--master-bind-host监听地址(默认 *
--master-bind-port通信端口(默认 5557)
--expect-workers等待指定数量 worker 就绪后再开始

使用 --expect-workers 可以防止 master 在所有 worker 连接之前就启动测试:

bash
locust -f locustfile.py --master --expect-workers 4

10.3 启动 Worker

在每台压测机上执行:

bash
locust -f locustfile.py --worker --master-host=192.168.1.100
# --worker 声明为 worker 节点
# --master-host 指向 master 的 IP(默认 localhost)

同一 locustfile

所有 worker 必须能访问到与 master 相同版本的 locustfile.py。推荐做法:

  • 将 locustfile 放在共享文件系统或 git 仓库中;
  • 或用 Docker 镜像统一分发。

10.4 容量规划

每个 worker 能模拟的并发用户数取决于硬件和脚本复杂度。经验值:

  • 简单 HTTP GET:每 worker 约 2000–5000 并发用户;
  • 复杂 POST + JSON 解析:约 500–1500 并发用户;
  • CPU 密集型断言或加密:更低。

估算所需 worker 数量:

python
workers_needed = target_users / per_worker_capacity

# 示例:目标 50,000 用户,每 worker 承载 2,500
workers_needed = 50_000 / 2_500  # = 20 台 worker

10.5 Docker Compose 编排

yaml
version: "3"
services:
  master:
    image: locustio/locust
    ports: ["8089:8089"]
    volumes: [./locustfile.py:/mnt/locust/locustfile.py]
    command: -f /mnt/locust/locustfile.py --master

  worker:
    image: locustio/locust
    volumes: [./locustfile.py:/mnt/locust/locustfile.py]
    command: -f /mnt/locust/locustfile.py --worker --master-host master
    deploy:
      replicas: 5
bash
docker compose up --scale worker=10

本章小结

  • Master 只做调度与统计汇总,不产生请求;Worker 才是实际发压节点;
  • 所有 worker 需访问相同 locustfile;--expect-workers 防止过早启动;
  • 每 worker 并发容量取决于脚本复杂度,需实测校准。

🧪 随堂测验

点击你认为正确的选项。答错时会展示正确答案与原因解析。

1. Locust 分布式模式中,Master 节点的职责是什么?

2. 启动 worker 时,哪个参数用于指定 master 的 IP?

3. `--expect-workers 4` 参数的作用是?

4. 如果目标需要模拟 20,000 并发用户,每个 worker 实测可稳定承载 1,000 用户,最少需要几台 worker?

🛠️ 动手实践

  1. 本机启动 1 个 master + 3 个 worker(同机多终端),对 httpbin.org 发起 3000 用户压测。
  2. 使用 Docker Compose 编排 master + 5 workers,对比单机模式的 RPS 差异。
  3. 测试你的 worker 单机最大并发承载量(逐步增加 users 直到响应时间飙升)。