容量评估与压力测试
容量评估回答两个问题:现在能扛多少,以及大促或新功能上线需要多少机器。估错的代价是双向的:估低了线上被打挂,估高了资源长期闲置。本章给出从业务指标推导资源需求的标准步骤、单机容量标定方法与压测指标,并附一张容量规划表模板。
评估步骤
1. 业务指标 → 技术指标
日活 100 万、人均 20 次请求 → 日请求 2000 万
2. 峰值系数
按历史曲线取峰值/均值比(常见 3~10 倍),大促场景单独评估
QPS峰值 = 日请求 / 86400 × 峰值系数
3. 单机容量标定
压测得到单机可稳定承载的 QPS,取其中 70% 作为安全水位
4. 资源换算
实例数 = 峰值QPS / 单机安全QPS,向上取整后再留冗余
5. 存储与带宽
存储 = 日增数据量 × 保留天数 × 副本数;带宽 = 响应体大小 × QPS
示例:日请求 2000 万、峰值系数 5,则峰值 QPS ≈ 2000万 / 86400 × 5 ≈ 1157;若单机安全 QPS 为 300(压测 400 打七折),至少需要 4 台,考虑故障冗余与滚动发布再加 1~2 台,最终按 6 台准备。
单机容量标定
标定的关键是“稳定”而不是“极限”:把并发从低到高逐档加压,记录 QPS 与 P99,找到 P99 开始陡增的拐点。
并发 50 → QPS 300,P99 20ms 舒适区
并发 200 → QPS 900,P99 45ms 可用区
并发 400 → QPS 1100,P99 300ms 拐点,QPS 增长停滞
并发 800 → QPS 1050,P99 2s 过载,吞吐不升反降
拐点之后继续加并发,吞吐不再增长而延迟暴涨,这是排队效应。生产配置取拐点前 70% 对应的能力,并把拐点本身作为扩容触发线。
压测方法与工具
| 工具 | 特点 | 命令示意 |
|---|---|---|
| wrk | 多线程加事件驱动,压 HTTP 吞吐能力强 | wrk -t4 -c200 -d60s --latency http://host/api |
| ab | 简单易上手,功能较少,适合快速验证 | ab -n 10000 -c 200 http://host/api |
| JMeter | 图形化,支持复杂业务链路与参数化 | 场景脚本 + 聚合报告 |
| 全链路压测 | 在生产环境染色压测,最接近真实 | 需要流量标记与数据隔离 |
# wrk:4 线程、200 连接、持续 60 秒,输出延迟分位
wrk -t4 -c200 -d60s --latency "http://127.0.0.1:8080/api/order/list"
# ab:共 10000 个请求、200 并发
ab -n 10000 -c 200 http://127.0.0.1:8080/api/order/list
压测必须守三条纪律:在类生产环境压测、压测数据量级与真实一致、压测流量可识别并隔离(避免压测订单污染真实用户数据)。
关键指标
| 指标 | 含义 | 参考做法 |
|---|---|---|
| QPS/TPS | 吞吐量 | 与设计容量对比,看是否达标 |
| P99/P95 延迟 | 长尾延迟 | 比平均值重要,平均值会掩盖长尾 |
| 错误率 | 失败请求占比 | 通常要求低于 0.1%,并区分自身错误与依赖错误 |
| 饱和度 | CPU、内存、连接池、队列使用率 | 任一项长期高于 70% 就要扩容或优化 |
| 依赖负载 | 数据库 QPS、慢查询数、缓存命中率 | 单机能力的真正上限常在下游 |
只看平均值是常见误区:平均值 50ms 而 P99 是 3s,说明有 1% 的用户体验极差,而这 1% 往往正是大客户或高价值用户。
限流与扩容阈值
把“该扩容的线”和“不能超过的线”分开设定:
扩容阈值 ≈ 单机安全能力的 60% 提前扩容,留出弹性时间
限流阈值 ≈ 单机安全能力的 90% 保护自己不被拖垮
熔断阈值 ≈ 依赖错误率 > 50% 持续 10 秒 快速失败,避免线程堆积
阈值需要被验证过:新系统或大促前按真实峰值做过预演,未经验证的阈值等同于没有阈值。
容量规划表模板
| 模块 | 峰值QPS | 单机安全QPS | 实例数 | 冗余 | 日增数据 | 保留期 | 备注 |
|---|---|---|---|---|---|---|---|
| 商品详情 | 20000 | 2000 | 10 | +2 | 忽略 | - | 缓存命中率 95% |
| 下单 | 3000 | 500 | 6 | +2 | 50 万行 | 3 年 | 写入需评估分表 |
| 支付回调 | 1500 | 400 | 4 | +2 | 30 万行 | 5 年 | 幂等表增长快 |
| 搜索 | 6000 | 1200 | 5 | +1 | 索引 20GB | 1 年 | 搜索引擎集群单独计 |
填完这张表,容量评审的争论点会从“感觉不够”变成“哪个数字需要修正”,这正是容量评估最大的价值。
小结:容量评估的公式很短——峰值 QPS = 日请求 / 86400 × 峰值系数,实例数 = 峰值 QPS / 单机安全 QPS;难点在于单机容量标定与压测数据的可信度,因此要在类生产环境按真实数据量级压测,用 P99 与饱和度而非平均值决策,并把扩容、限流、熔断三档阈值固化下来。