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 三者的层级关系图

下图展示了从原始指标到商业承诺的完整链路,也是自愈剧本触发条件的来源:

SLI → SLO → SLA 层级关系与自愈触发链路 SLI 服务等级指标 延迟 / 错误率 / 吞吐量 SLO 服务等级目标 P99 ≤ 200ms · 99.9% SLA 服务等级协议 月度可用性 ≥ 99.99% 自愈剧本触发条件 SLI 持续恶化 → 接近 SLO 燃烧预算阈值 → 触发灰度自愈动作 燃烧预算 SLO 允许的违规时间 错误预算 1 - SLO = 可容忍错误 自愈窗口 SLO 违规前的黄金时间 灰度执行策略核心 在燃烧预算耗尽前,通过 SLI 实时反馈,逐步扩大自愈动作的灰度范围

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 作为外部底线,当自愈剧本无法挽回时,触发升级流程(人工介入/赔偿启动)。