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 构成一个从测量到承诺的递进关系。下图展示了这一层级结构:

SLI → SLO → SLA 层级关系 SLI:服务等级指标 原始测量数据:延迟、错误率、吞吐量、饱和度 SLO:服务等级目标 基于 SLI 设定的目标阈值:可用性 ≥ 99.9% SLA:服务等级协议 合同约束:未达标则触发赔偿 SLI 是基础测量,SLO 是内部目标,SLA 是外部契约

3.3 错误预算概念

错误预算(Error Budget)是 SLO 的衍生管理工具,它将可靠性目标转化为可量化的“失败额度”。其核心公式为:

错误预算 = 1 - SLO(以百分比表示)
例如:SLO = 99.9% → 错误预算 = 0.1% 的时间窗口

错误预算的消耗与剩余状态直接决定团队能否进行变更部署:

  • 预算充足(剩余 > 0): 允许正常部署,鼓励快速迭代。
  • 预算耗尽(剩余 ≤ 0): 冻结所有非关键变更,优先投入稳定性修复。
  • 预算消耗速率: 监控 SLI 的实时偏差,预测预算耗尽时间。
实践建议: 平台工程团队应将错误预算可视化到 CI/CD 流水线中。当部署触发时,流水线自动检查当前错误预算状态,若预算不足则阻断部署并提示原因。

3.4 错误预算与部署频率的联动

错误预算为部署频率提供了客观的“安全边界”。下图展示了基于错误预算的部署决策流程:

错误预算驱动的部署决策流程 监控 SLI 数据 计算错误预算剩余 预算 > 0? 允许部署 冻结部署 错误预算剩余 > 0 时部署继续;预算耗尽时部署冻结,优先修复可靠性

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 不是限制创新的枷锁,而是为部署频率提供安全边界的导航仪。错误预算让团队在“快速交付”与“稳定运行”之间做出数据驱动的权衡。