2. SLI 基础概念:从定义到特征再到视角

在构建 SLO 之前,必须先理解 SLI(Service Level Indicator,服务等级指标)。SLI 是 SLO 的量化基础,也是误差预算计算的原始输入。如果 SLI 定义错误,后续所有 SLO 和误差预算都将失去意义。本节从定义、特征和视角三个层面建立 SLI 的完整认知。

2.1 SLI 定义

SLI 是对服务某个特定维度(如延迟、可用性、吞吐量)的直接量化测量值,通常表示为一段时间内的比率、分布或计数。SLI 不是主观感受,而是可采集、可聚合、可对比的数值。

维度 SLI 示例 测量方式
可用性 请求成功比率 成功响应数 / 总请求数
延迟 P95 响应时间 排序后第 95 百分位的响应时间
吞吐量 每秒请求数 时间窗口内请求总数 / 窗口时长
错误率 HTTP 5xx 比率 5xx 响应数 / 总响应数
饱和度 CPU 使用率 已用 CPU / 总 CPU 容量
关键公式: SLI = 好事件计数 / 总事件计数。例如:SLI可用性 = (总请求数 - 失败请求数) / 总请求数。

2.2 好的 SLI 特征

并非所有可测量的指标都适合作为 SLI。一个高质量的 SLI 应具备以下五个特征:

  1. 可测量性(Measurable):指标必须能从监控系统、日志或探针中稳定采集,且采集频率满足 SLO 窗口要求。
  2. 可理解性(Understandable):团队所有成员(包括非技术角色)都能理解该指标的含义和业务影响。
  3. 可行动性(Actionable):当 SLI 恶化时,团队能明确知道该采取什么修复动作。
  4. 用户相关性(User-relevant):SLI 必须反映真实用户体验,而非仅反映基础设施内部状态。
  5. 稳定性(Stable):指标不应因微小波动而剧烈变化,避免噪声干扰 SLO 判断。
实践建议: 优先选择“用户可感知”的 SLI。例如,使用“页面加载时间 P95”而非“服务器 CPU 平均负载”,因为前者直接关联用户体验。

2.3 用户视角与系统视角的 SLI

SLI 的定义视角决定了 SLO 的适用场景。两种视角的差异如下:

对比维度 用户视角 SLI 系统视角 SLI
测量点 客户端、浏览器、用户终端 服务器端、中间件、基础设施
关注对象 端到端体验(如首屏时间) 组件健康度(如数据库查询延迟)
典型指标 Apdex 分数、页面完全加载时间 CPU 使用率、磁盘 IO 延迟
优势 直接反映业务影响 易于定位根因、粒度细
劣势 受网络、客户端环境影响大 可能偏离真实用户体验
SLO 适用场景 外部客户承诺、业务 SLA 内部运维目标、容量规划

在实际工程中,用户视角 SLI 用于对外承诺,系统视角 SLI 用于对内调试。两者应建立映射关系:当系统视角 SLI 恶化时,能预测用户视角 SLI 的变化趋势。

常见误区: 只定义系统视角 SLI 而忽略用户视角 SLI。这会导致 SLO 达标但用户仍然投诉的情况。例如:服务器 CPU 正常,但 CDN 回源延迟导致用户页面加载缓慢。

2.4 SLI 视角关系图

下图展示了用户视角与系统视角 SLI 在服务架构中的位置关系,以及它们如何共同支撑 SLO 定义:

用户视角与系统视角 SLI 关系图 用户终端 用户视角 SLI 页面加载时间 / Apdex / 端到端成功率 系统视角 SLI CPU / 延迟 P99 / 错误率 / 饱和度 映射关系:系统 SLI 恶化 → 用户 SLI 受影响 例如:数据库 P99 延迟 > 500ms → 页面加载时间 > 3s SLO 定义与误差预算计算 用户视角 → 对外承诺 系统视角 → 对内调试

2.5 SLI 选择决策流程

在实际项目中,选择正确的 SLI 需要遵循以下步骤:

  1. 识别关键用户旅程:列出用户最常使用的 3-5 个核心功能路径。
  2. 确定体验维度:对每个旅程,选择可用性、延迟、吞吐量中的 1-2 个维度。
  3. 选择测量点:决定在客户端还是服务端采集数据。
  4. 定义好事件标准:明确什么算“成功”或“正常”。例如:HTTP 状态码 200-399 且响应时间 < 2s。
  5. 验证可采集性:确认现有监控系统能否稳定输出该指标。
案例: 一个电商平台的“商品搜索”用户旅程,选择用户视角 SLI 为“搜索响应时间 P95 < 1.5s”,系统视角 SLI 为“搜索引擎查询延迟 P99 < 500ms”。当系统视角 SLI 超标时,团队立即扩容搜索集群,确保用户视角 SLI 不突破 SLO。

2.6 常见 SLI 定义错误与修正

错误类型 错误示例 问题分析 正确做法
指标过于笼统 “系统可用性” 未区分用户请求与健康检查 “用户请求成功率(排除健康检查)”
忽略长尾 “平均延迟” 平均值掩盖了慢请求 “P95 或 P99 延迟”
视角错位 用“CPU 使用率”做客户 SLO 客户不关心 CPU 用“API 响应时间”替代
窗口过短 “每分钟错误率” 噪声大,难以判断趋势 “5 分钟滑动窗口错误率”