2. SLO 设计原则:如何定义有效的 SLO
SLO(Service Level Objective)是服务等级目标,是连接用户期望与系统行为的量化桥梁。一个无效的 SLO 会导致错误预算形同虚设,自愈剧本要么过度触发,要么永远沉默。本节从目标值设定、燃烧速率与错误预算三个维度,拆解有效 SLO 的设计原则。
2.1 目标值设定:从用户旅程反推阈值
SLO 的目标值不应来自“系统能跑多快”,而应来自“用户能忍受多慢”。设计步骤:
- 识别关键用户旅程:登录、搜索、下单、支付等核心流程。
- 定义良好事件(Good Event):请求成功且延迟在阈值内。
- 设定目标窗口:通常为 30 天滑动窗口。
- 确定目标百分比:常见值为 99.9%、99.95%、99.99%。
经验法则:SLO 目标值应比用户实际容忍度宽松 10%-20%。例如用户能接受 500ms 延迟,SLO 可设为 99.9% 请求在 400ms 内完成,留出缓冲避免频繁告警。
| 服务类型 | 典型 SLO | 用户容忍度参考 | 错误预算(30天) |
|---|---|---|---|
| 关键 API(支付/登录) | 99.99% | 延迟 < 200ms | 4.32 分钟 |
| 核心业务(搜索/推荐) | 99.9% | 延迟 < 500ms | 43.2 分钟 |
| 非关键(历史记录/报表) | 99.5% | 延迟 < 2s | 3.6 小时 |
2.2 燃烧速率:错误预算的消耗速度
燃烧速率(Burn Rate)衡量错误预算消耗的快慢。它直接决定自愈剧本的触发时机与紧急程度。
燃烧速率公式:
Burn Rate = (1 - 实际 SLI) / (1 - SLO 目标)
例如:SLO 目标为 99.9%,实际 SLI 为 99.7%,则 Burn Rate = (1 - 0.997) / (1 - 0.999) = 0.003 / 0.001 = 3。意味着错误预算消耗速度是预期的 3 倍。
关键阈值:
- Burn Rate < 1:健康状态,无需干预。
- 1 ≤ Burn Rate < 2:轻度消耗,可触发低优先级自愈。
- 2 ≤ Burn Rate < 5:中度消耗,触发中优先级自愈。
- Burn Rate ≥ 5:严重消耗,触发高优先级自愈或人工介入。
2.3 错误预算:自愈剧本的“弹药”
错误预算 = (1 - SLO 目标) × 时间窗口。它是系统允许的“犯错时间”。自愈剧本的灰度执行策略必须围绕错误预算的剩余量动态调整。
错误预算状态与自愈策略对照表:
| 错误预算剩余 | 状态 | 自愈剧本执行策略 | 灰度比例 |
|---|---|---|---|
| > 80% | 充裕 | 仅执行低风险自愈(日志清理、缓存预热) | 1% 流量 |
| 50% - 80% | 正常 | 执行常规自愈(重启、限流、降级) | 5% 流量 |
| 20% - 50% | 紧张 | 执行高风险自愈(扩容、切流、回滚) | 10% 流量 |
| < 20% | 危急 | 停止自愈,人工介入 | 0%(全量人工) |
常见陷阱:不要将错误预算视为“可以浪费的资源”。频繁消耗错误预算会导致自愈剧本在真正需要时失去灰度空间。建议设置“错误预算警戒线”(如剩余 30%),提前触发人工复盘。
2.4 多指标 SLO 组合设计
单一 SLO 无法覆盖系统全貌。推荐使用 SLI 黄金信号 组合:
- 延迟(Latency):请求响应时间,通常取 p50/p95/p99。
- 流量(Traffic):QPS、RPS、并发连接数。
- 错误(Errors):HTTP 5xx、超时、业务错误码。
- 饱和度(Saturation):CPU、内存、连接池使用率。
组合示例:
# 支付服务 SLO 组合
slo_payment:
latency_p99: 99.9% 请求 < 200ms
error_rate: 99.99% 请求无 5xx
saturation: CPU 使用率 < 80%
window: 30d
当任一指标违反 SLO 时,错误预算独立计算,自愈剧本根据最差指标触发。
2.5 设计检查清单
在定义 SLO 时,逐项核对以下问题:
- 用户视角:SLO 是否反映真实用户体验?
- 可测量性:SLI 是否可以从现有监控系统直接获取?
- 目标合理性:SLO 是否比用户容忍度宽松 10%-20%?
- 窗口选择:滑动窗口是否足够长以过滤毛刺,又足够短以反映近期状态?
- 错误预算联动:自愈剧本的灰度比例是否与错误预算剩余量挂钩?
- 多指标覆盖:是否覆盖延迟、流量、错误、饱和度四个黄金信号?
核心结论:有效的 SLO 是自愈剧本灰度执行的“红绿灯”。目标值设定决定绿灯范围,燃烧速率指示黄灯预警,错误预算剩余量控制红灯触发。三者联动,才能让自愈系统既不过度敏感,也不反应迟钝。