2. SLO与SLI基础:服务等级指标(SLI)定义、服务等级目标(SLO)设定原则、SLI/SLO与Error Budget的关系
在实施Error Budget驱动的变更窗口优化之前,必须建立一套可量化的服务健康度衡量体系。SLI(服务等级指标)与SLO(服务等级目标)正是这套体系的基石。没有明确的SLI和SLO,Error Budget将失去计算依据,变更窗口的优化也无从谈起。
2.1 服务等级指标(SLI)定义
SLI(Service Level Indicator)是对服务某个特定维度的量化测量值,通常表示为一段时间内的比率、百分比或速率。SLI回答的问题是:“服务现在表现如何?”
2.1.1 SLI的核心特征
- 可测量性:必须能够通过监控系统持续采集,而非主观判断。
- 用户视角:优先测量用户实际感知到的服务质量,而非内部基础设施指标。
- 有限性:每个服务通常只定义3~5个关键SLI,避免指标泛滥。
2.1.2 常见SLI分类与示例
| 维度 | 典型SLI | 测量方式 |
|---|---|---|
| 可用性 | 请求成功率 | 成功响应数 / 总请求数 |
| 延迟 | P99响应时间 | 第99百分位的请求响应耗时 |
| 吞吐量 | 每秒请求数(QPS) | 单位时间内的请求总量 |
| 完整性 | 数据持久化成功率 | 写入成功事件数 / 总写入事件数 |
| 新鲜度 | 数据延迟时间 | 最新数据时间戳与当前时间的差值 |
实践建议: 优先定义可用性和延迟两个维度的SLI。对于大多数在线服务,这两个指标直接决定了用户体验的优劣。例如,一个电商平台的“商品详情页加载”SLI可以定义为:
P99延迟 < 500ms 且 HTTP 200状态码比率 > 99.9%。
2.2 服务等级目标(SLO)设定原则
SLO(Service Level Objective)是为SLI设定的目标阈值,它定义了服务在正常运营期间应达到的健康水平。SLO回答的问题是:“服务应该表现多好?”
2.2.1 SLO设定的核心原则
- 以用户为中心:SLO必须反映用户可接受的服务质量底线。不要追求理论上的100%,因为那既不现实也不经济。
- 基于历史数据:在设定初始SLO时,应参考过去1~3个月的实际SLI数据,确保目标“跳一跳够得着”。
- 留有余量:SLO不应等于SLI的极限值。例如,如果系统极限可用性是99.99%,SLO可设定为99.95%,为Error Budget预留空间。
- 分层设定:不同重要性的服务应有不同的SLO。核心支付服务SLO可能为99.99%,而内部日志服务SLO可能为99.9%。
2.2.2 SLO的常见表达形式
- 比率型:在滚动时间窗口(如30天)内,SLI ≥ 目标值。例如:“过去30天内,请求成功率 ≥ 99.9%”。
- 百分位型:针对延迟指标。例如:“过去7天内,P99延迟 ≤ 200ms”。
- 复合型:同时满足多个条件。例如:“过去28天内,可用性 ≥ 99.95% 且 P99延迟 ≤ 300ms”。
常见误区: 不要将SLO设定为100%。100%的目标意味着零故障容忍,这会导致:① 开发团队不敢做任何变更;② Error Budget永远为0,失去优化窗口的意义;③ 运维成本指数级上升。Google SRE实践表明,99.99%的可用性目标已经属于极高要求。
2.3 SLI/SLO与Error Budget的关系
Error Budget(错误预算)是连接SLI/SLO与变更管理的关键桥梁。它量化了服务在SLO允许范围内可以“犯错”的总量。
2.3.1 Error Budget的计算公式
Error Budget = 1 - SLO
例如:
- 若 SLO = 99.9%,则 Error Budget = 0.1%
- 若 SLO = 99.99%,则 Error Budget = 0.01%
在30天的时间窗口内:
- 总时间 = 30天 × 24小时 × 60分钟 × 60秒 = 2,592,000秒
- 允许的不可用时间 = 2,592,000秒 × Error Budget
- SLO 99.9% → 允许不可用 2,592秒 ≈ 43.2分钟
- SLO 99.99% → 允许不可用 259.2秒 ≈ 4.32分钟
2.3.2 三者的动态关系
SLI是实时测量值,SLO是目标阈值,Error Budget是剩余可用额度。三者的关系可以用以下流程描述:
2.3.3 Error Budget的消耗与恢复机制
Error Budget并非静态值,它在时间窗口内动态变化:
- 消耗:当SLI低于SLO时,消耗Error Budget。例如,SLO为99.9%,某小时实际SLI为99.8%,则消耗0.1%的预算。
- 恢复:当SLI高于SLO时,Error Budget会随时间窗口滚动而恢复。例如,在30天滚动窗口内,过去的不良表现会逐渐移出窗口。
- 阈值触发:当Error Budget消耗超过50%时,应触发预警;消耗超过80%时,应冻结非紧急变更。
关键洞察: Error Budget将“服务质量”与“变更速度”解耦。当预算充足时,团队可以加速变更以追求创新;当预算紧张时,团队应优先保障稳定性。这种机制避免了“一刀切”的变更审批流程,实现了数据驱动的精细化运维。
2.4 本章小结:SLI/SLO/Error Budget的协同作用
| 要素 | 作用 | 对变更窗口的影响 |
|---|---|---|
| SLI | 实时量化服务健康度 | 提供变更前后的效果对比数据 |
| SLO | 设定可接受的服务质量底线 | 定义变更是否安全的判断标准 |
| Error Budget | 量化可容忍的故障总量 | 决定变更窗口的开放/冻结状态 |