压测的还原度决定价值
压测得到的是好看但无意义的数字,还是可信的容量结论,取决于还原度:查询混合比例、数据总量与分布(热点键)、缓存命中率都要接近生产。观察指标以 p99 延迟与资源饱和点为主,并做故障注入验证降级路径是否真的生效。
k6 压测脚本骨架
k6 压测脚本骨架
import http from "k6/http";
import { sleep } from "k6";
export const options = {
stages: [
{ duration: "2m", target: 50 }, // 逐步加压
{ duration: "5m", target: 200 }, // 稳态观察
{ duration: "1m", target: 0 }, // 平滑退出
],
thresholds: { http_req_duration: ["p(99)<300"] }, // 门槛不达标即判失败
};
export default function () {
http.get("https://api.example.com/items?limit=20");
sleep(1); // 思考时间,贴近真实用户节奏
}基本信息
| 数据准备 | 导入生产量级的数据:索引大小、分片分布与热点都在数据里体现 |
|---|---|
| 流量模型 | 读写混合比例、查询类型分布、思考时间贴近真实流量 |
| 观察指标 | p99 延迟、错误率、连接与队列、CPU 与 IO 饱和点、复制延迟 |
| 故障注入 | 演练单节点下线、缓存失效、依赖超时下的表现与降级是否生效 |
| 结论产出 | 给出容量上限与瓶颈位置,而不是只报一个峰值吞吐 |
典型使用场景
- 上线前容量评估:确认目标流量下的延迟与资源水位
- 变更验证:索引调整、参数改动前后做对照压测
- 扩容决策:找出饱和点后再决定加资源还是改结构
- 降级演练:验证限流与降级在压力下是否按预期生效
- 大促准备:按预估峰值做阶梯加压,确认余量
指标读法
| 指标 | 含义 | 判读要点 |
|---|---|---|
| p99 延迟 | 绝大多数请求的响应上限 | 平均值会掩盖长尾,压测必须看高分位 |
| 错误率 | 失败请求占比 | 与延迟同时上升说明已进入过载区 |
| 资源饱和度 | CPU、IO、连接池使用率 | 找出最先饱和的资源,它就是瓶颈位置 |
| 复制延迟 | 从节点落后主节点的时间 | 写入加压时先恶化,是容量上限的先行指标 |
| 客户端资源 | 压测机 CPU、网络与连接数 | 客户端先饱和会得到错误的服务端结论 |
压测客户端本身也可能成为瓶颈:吞吐上不去时先确认客户端资源与连接复用是否到位,再判断是不是服务端限制。
压测流量要与其他环境隔离,并明确标注目标环境:误压生产或与线上共享存储会直接影响真实用户。