1. SLI / SLO 基础概念
在开始误差预算与性能调优之前,必须统一对 SLI、SLO 和 SLA 的认知。这三个术语常被混用,但在 SRE 实践中各自承担截然不同的职责。本章从定义、区别到黄金信号,建立可观测性调优的度量基石。
1.1 SLI 定义
SLI(Service Level Indicator,服务等级指标) 是衡量服务质量某一维度的原始量化值。SLI 必须是可采集、可计算、可对比的数值,通常以比率或延迟分位数呈现。
- 延迟 SLI:请求响应时间,如 P99 ≤ 200ms
- 错误 SLI:请求失败率,如 HTTP 5xx 占比 ≤ 1%
- 流量 SLI:请求吞吐量,如 QPS = 5000
- 饱和度 SLI:资源使用程度,如 CPU 使用率 ≤ 80%
实践要点:SLI 必须定义明确的采集窗口(如 1 分钟粒度)和聚合方式(如平均值、分位数)。避免使用“感觉慢”这类主观描述。
1.2 SLO 定义
SLO(Service Level Objective,服务等级目标) 是为 SLI 设定的目标阈值,是团队承诺的服务质量边界。SLO 通常表述为“在某个时间窗口内,SLI 达到某标准的比例”。
| 维度 | SLI 示例 | SLO 示例 |
|---|---|---|
| 延迟 | P99 延迟 | 过去 30 天,P99 延迟 ≤ 200ms 的比例 ≥ 99.9% |
| 错误 | HTTP 5xx 率 | 过去 7 天,错误率 ≤ 0.1% 的比例 ≥ 99.95% |
| 饱和度 | CPU 使用率 | 过去 24 小时,CPU ≤ 80% 的比例 ≥ 99% |
常见误区:SLO 不是“理想值”,而是可容忍的边界。设置过紧的 SLO(如 99.999%)会导致频繁告警和无效运维;设置过松则失去质量保障意义。
1.3 SLA 区别
SLA(Service Level Agreement,服务等级协议) 是对外承诺的法律或商业条款,通常比 SLO 更宽松。SLO 是内部目标,SLA 是外部契约。
| 对比项 | SLO | SLA |
|---|---|---|
| 受众 | 内部工程团队 | 客户 / 业务方 |
| 严格程度 | 更严格(预留误差预算) | 更宽松(含赔偿条款) |
| 调整频率 | 按需迭代 | 合同周期固定 |
| 违反后果 | 触发告警、复盘 | 赔偿、法律追责 |
核心原则:SLO 必须比 SLA 更严格。例如 SLA 承诺 99.9% 可用性,内部 SLO 应设为 99.95%,预留 0.05% 的误差预算作为缓冲。
1.4 黄金信号(Golden Signals)
Google SRE 团队定义了四个黄金信号,覆盖用户可感知的服务质量全维度。任何系统的可观测性建设都应从这四个信号开始。
- 延迟(Latency):请求处理耗时。关注高延迟是否由慢响应导致,而非仅看平均值。
- 流量(Traffic):系统负载水平。如 QPS、RPS、并发连接数。
- 错误(Errors):显式错误(5xx)+ 隐式错误(如返回 200 但业务逻辑失败)。
- 饱和度(Saturation):资源耗尽程度。CPU、内存、磁盘 I/O、连接池等。
1.5 SLI 到 SLO 的映射关系
每个 SLO 必须绑定至少一个 SLI。一个 SLI 可以服务于多个 SLO,但每个 SLO 只能有一个目标值。下图展示从原始指标到服务等级承诺的完整链路。
关键认知:误差预算 = 1 - SLO。例如 SLO 为 99.9%,则误差预算为 0.1%。这个预算决定了团队可以承受多少故障而不触发惩罚,也是后续性能调优中“是否值得优化”的决策依据。
1.6 本章小结
- SLI 是度量什么——可量化的服务质量指标。
- SLO 是目标值——内部承诺的服务质量边界。
- SLA 是契约——对外承诺,附带赔偿条款。
- 黄金信号 是度量维度——延迟、流量、错误、饱和度,缺一不可。
- 误差预算连接 SLO 与调优决策,是后续案例实战的核心工具。