负载测试
在 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 服务季度和影响容量变后(新代码、新基础设施、流量增)重测;天花板随代码长降。