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 → 错误预算 → 容量决策的完整数据流:

SLI → SLO → 错误预算 → 容量决策闭环 SLI 采集 请求成功率 / P99 延迟 SLO 定义 目标阈值 99.9% 错误预算 剩余百分比 对比 计算 容量决策 扩缩容 / 限流 触发 反馈调整 闭环要点: 1. SLI 实时数据与 SLO 目标对比,计算出错误预算消耗速度。 2. 错误预算剩余比例直接驱动 HPA 面板的扩缩容阈值。 3. 容量调整后,SLI 数据更新,形成持续反馈闭环。

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 违反。此时应暂停所有非必要的缩容操作,并考虑临时增加预留资源。