基础设施 SLI 分类:计算、网络、存储与中间件

在可观测性工程中,基础设施 SLI 的制定并非一刀切。不同资源类型具有截然不同的故障模式、性能瓶颈和度量单位。将基础设施 SLI 按资源域分类,是设计精准、可操作口径的第一步。本章将基础设施 SLI 划分为四大类:计算资源、网络资源、存储资源和中间件,并逐一拆解其核心关注点与典型参数设计。

2.1 四大分类总览

下表从关注维度、典型故障模式和核心 SLI 指标三个角度,对四类基础设施 SLI 进行横向对比,帮助建立全局认知。

SLI 分类 关注维度 典型故障模式 核心 SLI 指标示例
计算资源 SLI CPU、内存、进程、调度 CPU 饥饿、OOM、线程死锁 CPU 利用率、内存使用率、就绪线程数
网络资源 SLI 带宽、延迟、丢包、连接 网络分区、丢包率飙升、连接耗尽 网络延迟 P99、丢包率、TCP 重传率
存储资源 SLI IOPS、吞吐、延迟、容量 磁盘满、IO 等待、慢查询 磁盘利用率、IO 延迟、读写吞吐
中间件 SLI 队列深度、连接数、请求延迟 消息堆积、连接池耗尽、主从切换 队列长度、客户端连接数、P99 延迟
设计提示: 分类的核心目的是将 SLI 口径与资源自身的故障域对齐。例如,计算资源 SLI 应关注“能否分配 CPU 时间片”,而存储资源 SLI 应关注“IO 请求能否在预期时间内完成”。混用分类口径会导致 SLI 失效。

2.2 计算资源 SLI

计算资源 SLI 主要覆盖 CPU 和 内存 两个维度,同时也包括进程调度和线程状态。其核心目标是衡量计算单元是否能够及时、稳定地分配处理能力。

  • CPU 利用率:通常取 1m/5m 平均,但需注意区分 user/system/iowait。高 iowait 应归入存储 SLI 而非计算 SLI。
  • 内存使用率:关注实际使用量 vs 总量,以及 swap 使用情况。swap 出现通常意味着内存不足。
  • 进程/线程状态:不可中断睡眠(D 状态)进程数、阻塞线程数,反映调度健康度。
  • 上下文切换:过高的上下文切换可能暗示锁竞争或线程数配置不当。
典型口径示例: 计算资源 SLI = 1 - (CPU 饥饿时间 / 总时间窗口)。其中“CPU 饥饿时间”定义为 CPU 利用率持续超过 90% 且 runqueue 长度大于 vCPU 数 2 倍的时间段。

2.3 网络资源 SLI

网络资源 SLI 关注数据在节点间传输的可用性、延迟和可靠性。网络故障往往是分布式系统中影响范围最广的故障类型。

  • 网络延迟:通常使用 ICMP ping 或 TCP 握手延迟,取 P50/P95/P99 分位值。
  • 丢包率:通过探针或内核统计(如 /proc/net/stat)获取,丢包率超过 0.1% 通常需要告警。
  • TCP 重传率:重传段数 / 总发送段数,反映网络拥塞或链路质量。
  • 连接数:当前 ESTABLISHED 连接数 vs 最大连接数,防止连接耗尽。
避坑提醒: 网络 SLI 的采样周期非常关键。过长的采样间隔(如 5m)会掩盖瞬态丢包;过短的间隔(如 1s)则可能引入大量噪声。建议根据业务抖动容忍度,选择 10s-30s 的采样窗口。

2.4 存储资源 SLI

存储资源 SLI 覆盖块存储、文件系统和对象存储。其核心指标围绕 IO 能力和容量展开。

  • 磁盘利用率:已用空间 / 总空间,通常设置 80% 告警阈值,90% 为严重阈值。
  • IO 延迟:平均 IO 等待时间(await),以及读写延迟分位值。SSD 环境下 await 超过 10ms 通常意味着异常。
  • IOPS 与吞吐:每秒读写次数和每秒读写字节数,用于衡量存储性能是否达到预期。
  • inode 使用率:在 Linux 文件系统中,inode 耗尽会导致无法创建新文件,即使磁盘空间仍有剩余。
典型口径示例: 存储 SLI = 成功 IO 请求数 / 总 IO 请求数。其中“成功”定义为 IO 请求在 500ms 内返回且无错误。此口径同时覆盖了可用性和延迟。

2.5 中间件 SLI

中间件 SLI 覆盖消息队列、缓存、数据库代理、负载均衡器等基础设施组件。中间件的故障模式通常与连接状态和队列深度强相关。

  • 队列深度:消息队列中待处理消息的数量。持续增长意味着消费能力不足。
  • 客户端连接数:当前活跃连接 vs 最大连接数,防止连接池耗尽。
  • 请求延迟:中间件处理请求的 P99 延迟,反映组件自身性能。
  • 主从同步延迟:对于有主从架构的中间件(如 Redis、MySQL Proxy),同步延迟是数据一致性的关键指标。
设计提示: 中间件 SLI 的阈值往往需要根据业务流量动态调整。例如,消息队列的“正常”队列深度在促销期间可能是平时的 10 倍。建议使用动态基线或同比环比算法来设定告警阈值。

2.6 分类关系与依赖 SVG 图

下图展示了四类基础设施 SLI 之间的依赖关系与数据流向。理解这种依赖关系,有助于在故障发生时快速定位根因。

基础设施 SLI 分类依赖关系图 基础设施 SLI 分类依赖关系 计算资源 SLI 网络资源 SLI 存储资源 SLI 中间件 SLI 依赖网络通信 远程存储访问 应用调用中间件 说明: 中间件 SLI 同时依赖计算、网络和存储资源。例如,消息队列的延迟 SLI 可能由 CPU 瓶颈(计算)、 网络延迟(网络)或磁盘 IO(存储)共同导致。分类 SLI 有助于在告警时快速定位故障域。

2.7 分类设计原则与常见误区

在实际设计 SLI 分类时,以下原则和误区值得特别关注:

原则 / 误区 说明 示例
原则:单一职责 每个 SLI 只衡量一种资源类型的单一维度 CPU 利用率 SLI 不应混入 IO 等待时间
原则:故障域对齐 SLI 的阈值和口径应与该资源的典型故障模式匹配 存储 SLI 的延迟阈值应基于磁盘类型(SSD vs HDD)设定
误区:过度聚合 将多个资源类型的指标合并为一个 SLI,导致无法定位 “基础设施可用性” = 计算 + 网络 + 存储,故障时无法区分根因
误区:忽略依赖 只关注单一资源,不考虑上下游依赖对 SLI 的影响 网络延迟升高导致存储 IO 超时,却只告警存储 SLI
最佳实践: 建议为每类基础设施 SLI 建立独立的 SLO 和目标。例如,计算资源 SLO 为 99.9%,网络资源 SLO 为 99.99%,存储资源 SLO 为 99.95%。不同 SLO 反映了不同资源域的可靠性要求差异。