3. SLO 基础概念:SLO、SLI、SLA 与错误预算
在平台工程中,SLO(服务等级目标)是连接用户期望与工程执行的核心契约。要理解 SLO,必须先厘清 SLI(服务等级指标)和 SLA(服务等级协议)的定义,并掌握错误预算这一关键管理工具。本节将系统梳理三者的关系,并展示如何通过错误预算驱动部署频率与可靠性决策。
3.1 核心定义与对比
| 术语 | 英文全称 | 定义 | 典型示例 |
|---|---|---|---|
| SLI | Service Level Indicator | 服务等级指标,是衡量服务质量某一维度的具体量化指标。 | 请求延迟 P99 ≤ 200ms;可用性 = 成功请求数 / 总请求数 |
| SLO | Service Level Objective | 服务等级目标,是团队承诺达到的 SLI 目标值或范围。 | 月度可用性 ≥ 99.9%;P99 延迟 ≤ 200ms 的请求占比 ≥ 95% |
| SLA | Service Level Agreement | 服务等级协议,是面向用户或客户的正式合同,包含未达 SLO 的惩罚条款。 | 可用性 < 99.9% 时,退还当月 10% 服务费 |
关键区别: SLI 是测量值,SLO 是目标值,SLA 是合同承诺。平台工程团队通常只对内承诺 SLO,对外 SLA 由业务/法务团队定义。
3.2 三者的层级关系
SLI、SLO、SLA 构成一个从测量到承诺的递进关系。下图展示了这一层级结构:
3.3 错误预算概念
错误预算(Error Budget)是 SLO 的衍生管理工具,它将可靠性目标转化为可量化的“失败额度”。其核心公式为:
错误预算 = 1 - SLO(以百分比表示)
例如:SLO = 99.9% → 错误预算 = 0.1% 的时间窗口
错误预算的消耗与剩余状态直接决定团队能否进行变更部署:
- 预算充足(剩余 > 0): 允许正常部署,鼓励快速迭代。
- 预算耗尽(剩余 ≤ 0): 冻结所有非关键变更,优先投入稳定性修复。
- 预算消耗速率: 监控 SLI 的实时偏差,预测预算耗尽时间。
实践建议: 平台工程团队应将错误预算可视化到 CI/CD 流水线中。当部署触发时,流水线自动检查当前错误预算状态,若预算不足则阻断部署并提示原因。
3.4 错误预算与部署频率的联动
错误预算为部署频率提供了客观的“安全边界”。下图展示了基于错误预算的部署决策流程:
3.5 常见误区与避坑指南
常见误区:
- SLO 设置过高: 追求 99.999% 可用性但无对应投入,导致错误预算几乎为零,部署频繁冻结。
- SLI 选择不当: 只监控服务端可用性,忽略客户端真实体验(如首屏加载时间)。
- 错误预算不透明: 仅 SRE 团队可见,开发团队无法感知预算消耗,导致部署决策混乱。
3.6 平台工程中的落地要点
| 实践维度 | 具体措施 |
|---|---|
| SLI 采集 | 在平台侧统一接入 Prometheus/OpenTelemetry,定义标准 SLI 采集规则(延迟、错误率、饱和度)。 |
| SLO 定义 | 使用 ServiceLevelObjective CRD(如 Google SLO 或 Sloth)声明式定义 SLO,与 GitOps 流水线集成。 |
| 错误预算可视化 | 在开发者门户(如 Backstage)中嵌入错误预算仪表盘,实时展示预算消耗速率与剩余时间。 |
| 部署门禁 | 在 CI/CD 流水线中增加错误预算检查步骤,预算不足时自动阻断并通知相关责任人。 |
核心原则: SLO 不是限制创新的枷锁,而是为部署频率提供安全边界的导航仪。错误预算让团队在“快速交付”与“稳定运行”之间做出数据驱动的权衡。