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 冷启动测试工具选择决策流程

冷启动测试工具选择决策流程 冷启动测试需求 需要复杂场景? 是 k6(主工具) 否 hey 快速验证 配置 stages 爬坡 设置延迟阈值 设置并发数 -c 分析延迟分布 冷启动延迟报告

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 格式,便于后续分析。