Skip to content
返回运维与 SRE

负载测试

在 prod 前负载测到容量限使你知天花板并能规划余量。

为什么

你不知服务容量直到你坏它 — 且在 prod 发现是最坏方式。负载测把流量增到服务失败(延迟 > SLO、错误率 > 0、OOM)并告诉你天花板:"checkout 5000 RPS 时 p99 <500ms、6000 失败"。这是你规划余量所需数据:若峰流量 1000 RPS 且天花板 5000,你有 5x 余量;若峰 4000,你有 1.25x 须扩。发布前(新服务、大功能、容量变)负载测防"我们发布了并立即倒"失败模式。它也验自动扩缩:增到 10x 并确认 HPA 扩且延迟留 SLO。每次发布前负载测的团队报容量事件少 80%,因他们知天花板并置留其下。

何时使用

发布前(新服务、大功能)、容量变前、Tier 1 服务季度。

如何做

1. 定义负载测配置
   - 类 prod 流量混(读/写比、端点分布)
   - 增模式:渐(10% → 100% → 200%)或尖(0 → 10x 1m 内)
   - 持续:够到稳态(10-30m)并找内存漏

2. 在类 prod 环境测
   - 类 prod 容量、数据量和下游依赖的 staging
   - 1-pod staging 测无 prod 行为信息
   - 用类 prod 数据(匿名)使缓存和 DB 真实行为

3. 增到服务失败
   - 增 RPS 直到:延迟 > SLO、错误率 > 0 或资源耗尽(OOM、CPU 100%)
   - 记天花板:"5000 RPS p99 <500ms;6000 RPS → p99 2s、错误 1%"
   - 失败模式告诉你瓶颈(CPU、DB、内存、下游)

4. 测中验自动扩缩
   - 增到 2x 预期峰 → HPA 扩吗?延迟留 SLO?
   - 若 HPA 跟不上 → 调稳定、max 副本或扩上策略

5. 记天花板并规划余量
   - "天花板:5000 RPS。峰流量:1000 RPS。余量:5x。行动:无。"
   - "天花板:5000 RPS。峰流量:4000 RPS。余量:1.25x。行动:扩 +50%。"
   - 影响容量的变后重测(新代码、新基础设施、流量增)

示例

# 负载测(k6,checkout 服务):
import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '2m', target: 1000 },   # 增到 1000 RPS
    { duration: '5m', target: 1000 },   # 持 1000
    { duration: '2m', target: 3000 },   # 增到 3000
    { duration: '5m', target: 3000 },   # 持 3000
    { duration: '2m', target: 5000 },   # 增到 5000
    { duration: '5m', target: 5000 },   # 持 5000
    { duration: '2m', target: 6000 },   # 增到 6000(预期失败)
    { duration: '5m', target: 6000 },   # 持 6000
  ],
  thresholds: {
    http_req_duration: ['p(99)<500'],   # SLO:p99 < 500ms
    http_req_failed: ['rate<0.01'],     # SLO:错误率 < 1%
  },
};

export default function () {
  const res = http.post('https://staging.yourcompany.com/checkout', payload);
  check(res, { 'status 200': (r) => r.status === 200 });
  sleep(0.1);
}

# 结果:
#   1000 RPS:p99 120ms,错误 0%   ✅
#   3000 RPS:p99 280ms,错误 0%   ✅
#   5000 RPS:p99 450ms,错误 0.1% ✅(SLO 限)
#   6000 RPS:p99 2100ms,错误 5%  ❌(破 SLO)
# 天花板:5000 RPS。瓶颈:DB 连接池(5500 耗尽)。

# 容量规划:
#   峰流量:1000 RPS。天花板:5000 RPS。余量:5x。✅ 无行动。
#   若峰涨到 4000 RPS → 余量 1.25x → 扩 checkout +50%(也提 DB 池)。

常见问题

  • ⚠在 1-pod staging 测 — 无 prod 行为信息;用类 prod 容量、数据和依赖。
  • ⚠增到预期峰就停 — 你知能处理峰但不知天花板;增到失败找限。
  • ⚠无自动扩缩验 — 服务 50 pod 处理 5k RPS,但 HPA 真扩到 50 吗?测它。
  • ⚠一次测永不重跑 — 天花板随代码长降;季度和影响容量变后重测。

最佳实践

  • ✓在类 prod 环境(容量、数据、依赖)负载测增到服务失败;天花板是你规划余量所需数据。
  • ✓测中验自动扩缩:增到 2x 预期峰并确认 HPA 扩且延迟留 SLO。
  • ✓记天花板并规划余量:若峰/天花板 < 2x 则扩;影响容量变后重测。
  • ✓Tier 1 服务季度和影响容量变后(新代码、新基础设施、流量增)重测;天花板随代码长降。