1. SLO 基础概念:什么是 SLO、SLI、SLA
在开始构建自愈剧本之前,必须统一三个核心术语的定义。SLO、SLI、SLA 是可靠性工程的基石,混淆它们会导致剧本目标错位、告警阈值混乱、自愈动作误触发。
1.1 三者的定义
| 术语 | 全称 | 一句话定义 |
|---|---|---|
| SLI | Service Level Indicator | 服务质量的可量化测量指标,例如请求延迟 P99、错误率、吞吐量。 |
| SLO | Service Level Objective | SLI 的目标阈值,例如“P99 延迟 ≤ 200ms,在 30 天滚动窗口内达到 99.9%”。 |
| SLA | Service Level Agreement | 对客户或业务方的正式承诺,通常附带惩罚条款,例如“月度可用性 ≥ 99.99%,否则赔付 10% 月费”。 |
记忆口诀:SLI 是数据,SLO 是目标,SLA 是合同。没有 SLI,SLO 是空谈;没有 SLO,SLA 是赌博。
1.2 三者的区别与联系
区别体现在用途、严格程度、受众三个维度;联系体现在逐层收敛的关系上:SLI → SLO → SLA。
| 对比维度 | SLI | SLO | SLA |
|---|---|---|---|
| 用途 | 观测与度量 | 内部目标与告警依据 | 外部承诺与法律约束 |
| 严格程度 | 无严格性,仅记录 | 严格,但允许偶尔违反 | 最严格,违反即赔偿 |
| 受众 | SRE / 研发 / 运维 | SRE / 研发 / 产品 | 客户 / 法务 / 商务 |
| 时间窗口 | 实时或近实时 | 滚动窗口(7天/30天) | 月度/季度/年度 |
| 是否可协商 | 不可协商,客观数据 | 内部可调整 | 合同期内不可变 |
联系:SLA 必须比 SLO 宽松,SLO 必须比 SLI 的原始数据严格。例如:SLI 显示 P99 延迟 180ms,SLO 设定为 200ms(99.9%),SLA 承诺 300ms(99.99%)。这种梯度为自愈剧本留出了燃烧预算和响应时间。
关键原则:永远不要让 SLO 等于 SLA。SLO 是内部红线,SLA 是外部底线。两者之间必须保留至少 10%~20% 的缓冲空间,否则一次 SLO 违规就会直接触发 SLA 赔偿。
1.3 三者的层级关系图
下图展示了从原始指标到商业承诺的完整链路,也是自愈剧本触发条件的来源:
1.4 实际案例:电商下单链路
以电商平台的“提交订单”接口为例,展示 SLI → SLO → SLA 的落地映射:
- SLI 选择:
- 请求成功率(200/5xx 比例)
- P95 延迟(毫秒)
- 每分钟订单提交数(吞吐量)
- SLO 设定:
- 成功率 ≥ 99.9%(30 天滚动窗口)
- P95 延迟 ≤ 500ms(30 天滚动窗口)
- 吞吐量 ≥ 1000 req/min(5 分钟窗口)
- SLA 承诺:
- 月度可用性 ≥ 99.95%(含赔偿条款)
- P95 延迟 ≤ 1000ms(月度均值)
常见误区:不要将 SLI 直接用作 SLO。例如“P99 延迟 150ms”是 SLI,但“P99 延迟 ≤ 200ms 且 99.9% 时间达标”才是 SLO。缺少时间窗口和达标率的 SLO 无法用于自愈剧本的燃烧预算计算。
1.5 自愈剧本中的角色定位
| 角色 | 在自愈剧本中的职责 |
|---|---|
| SLI | 作为实时传感器,持续上报服务质量数据,驱动自愈剧本的触发与回滚判断。 |
| SLO | 作为内部红线,定义燃烧预算的消耗速率,决定自愈动作的灰度步长与暂停条件。 |
| SLA | 作为外部底线,当自愈剧本无法挽回时,触发升级流程(人工介入/赔偿启动)。 |