SLO 基础回顾:定义、SLI 与错误预算的关系
在深入调优部署频率与变更失败率之前,必须重新锚定 SLO 的核心概念。SLO 不是简单的“可用性百分比”,而是一套由 SLI(服务等级指标)、SLO(目标)和错误预算构成的闭环反馈系统。本节将拆解这三个要素的定义及其数学关系。
1. 核心概念定义
| 术语 | 定义 | 示例(API 服务) |
|---|---|---|
| SLI | 服务质量的量化指标,直接反映用户体验 | 请求延迟 ≤ 200ms 的比例 |
| SLO | SLI 的目标阈值,是团队承诺的服务水平 | 99.9% 的请求延迟 ≤ 200ms |
| 错误预算 | SLO 允许的最大不可用时间或失败次数 | 每月最多 43.2 分钟超时 |
关键区分:SLO 是目标,不是承诺。SLA(服务等级协议)才是对外承诺,通常比 SLO 更宽松。内部 SLO 应比 SLA 严格 10%-20%,为故障预留缓冲。
2. SLI 与错误预算的数学关系
错误预算的计算公式非常简单,但理解其业务含义是 SRE 的核心能力:
错误预算 = 总时间窗口 × (1 - SLO)
示例(30 天窗口,SLO = 99.9%):
总秒数 = 30 × 24 × 3600 = 2,592,000 秒
错误预算 = 2,592,000 × (1 - 0.999) = 2,592 秒 ≈ 43.2 分钟
这意味着:在一个月内,服务最多只能有 43.2 分钟的“坏请求”(延迟 > 200ms 或 5xx 错误)。一旦消耗完毕,所有变更必须冻结,直到下一个窗口重置。
常见误区:错误预算不是“可用时间”,而是“允许失败的时间”。如果服务在月初就耗尽预算,说明 SLI 严重偏离目标,需要立即停止变更并启动复盘,而不是继续发布。
3. SLI 选择原则:用户视角优先
不是所有指标都适合作为 SLI。Google SRE 经典原则是:只测量用户能感知到的行为。以下是 SLI 选择的四个黄金维度:
- 可用性:请求成功比例(如 HTTP 200/5xx 比率)
- 延迟:响应时间分布(如 p99 ≤ 500ms)
- 吞吐量:每秒处理请求数(通常作为容量规划指标,不直接用于 SLO)
- 正确性:数据一致性或业务逻辑正确率(如支付成功率)
对于部署频率与变更失败率调优,最相关的 SLI 通常是可用性和延迟——变更失败会直接导致这两个指标恶化。
4. 错误预算消耗与变更风险的关系
下图展示了 SLI、SLO 与错误预算在变更周期中的动态关系:
5. 错误预算消耗速率:变更调优的关键指标
仅仅知道剩余错误预算是不够的,SRE 需要关注消耗速率。以下是两种典型场景的对比:
| 场景 | 剩余预算 | 消耗速率 | 建议操作 |
|---|---|---|---|
| 月初剩余 90% | 充足 | 缓慢(日均消耗 0.3%) | 正常发布,可适当加速 |
| 月中剩余 20% | 紧张 | 快速(日均消耗 3%) | 立即冻结变更,启动根因分析 |
| 月末剩余 5% | 濒危 | 加速(日均消耗 5%) | 仅允许紧急热修复,其余冻结 |
调优切入点:部署频率与变更失败率直接决定错误预算消耗速率。如果每次变更的失败率是 5%,每天部署 10 次,则每天消耗 0.5% 的预算(假设每次失败消耗 0.05%)。通过降低失败率或减少部署次数,可以显著延长预算寿命。
6. 多层级 SLO 架构
在实际服务目录中,不同组件应有不同的 SLO 粒度。下图展示了一个典型的三层 SLO 架构:
7. 本节要点总结
- SLI 是测量指标,SLO 是目标阈值,错误预算 是允许的失败空间。
- 错误预算 = 总时间 × (1 - SLO),消耗速率比剩余量更重要。
- 变更失败直接消耗错误预算,部署频率决定消耗速度。
- 多层级 SLO 架构中,组件级 SLO 是变更调优的切入点。
- 错误预算耗尽时应立即冻结变更,而非继续发布。