4. 冷启动性能测试工具:k6、vegeta、hey 的选择与配置
Gatekeeper 冷启动场景对压测工具有特殊要求:需要支持瞬时高并发、精确控制请求速率、以及捕获启动阶段的延迟抖动。本节对比三款主流开源工具——k6、vegeta、hey,并给出针对冷启动测试的配置方案。
4.1 工具对比与选型依据
| 特性 | k6 | vegeta | hey |
|---|---|---|---|
| 开发语言 | Go + JavaScript 脚本 | Go | Go |
| 脚本能力 | 强(JS 编写复杂场景) | 弱(仅 CLI 参数) | 弱(仅 CLI 参数) |
| 冷启动模拟 | 支持 ramp-up 阶段 | 支持恒定速率 | 支持并发数控制 |
| 延迟分布统计 | 内置 p50/p90/p99 | 内置百分位延迟 | 基础统计 |
| 资源开销 | 中等 | 低 | 极低 |
| 适用场景 | 复杂链路、多阶段测试 | 恒定负载、高吞吐 | 快速验证、单端点 |
选型建议:冷启动测试推荐以 k6 为主力工具,因其支持 ramp-up 阶段和自定义检查点;vegeta 适合做恒定负载基线;hey 用于快速验证单次冷启动延迟。
4.2 k6:冷启动场景脚本配置
k6 通过 JavaScript 脚本定义虚拟用户行为,支持 __VU 和 __ITER 内置变量,适合模拟 Gatekeeper 冷启动时的渐进式流量涌入。
import http from 'k6/http';
import { check, sleep } from 'k6';
import { Rate } from 'k6/metrics';
const errorRate = new Rate('errors');
export const options = {
stages: [
{ target: 5, duration: '2s' }, // 冷启动初期,低并发
{ target: 50, duration: '10s' }, // 快速攀升
{ target: 100, duration: '20s' },// 峰值负载
{ target: 0, duration: '5s' }, // 冷却
],
thresholds: {
http_req_duration: ['p(95)<2000'], // 冷启动允许较高延迟
errors: ['rate<0.1'],
},
};
export default function () {
const res = http.get('http://gatekeeper:8080/validate');
check(res, {
'status is 200': (r) => r.status === 200,
'response time < 5s': (r) => r.timings.duration < 5000,
});
errorRate.add(res.status !== 200);
sleep(1);
}
关键配置说明:
stages数组定义冷启动的流量爬坡曲线,避免瞬间压垮未就绪的 Pod。thresholds设置 p95 延迟阈值,冷启动阶段可放宽至 2s。- 内置
http_req_duration指标自动记录每次请求的延迟分布。
4.3 vegeta:恒定负载基线测试
vegeta 以恒定速率发送请求,适合测量 Gatekeeper 冷启动完成后的稳态性能。使用 CLI 模式即可完成配置。
# 定义请求目标
echo "GET http://gatekeeper:8080/validate" > targets.txt
# 以每秒 50 个请求持续 30 秒
vegeta attack -targets=targets.txt -rate=50 -duration=30s | vegeta report
# 输出延迟百分位
vegeta attack -targets=targets.txt -rate=50 -duration=30s \
| vegeta report --type=hist[0,100ms,200ms,500ms,1s,2s,5s]
注意:vegeta 不支持动态调整速率,如需模拟冷启动的流量爬坡,需配合 shell 脚本分段执行。建议将冷启动测试分为 3~5 个恒定速率阶段,分别记录延迟分布。
4.4 hey:快速验证与单点测试
hey 是轻量级压测工具,适合在开发环境快速验证 Gatekeeper 冷启动后的首次请求延迟。
# 并发 10 个请求,总计 100 次
hey -n 100 -c 10 http://gatekeeper:8080/validate
# 输出示例(关注延迟分布)
# Summary:
# Total: 2.3456 secs
# Slowest: 3.2100 secs
# Fastest: 0.0456 secs
# Average: 0.2345 secs
# Requests/sec: 42.63
#
# Latency distribution:
# 50% in 0.1234 secs
# 90% in 0.5678 secs
# 99% in 1.2345 secs
使用场景:hey 的
-c 参数控制并发数,适合模拟冷启动时多个请求同时到达的场景。注意 hey 不提供 ramp-up,建议从低并发(如 -c 5)开始逐步增加。
4.5 冷启动测试工具选择决策流程
4.6 工具配置参数速查表
| 参数 | k6 | vegeta | hey |
|---|---|---|---|
| 并发控制 | stages[].target |
-rate(每秒请求数) |
-c(并发数) |
| 持续时间 | stages[].duration |
-duration |
-n(总请求数) |
| 延迟阈值 | thresholds 对象 |
报告后分析 | 报告后分析 |
| 自定义检查 | check() 函数 |
不支持 | 不支持 |
| 输出格式 | JSON / CSV / 文本 | 文本 / JSON / 直方图 | 文本 |
| 冷启动适配 | ★★★★★ | ★★★☆☆ | ★★☆☆☆ |
实践建议:
- 首次冷启动测试使用 k6 编写完整脚本,包含 ramp-up 和阈值检查。
- 基线对比使用 vegeta 的恒定速率模式,记录 p50/p90/p99 延迟。
- 快速验证代码改动对冷启动的影响时,使用 hey 的
-n 50 -c 5组合。 - 所有工具均支持管道输出,建议将原始数据保存为 JSON 格式,便于后续分析。