2. SLO基础概念
在平台工程中,服务水平目标(SLO)是连接用户期望与基础设施运维的量化桥梁。要正确构建 SLO,必须先理解其三大核心支柱:服务水平指标(SLI)、服务水平目标(SLO)与错误预算(Error Budget)。这三者构成了一个闭环的可靠性管理模型。
2.1 核心定义与关系总览
下图展示了 SLI、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 与错误预算共同构成了一个持续改进的闭环:
- 测量(SLI):持续收集服务的真实表现数据。
- 评估(SLO):将 SLI 与预设的目标阈值进行对比。
- 计算(错误预算):根据对比结果计算剩余的错误预算。
- 决策(运维动作):基于错误预算状态,决定是否发布新功能或投入可靠性改进。
- 调整(反馈):根据实际运行效果,调整 SLO 目标值或 SLI 定义。
平台工程中的集成价值:通过基础设施即代码(IaC)将 SLO 和错误预算策略声明式地定义在代码仓库中,可以实现自动化告警、自动阻止部署、自动触发回滚等操作,将可靠性管理从“人工盯屏”转变为“代码驱动”。