2. SLO 基础概念:SLI、SLO、错误预算的定义与数学关系

在基于 SLO 反推容量压测水位的设计中,首先需要建立三个核心概念:SLI(服务等级指标)、SLO(服务等级目标)和错误预算。这三者构成了可观测性与容量管理的数学基础。

2.1 SLI:服务等级指标

SLI 是对服务质量的直接量化度量,通常表示为一段时间内“好事件”占总事件的比例。常见的 SLI 类型包括:

SLI 类型 定义 典型指标
可用性 请求成功比例 HTTP 200 / 总请求数
延迟 响应时间在阈值内的比例 p99 延迟 < 200ms 的请求占比
吞吐量 单位时间处理请求数 QPS / RPS
错误率 失败请求比例 5xx 错误 / 总请求数
饱和度 资源使用程度 CPU 使用率 / 内存使用率
容量视角提示:在压测场景中,延迟 SLI 和错误率 SLI 是最敏感的指标。当系统接近容量极限时,延迟会先于错误率出现拐点,因此延迟 SLI 常被用作容量水位的早期预警信号。

2.2 SLO:服务等级目标

SLO 是为 SLI 设定的目标阈值,表示服务提供方承诺达到的质量水平。SLO 通常以“时间窗口内的百分比”形式定义:

  • 示例 1:“在 30 天滚动窗口内,99.9% 的请求延迟低于 200ms”
  • 示例 2:“在 7 天窗口内,99.99% 的请求返回 HTTP 2xx/3xx”
  • 示例 3:“在 1 小时窗口内,错误率不超过 0.1%”

SLO 的严格程度直接影响容量规划策略:

SLO 等级 允许不可用时间/月 容量冗余要求
99.9%(三个九) 约 43 分钟 中等
99.99%(四个九) 约 4.3 分钟 较高
99.999%(五个九) 约 26 秒 极高

2.3 错误预算:SLO 的数学衍生

错误预算 = 1 − SLO,表示在时间窗口内允许的“坏事件”总量。它是连接 SLO 与运维决策的桥梁。

核心公式:
错误预算 = 总事件数 × (1 − SLO)
消耗的错误预算 = 总事件数 × 错误率
剩余错误预算 = 错误预算 − 已消耗错误预算

示例计算:某服务月总请求数为 10,000,000,SLO 为 99.9%:

错误预算 = 10,000,000 × (1 − 0.999) = 10,000 次错误
如果本月已发生 6,000 次错误,则:
剩余错误预算 = 10,000 − 6,000 = 4,000 次错误
错误预算消耗率 = 6,000 / 10,000 = 60%

2.4 三者的数学关系与容量映射

SLI、SLO 和错误预算构成一个闭环反馈系统,其数学关系可概括为:

  1. 测量:实时计算 SLI = 好事件数 / 总事件数
  2. 比较:将 SLI 与 SLO 阈值比较,判断是否达标
  3. 预算:计算剩余错误预算 = 总预算 − 已消耗预算
  4. 决策:当错误预算消耗过快时,触发容量评估或限流

在容量压测场景中,这一关系转化为:

压测水位阈值 = f(SLI 拐点, 错误预算消耗速率)
其中:
  SLI 拐点 = 延迟或错误率开始急剧上升的负载点
  错误预算消耗速率 = 单位时间消耗的错误预算 / 总错误预算
常见误区:不要将 SLO 直接等同于容量阈值。SLO 是长期目标,而容量压测需要找到“SLI 开始劣化”的短期拐点。错误预算的作用是告诉你“还有多少空间可以承受短期劣化”。
SLI、SLO、错误预算闭环关系 SLI 测量 好事件 / 总事件 SLO 目标 99.9% 延迟 < 200ms 错误预算 1 − SLO = 0.1% 容量决策 压测水位 / 扩缩容 对比 推导 消耗速率触发 调整负载 闭环:SLI 实时测量 → 与 SLO 对比 → 计算错误预算消耗 → 触发容量决策 → 调整后重新测量 SLI

2.5 容量压测中的错误预算视角

在容量规划中,错误预算提供了风险量化的数学基础:

  • 高错误预算剩余:可以承受更高强度的压测,快速探索系统极限
  • 低错误预算剩余:压测需谨慎,优先保障生产稳定性
  • 错误预算消耗速率:反映系统劣化速度,用于确定压测步长
压测水位口径公式(初步):
安全压测水位 = 当前负载 × (1 + 剩余错误预算比例 × 安全系数)
其中安全系数通常取 0.3~0.7,取决于服务的重要程度