2. SLO 基础概念:SLO、SLI、SLA 定义与三者关系

在构建服务画像与可靠性运营体系之前,必须精确理解三个核心术语:SLI(服务等级指标)、SLO(服务等级目标)和 SLA(服务等级协议)。这三者构成了可靠性度量与承诺的完整链条,也是后续误差预算计算与台账管理的基石。

2.1 SLI:服务等级指标(Service Level Indicator)

SLI 是对服务某个特定维度的直接量化度量,通常表现为一个随时间变化的数值或比率。SLI 是客观的、可采集的原始数据,不包含任何“好坏”判断。

  • 定义:SLI = 符合预期行为的样本数 / 总样本数 × 100%
  • 常见维度:可用性、延迟、吞吐量、错误率、饱和度。
  • 采集方式:服务端日志、客户端埋点、中间件指标、拨测探针。
SLI 维度 典型指标名称 度量单位 采集示例
可用性 请求成功率 百分比(%) HTTP 200 / 总请求数
延迟 P99 响应时间 毫秒(ms) 99% 请求在 200ms 内完成
吞吐量 每秒请求数(RPS) 次/秒 Prometheus rate() 函数
错误率 5xx 占比 百分比(%) 5xx 响应 / 总响应数
饱和度 CPU 使用率 百分比(%) node_cpu_seconds_total
实践要点:SLI 必须可自动化采集,避免人工上报。优先选择对用户体验影响最直接的维度,例如“首页加载 P95 延迟”比“服务器 CPU 空闲率”更能反映真实服务质量。

2.2 SLO:服务等级目标(Service Level Objective)

SLO 是为 SLI 设定的目标阈值或范围,代表服务所有者期望达到的可靠性水平。SLO 是内部承诺,用于指导工程决策和运营节奏。

  • 定义:SLO = SLI 的目标值 + 合规窗口(例如:过去 30 天滚动窗口内,99.9% 的请求延迟 ≤ 200ms)。
  • 表达形式:通常为“X% 的请求在 Y 时间内完成”或“每月可用性不低于 Z%”。
  • 合规窗口:常见窗口包括 7 天、28 天、30 天滚动窗口或日历月。
SLO 示例:
“在过去 28 天的滚动窗口内,99.9% 的 HTTP GET /api/v1/orders 请求的响应时间 ≤ 300ms。”
其中 SLI = P99 延迟,SLO 阈值 = 300ms,目标达成率 = 99.9%。

2.3 SLA:服务等级协议(Service Level Agreement)

SLA 是服务提供方与客户/用户之间签订的正式合同或协议,明确约定了服务的最低可靠性水平,以及未达标时的惩罚或补偿条款。

  • 定义:SLA = 对外承诺的 SLO + 业务后果(赔偿、服务抵扣、违约金)。
  • 关键特征:具有法律约束力;通常比内部 SLO 宽松(预留安全缓冲);包含明确的测量方法和争议解决机制。
  • 常见条款:月度可用性 ≥ 99.99%,否则按比例退还当月服务费。
重要区分:SLA 是商业合同,SLO 是技术目标。不要将内部 SLO 直接写入 SLA,否则一旦 SLO 违约将触发法律赔偿。通常内部 SLO 比 SLA 严格 1~2 个 9(例如 SLA 99.9%,内部 SLO 设为 99.99%)。

2.4 三者关系:从度量到承诺的完整链路

SLI、SLO、SLA 构成了一条从原始数据 → 内部目标 → 外部承诺的递进关系链。理解这一链条是运营误差预算的前提。

SLI → SLO → SLA 递进关系图 SLI 服务等级指标 SLO 服务等级目标 SLA 服务等级协议 设定目标 对外承诺 核心关系总结 SLI 是原始度量 → SLO 是内部目标 → SLA 是商业合同 SLO 必须比 SLA 更严格,预留误差预算缓冲

2.5 三者对比速查表

维度 SLI SLO SLA
本质 原始度量数据 内部目标阈值 外部商业合同
受众 工程师、监控系统 工程团队、管理层 客户、法务、销售
约束力 无 内部纪律 法律约束
严格程度 如实反映 比 SLA 严格 比 SLO 宽松
变更频率 随系统变化 季度/月度评审 合同周期(年)
违约后果 无直接后果 触发误差预算告警 赔偿/罚款

2.6 典型运营场景中的三者联动

以一个电商平台的“订单查询接口”为例,展示 SLI → SLO → SLA 在实际运营中的联动关系:

  1. 定义 SLI:采集过去 5 分钟内所有 /api/orders 请求的响应时间,计算 P99 延迟值。
  2. 设定 SLO:过去 28 天滚动窗口内,P99 延迟 ≤ 500ms 的占比 ≥ 99.9%。
  3. 签订 SLA:合同约定月度可用性 ≥ 99.95%,若低于此值则退还当月 10% 服务费。
  4. 运营动作:当 SLO 接近违约(误差预算剩余不足 20%)时,工程团队冻结新功能发布,优先修复性能问题。
关键公式:
误差预算 = 1 − SLO 目标值
例如:SLO = 99.9%,则误差预算 = 0.1%。
当实际 SLI 消耗的误差预算超过 100% 时,SLO 违约。