2. SLO 基础概念:服务等级目标
服务等级目标(Service Level Objective, SLO)是可观测性与站点可靠性工程(SRE)的核心度量锚点。它不是一个简单的“阈值”,而是服务所有者与用户之间关于“服务应该好到什么程度”的明确契约。理解 SLO 的定义、它与 SLI/SLA 的关系以及常见类型,是构建服务画像与误差预算体系的第一步。
2.1 SLO 的定义
SLO 是一个具体的、可量化的目标值,它规定了在特定时间窗口内,某个服务等级指标(SLI)必须达到的期望水平。SLO 通常以百分比形式表示,并附带一个时间范围。
核心公式:
SLO = 目标值(如 99.9%) + 时间窗口(如 30 天)
示例:在过去 30 天内,服务可用性 SLI 必须 ≥ 99.9%。
SLO = 目标值(如 99.9%) + 时间窗口(如 30 天)
示例:在过去 30 天内,服务可用性 SLI 必须 ≥ 99.9%。
SLO 的关键特征包括:
- 用户视角驱动:SLO 应基于用户可感知的体验,而非内部基础设施指标。
- 可测量与可追踪:必须能够通过 SLI 持续测量,并实时计算达标情况。
- 误差预算的边界:SLO 定义了“好”与“坏”的边界,两者之间的差值即为误差预算。
- 动态调整:随着服务画像变化,SLO 需要定期审视与更新。
2.2 SLO 与 SLI / SLA 的关系
这三者构成了服务等级管理的金字塔结构。理解它们之间的层级关系,是避免概念混淆的关键。
| 概念 | 定义 | 核心特征 | 示例 |
|---|---|---|---|
| SLI (服务等级指标) |
衡量服务质量好坏的原始度量指标。 | 可观测、可采集、可计算。 | 请求延迟 P99、错误率、吞吐量 QPS。 |
| SLO (服务等级目标) |
为 SLI 设定的具体目标阈值。 | 可量化、有时间窗口、是内部承诺。 | P99 延迟 ≤ 200ms(过去 7 天)。 |
| SLA (服务等级协议) |
与客户签订的法律/商业合同。 | 有惩罚条款、通常比 SLO 宽松。 | 月度可用性 ≥ 99.9%,否则赔偿。 |
实践要点:SLA 是商业承诺,SLO 是工程目标。通常 SLA 会设置得比 SLO 更宽松(例如 SLA 为 99.9%,内部 SLO 为 99.95%),以预留误差预算缓冲,避免触发赔偿。
下图展示了 SLI → SLO → SLA 的层级关系与数据流向:
2.3 SLO 的常见类型
在服务画像中,最常见的 SLO 类型围绕三个核心维度:可用性、延迟和吞吐量。此外,正确率(错误率)也常作为关键指标。
2.3.1 可用性(Availability)SLO
衡量服务在给定时间窗口内正常响应请求的能力。通常以“多少个 9”表示。
- 定义:成功请求数 / 总请求数 × 100%
- 常见目标:99.9%(3个9)、99.99%(4个9)
- 典型场景:核心数据库、用户认证服务、支付网关。
2.3.2 延迟(Latency)SLO
衡量服务响应请求的速度。通常使用百分位数(Percentile)来避免平均值掩盖长尾问题。
- 定义:特定百分位(如 P50、P99)的请求完成时间。
- 常见目标:P99 延迟 ≤ 200ms,P50 延迟 ≤ 50ms。
- 典型场景:API 网关、前端页面渲染、实时推荐服务。
2.3.3 吞吐量(Throughput)SLO
衡量服务在单位时间内能处理的请求量或数据量。
- 定义:每秒请求数(QPS)、每秒事务数(TPS)、每秒数据量(MB/s)。
- 常见目标:峰值 QPS ≥ 10,000,日均处理量 ≥ 1 亿条。
- 典型场景:消息队列、日志采集系统、CDN 边缘节点。
常见误区:不要只设置一个 SLO。一个完整的服务画像通常需要组合多个 SLO(如“可用性 99.9% 且 P99 延迟 ≤ 200ms”),才能全面反映服务质量。单一维度的 SLO 容易掩盖其他维度的劣化。
下表总结了三种常见 SLO 类型的对比:
| 类型 | 核心度量 | 典型目标值 | 用户感知影响 | 常见陷阱 |
|---|---|---|---|---|
| 可用性 | 成功请求占比 | 99.9% ~ 99.999% | 服务完全不可用 | 忽略健康检查请求的干扰 |
| 延迟 | 百分位响应时间 | P99 ≤ 200ms | 页面加载慢、接口超时 | 只关注平均值,忽略长尾 |
| 吞吐量 | 单位时间请求量 | 峰值 QPS ≥ 10k | 请求排队、限流触发 | 未区分正常流量与攻击流量 |
下图展示了三种 SLO 类型在服务调用链中的监控位置与相互关系:
2.4 小结
SLO 是连接用户期望与工程执行的桥梁。通过明确 SLI → SLO → SLA 的层级关系,并围绕可用性、延迟、吞吐量等核心维度设定目标,团队可以量化服务质量、建立误差预算机制,并为后续的服务画像动态更新奠定基础。