2. 核心概念:SLO、SLI 与错误预算的定义与数学关系
在构建 Serverless 容量管理与 HPA 面板之前,必须精确理解三个核心概念:SLI(服务等级指标)、SLO(服务等级目标)和错误预算。这三者构成了容量决策的量化基础,也是 HPA 面板中“是否扩缩容”的最终判断依据。
2.1 定义与职责
| 概念 | 英文全称 | 定义 | 在 Serverless 容量场景中的角色 |
|---|---|---|---|
| SLI | Service Level Indicator | 对服务质量某个维度的实际测量值,通常是一个比率或延迟分位数。 | HPA 面板中实时采集的指标源,如请求成功率、P99 延迟、队列深度。 |
| SLO | Service Level Objective | 对 SLI 设定的目标阈值,是服务承诺的边界。 | 容量规划的“红线”,决定何时触发扩缩容动作。 |
| 错误预算 | Error Budget | SLO 允许的最大不可用时间或失败次数,即 1 - SLO 对应的量。 | 容量决策的“燃料”:预算充足时可接受更激进的缩容;预算不足时必须优先扩容。 |
关键区分: SLI 是“实际值”,SLO 是“目标值”,错误预算是“可消耗的容错额度”。三者缺一不可,共同构成容量控制的闭环。
2.2 数学关系
假设我们定义 SLI 为“请求成功率”(单位时间内成功请求数 / 总请求数),则核心公式如下:
错误预算 = 总请求量 × (1 - SLO)
示例:
- 总请求量(窗口期) = 1,000,000 次
- SLO = 99.9%(即 0.999)
- 错误预算 = 1,000,000 × (1 - 0.999) = 1,000 次失败
消耗率 = 实际失败次数 / 错误预算
当消耗率 ≥ 100% 时,SLO 被违反。
在 HPA 面板中,错误预算的剩余百分比是核心决策变量:
剩余错误预算 (%) = (错误预算 - 已消耗失败次数) / 错误预算 × 100%
- 剩余 > 50%:安全区,可考虑缩容或维持现状。
- 剩余 20% ~ 50%:警戒区,需评估扩容。
- 剩余 < 20%:危险区,必须立即扩容或限流。
2.3 三者的闭环关系
下图展示了 SLI → SLO → 错误预算 → 容量决策的完整数据流:
2.4 在 HPA 面板中的映射关系
将上述概念映射到 Kubernetes HPA 与 Serverless 容量面板中,形成以下对应关系:
| 理论概念 | HPA / 面板中的具体实现 | 数据来源 |
|---|---|---|
| SLI | 自定义指标(如 http_requests_total、p99_latency_ms) |
Prometheus / CloudWatch / 自定义 Exporter |
| SLO | HPA 配置中的目标值(如 targetAverageValue) |
YAML 配置 / 面板阈值设定 |
| 错误预算 | 面板中的“剩余错误预算 %”仪表盘 + 告警规则 | PromQL 计算(如 1 - (rate(failures[5m]) / rate(requests[5m])) / (1 - SLO)) |
| 容量决策 | HPA 自动扩缩容 / 面板手动调整副本数 | HPA Controller / 人工干预 |
实践建议: 在 Serverless 场景中,建议将错误预算的窗口期设置为 滚动 7 天。这既能平滑短期流量尖峰,又能保证长期服务质量不偏离 SLO。
2.5 常见误区与避坑
- 误区一: 将 SLI 直接当作 SLO。SLI 是测量值,SLO 是目标值,两者不能混用。
- 误区二: 错误预算耗尽后才开始扩容。应在预算剩余 20%~30% 时提前扩容,避免违反 SLO。
- 误区三: 忽略错误预算的“消耗速度”。即使剩余预算充足,若消耗速度过快(如线性增长),也应提前干预。
- 误区四: 在 HPA 中只使用单一 SLI。建议至少同时监控成功率与延迟,避免“成功但缓慢”的假象。
容量风险提示: 当错误预算剩余低于 10% 时,任何突发流量都可能导致 SLO 违反。此时应暂停所有非必要的缩容操作,并考虑临时增加预留资源。