Serverless 计费按 GB-秒,如何评估压测成本并设置上限告警

解读

面试官想知道三件事:

  1. 你能否把“压测流量”翻译成“函数实例×内存×时长”这一计费维度;
  2. 能否在测试前给出可接受的成本区间,而不是事后“看账单吓一跳”;
  3. 能否把成本当成 SLA 一样去监控、告警、熔断,体现生产意识。
    国内主流云(阿里云函数计算、腾讯云 SCF、华为云 FunctionGraph)均按“内存规格×运行毫秒”线性计费,且每月有 40~100 万 GB-秒免费额度,超出后阶梯价 0.000111~0.0002 元/GB-秒。压测动辄百万并发,极易烧光免费额度,因此必须像监控 RT 一样监控“钱”。

知识点

  1. GB-秒定义:实例内存 GB × billed 毫秒 ÷ 1000。
  2. 计费项拆分:
    ‑ 调用次数费用(通常 100 万次内免费,可忽略)
    ‑ 公网出流量费用(国内 0.8 元/GB,压测若走外网不可忽视)
    ‑ 磁盘、日志、并发预留费用(压测时一般不开,可忽略)
  3. 压测模型→成本模型:
    TPS × 平均 RT(s) × 并发实例数 ≈ 总 GB-秒
    并发实例数 = TPS × RT ÷ 并发复用率(单实例并发 1 时即 1)
  4. 云监控指标:
    ‑ 函数并发度、执行次数、运行时长、错误率
    ‑ 账单 API(阿里云“账单明细”、腾讯云“费用中心”)延迟 T+1 小时,不适合实时熔断
  5. 实时成本估算:
    自建指标 = ConcurrentGBSecond = 内存(GB) × 并发实例数 × 采样间隔(s)
    通过云监控自定义指标或 Prometheus exporter 每 15 s 上报,PromQL 累加即可得“秒级 GB-秒”
  6. 告警策略:
    ‑ 预算告警:累计 GB-秒 ≥ 预算 × 80% 时钉钉+短信
    ‑ 速率告警:单分钟 GB-秒 > 历史均值 3 倍立即停压
    ‑ 熔断:函数并发度 > 阈值直接调云 API PutFunctionConcurrency=0
  7. 国内合规:压测需提前在工信部“通信网络安全防护管理系统”报备,否则云厂商会直接限流并关闭账号,成本监控再好也白搭。

答案

分四步落地:

步骤 1:测试前把业务指标换算成“钱”
① 与产品对齐 SLA:峰值 5 k TPS、RT ≤ 500 ms、内存 1 GB。
② 估算并发实例:单实例并发 1,则并发实例 = 5 k × 0.5 = 2 500。
③ 估算 GB-秒/分钟:2 500 × 1 GB × 60 s = 150 k GB-秒。
④ 乘云价:150 k × 0.00015 元 ≈ 22.5 元/分钟。
⑤ 给出总预算:压测 30 分钟,预算 700 元,预留 10% buffer,上限 770 元。

步骤 2:代码层埋点,实时累加 GB-秒
在函数入口把 memoryInGB、requestId、startTime 写入 MDC;出口时计算 billedDurationMs,发送到内部 Prometheus:
concurrent_gb_second += memory * billedDurationMs / 1000.0
PromQL:
increase(concurrent_gb_second_total[1m]) > 150000
触发告警即停压。

步骤 3:双层告警
① 云监控侧:创建“函数并发度”≥ 3000 立即下调并发;
② 费用侧:每 15 min 调账单 API,累计 GB-秒 ≥ 616 k(=770 元/0.000125 元)即通过钉钉机器人 @所有人,同时调用云 API UpdateFunctionConfiguration 把内存降到 0.5 GB,直接腰斩成本。

步骤 4:压测后复盘
导出 Prometheus 数据,对比“预估 GB-秒/实际 GB-秒”误差 < 5%,证明模型可信;把误差原因(冷启动、重试)写进《性能测试报告》,作为下次预算输入。

一句话总结:把“GB-秒”当成与 RT 同等重要的 KPI,先建模、再埋点、再告警、再复盘,让老板在压测前就签字认可“最多烧 770 块”,而不是月底看到账单才“追责”。

拓展思考

  1. 如果业务允许单实例多并发(如 10),成本可降 10 倍,但 RT 会上升,需在“钱”与“体验”之间做 Pareto 前沿分析。
  2. 国内云对“突发弹性”有隐藏限流(阿里云 3 k 实例/分钟),压测脚本若瞬间打满 5 k 并发,实际只拉起 3 k,GB-秒被低估,模型会失真,需提前申请“弹性配额”并把限流指标也纳入监控。
  3. Serverless 计费粒度到毫秒,而压测工具(JMeter、Locust)统计 RT 到秒,需把采样对齐到 1 ms 级,否则 100 ms 的误差在百万次调用下就是 100 k GB-秒、十几块钱的偏差。
  4. 未来若云厂商推出“单请求计费”或“CPU 毫秒计费”,成本模型需同步升级,体现可扩展性设计:把计费维度抽象成接口,新增字段即可复用。