2. SLO 基础概念:SLI、SLO 与错误预算
在构建基于 Runbook 联动的自愈流程之前,必须统一团队对可靠性度量语言的理解。SLI、SLO 与错误预算构成了可靠性工程的三角基石,三者之间的联动关系直接决定了自动化决策的触发条件与恢复目标。
2.1 服务水平指标(SLI)
SLI(Service Level Indicator) 是对服务某个特定维度的质量进行量化的原始测量值。SLI 必须是可采集、可计算、可对比的数值序列。
| 维度 | 常见 SLI 示例 | 采集方式 |
|---|---|---|
| 可用性 | 请求成功率(200 / 总请求) | 负载均衡器日志 / 应用探针 |
| 延迟 | P95 响应时间 ≤ 200ms | APM 工具 / 服务端埋点 |
| 吞吐量 | 每秒请求数(RPS) | 网关指标 / 时序数据库 |
| 错误率 | 5xx 占比 < 1% | 日志聚合 / 监控系统 |
| 饱和度 | CPU 使用率 < 80% | 基础设施监控 |
选型原则:SLI 必须与用户体验强相关。例如,对于 API 网关,优先选择“端到端请求成功率”而非“单个节点存活状态”,因为前者直接反映用户能否获得正确响应。
2.2 服务水平目标(SLO)
SLO(Service Level Objective) 是为 SLI 设定的目标阈值,通常以时间窗口内的达标百分比表示。SLO 是团队与业务之间的可靠性契约。
- 目标窗口:通常为 28 天(滚动窗口)或 30 天(日历窗口)。
- 达标阈值:常见值包括 99.9%(三个九)、99.95%、99.99%(四个九)。
- 多级 SLO:同一服务可设置多个 SLO,例如“核心写入接口 SLO = 99.99%”与“批量查询接口 SLO = 99.9%”。
关键认知:SLO 不是“尽力而为”的期望,而是触发自动化流程的硬边界。当 SLI 持续低于 SLO 时,系统必须进入自愈或降级模式。
2.3 错误预算(Error Budget)
错误预算 是 SLO 的衍生概念,定义为 100% - SLO 所对应的不可用时间或错误次数。错误预算为团队提供了“允许出错的量化额度”。
错误预算 = (1 - SLO) × 总时间窗口
示例:
SLO = 99.9%(三个九)
时间窗口 = 28 天 = 40320 分钟
错误预算 = 0.1% × 40320 = 40.32 分钟
即:在 28 天内,服务最多允许 40.32 分钟处于不可用状态。
| SLO | 28 天错误预算(分钟) | 典型场景 |
|---|---|---|
| 99.9% | 40.32 | 内部工具、非关键业务 |
| 99.95% | 20.16 | 标准在线服务 |
| 99.99% | 4.03 | 核心支付、实时通信 |
2.4 三者的关系与自愈触发逻辑
SLI、SLO 与错误预算构成了一个闭环反馈系统。在自愈流程中,错误预算的消耗速率是 Runbook 联动的核心决策依据。
2.5 错误预算消耗速率与自愈决策
在自愈流程设计中,不仅关注错误预算的值,更关注其消耗速率。消耗速率决定了自动化响应的紧急程度。
- 正常消耗:消耗速率 ≤ 预算 / 窗口时间,系统保持正常状态。
- 快速消耗:消耗速率超过线性预期,触发 Runbook 预检 流程。
- 临界消耗:错误预算剩余 < 20%,触发 自动降级或扩容 流程。
- 耗尽:错误预算归零,触发 最高优先级自愈 或人工介入。
常见误区:不要等到错误预算耗尽才采取行动。当消耗速率在 1 小时内超过线性预算的 2 倍时,就应该启动 Runbook 联动。自愈的目标是“在预算耗尽前恢复”,而非“在耗尽后补救”。
2.6 概念对比总结
| 概念 | 本质 | 单位 | 在自愈中的角色 |
|---|---|---|---|
| SLI | 原始测量 | 百分比 / 毫秒 / 计数 | 自愈流程的输入信号 |
| SLO | 目标契约 | 百分比(如 99.9%) | 自愈流程的触发边界 |
| 错误预算 | 量化容错 | 分钟 / 请求次数 | 自愈流程的优先级依据 |