2. SLO 基础概念:SLI、SLO 与错误预算

在平台工程中,服务水平目标(SLO)是连接用户期望与基础设施运维的量化桥梁。要正确构建 SLO,必须先理解其三大核心支柱:服务水平指标(SLI)、服务水平目标(SLO)与错误预算(Error Budget)。这三者构成了一个闭环的可靠性管理模型。

2.1 核心定义与关系总览

下图展示了 SLI、SLO 与错误预算之间的核心逻辑关系:SLI 是原始测量数据,SLO 是目标阈值,错误预算则是两者之间的差值,用于驱动运维决策。

SLI、SLO 与错误预算关系图 SLI 服务水平指标 原始测量数据 SLO 服务水平目标 目标阈值(如 99.9%) 错误预算 可容忍的失败 1 - SLO 闭环反馈:SLI 测量 → 对比 SLO → 消耗错误预算 → 触发运维动作 当错误预算耗尽时,应停止发布新功能,优先投入可靠性改进

2.2 服务水平指标(SLI)

SLI 是对服务某个特定维度的量化测量。它是 SLO 的原始数据来源,通常以一段时间内的比率或计数形式呈现。

2.2.1 常见的 SLI 类型

SLI 类型 测量维度 典型指标 平台工程示例
可用性 服务是否正常运行 请求成功数 / 总请求数 API 网关健康检查通过率
延迟 响应速度 P95 / P99 响应时间 容器编排 API 响应时间
吞吐量 处理能力 每秒请求数(RPS) CI/CD 流水线构建吞吐量
准确性 数据或结果正确性 错误响应数 / 总响应数 配置下发正确率
饱和度 资源使用程度 CPU / 内存使用率 集群节点资源饱和度

2.2.2 SLI 定义示例

在平台工程中,一个典型的 SLI 定义包含测量窗口、聚合方式和计数条件:

# 平台 API 可用性 SLI 定义
sli_name: "platform_api_availability"
measurement_window: "28_days"
good_events: "http_status < 500"
total_events: "total_http_requests"
aggregation: "ratio(good_events / total_events)"
最佳实践:SLI 应尽量从用户视角定义。例如,对于开发者自助服务门户,SLI 应测量“用户发起的部署请求成功率”,而非仅测量“后端服务进程是否存活”。

2.3 服务水平目标(SLO)

SLO 是为 SLI 设定的目标阈值。它定义了在特定时间窗口内,服务需要达到的可靠性水平。SLO 是团队与用户之间的内部契约。

2.3.1 SLO 的构成要素

  • 目标 SLI:选择哪个指标作为衡量标准。
  • 目标值:SLI 需要达到的百分比(如 99.9%)。
  • 时间窗口:评估周期(如 28 天、30 天、季度)。
  • 合规条件:如何判定 SLO 是否达成(如“在时间窗口内,SLI 必须 ≥ 目标值”)。

2.3.2 SLO 分级策略

SLO 等级 目标值 适用场景 平台工程示例
核心 SLO 99.99% 关键业务路径,中断即造成重大损失 身份认证服务、API 网关
标准 SLO 99.9% 主要功能,影响用户体验但非致命 CI/CD 流水线、日志收集
尽力 SLO 99.0% 非关键功能,允许短暂不可用 内部文档门户、历史数据查询
常见误区:不要为所有服务设置统一的 99.99% SLO。过高的 SLO 会导致不必要的成本投入和开发速度下降。SLO 应基于用户实际需求和服务重要性进行差异化设定。

2.4 错误预算(Error Budget)

错误预算是 SLO 的衍生概念,定义为 1 - SLO。它量化了服务在特定时间窗口内可以失败的总时间或总请求数。错误预算将可靠性转化为可管理的“预算”,用于平衡稳定性与创新速度。

2.4.1 错误预算计算示例

假设一个平台 API 的 SLO 为 99.9%(时间窗口为 30 天):

总时间窗口 = 30 天 × 24 小时 × 60 分钟 × 60 秒 = 2,592,000 秒
允许的不可用时间 = 2,592,000 秒 × (1 - 0.999) = 2,592 秒 ≈ 43.2 分钟

这意味着该 API 在 30 天内最多只能有 43.2 分钟的不符合 SLI 的时间。一旦超出,错误预算耗尽。

2.4.2 错误预算的运维决策

错误预算状态 运维动作 平台工程影响
充足(> 50%) 正常发布新功能,允许一定风险 CI/CD 流水线保持正常节奏
中等(20% - 50%) 加强监控,限制高风险变更 部署需要额外审批,增加金丝雀发布比例
不足(< 20%) 冻结发布,优先修复可靠性 流水线自动阻止非关键部署,触发告警
耗尽(0%) 立即回滚或停止所有变更 平台自动进入“只读”或“安全模式”

2.5 三者的闭环关系

SLI、SLO 与错误预算共同构成了一个持续改进的闭环:

  1. 测量(SLI):持续收集服务的真实表现数据。
  2. 评估(SLO):将 SLI 与预设的目标阈值进行对比。
  3. 计算(错误预算):根据对比结果计算剩余的错误预算。
  4. 决策(运维动作):基于错误预算状态,决定是否发布新功能或投入可靠性改进。
  5. 调整(反馈):根据实际运行效果,调整 SLO 目标值或 SLI 定义。
平台工程中的集成价值:通过基础设施即代码(IaC)将 SLO 和错误预算策略声明式地定义在代码仓库中,可以实现自动化告警、自动阻止部署、自动触发回滚等操作,将可靠性管理从“人工盯屏”转变为“代码驱动”。