1. 缓存水位概念

1.1 什么是缓存水位

缓存水位(Cache Water Level)是指缓存系统中已用存储容量占最大可用容量的百分比,是衡量缓存空间使用状态的核心指标。它直接反映了缓存实例的负载程度和剩余容量,是运维人员判断缓存是否需要扩容、迁移或清理的关键依据。

缓存水位通常以百分比形式表示,计算公式为:

缓存水位 = (已用缓存容量 / 最大可用缓存容量) × 100%

例如,一个 Redis 实例最大内存为 32 GB,当前已使用 24 GB,则缓存水位为 75%。

关键认知:缓存水位不是静态值,而是随业务流量、数据写入策略、过期淘汰机制动态变化的实时指标。SRE 需要持续监控水位变化趋势,而非仅关注瞬时值。

1.2 缓存水位与缓存容量的关系

缓存水位与缓存容量之间存在明确的映射关系,理解这一关系是制定水位阈值的基础。下表总结了不同水位区间对应的容量状态与潜在风险:

水位区间 容量状态 典型特征 潜在风险
0% – 40% 低水位(充裕) 内存充足,淘汰策略几乎不触发 资源浪费,可能存在过度分配
40% – 70% 中水位(正常) 日常运行区间,淘汰偶发 需关注增长趋势,提前规划扩容
70% – 85% 高水位(警戒) 淘汰策略频繁触发,响应延迟上升 缓存命中率下降,服务抖动风险
85% – 95% 超高水位(危险) 内存接近饱和,写入性能显著下降 OOM 风险、数据逐出加剧、连锁故障
95% – 100% 满水位(临界) 写入阻塞或拒绝,服务不可用 缓存雪崩、业务大面积受损
实践建议:缓存容量规划应遵循"水位上限预留 30%"原则,即最大使用量不超过容量的 70%,为突发流量和故障转移留出缓冲空间。

1.3 水位阈值定义

水位阈值是 SRE 团队为缓存系统设定的告警与干预边界值,通常分为三个层级:

  • 警告阈值(Warning):水位达到此值时触发告警,提示运维人员关注并评估趋势。一般设为 70% – 75%。
  • 严重阈值(Critical):水位达到此值时需立即介入处理,如扩容、限流或手动清理。一般设为 85% – 90%。
  • 紧急阈值(Emergency):水位达到此值时系统已处于危险边缘,需执行应急预案。一般设为 95%。

阈值定义需结合业务场景动态调整,以下为不同缓存类型的推荐阈值参考:

缓存类型 警告阈值 严重阈值 紧急阈值 说明
Redis(纯内存) 70% 85% 95% 内存敏感,需严格管控
Memcached 75% 88% 95% LRU 淘汰机制较激进
本地缓存(Caffeine) 80% 90% 98% JVM 堆内缓存,受 GC 影响
CDN 边缘缓存 65% 80% 90% 考虑带宽与存储双重因素
避坑提醒:不要将阈值设得过于接近 100%。缓存系统在接近满水位时,内存碎片、淘汰开销、主从同步延迟都会非线性增长,实际可用容量往往低于理论值。建议将紧急阈值控制在 95% 以内。

1.4 缓存水位概念关系图

下图展示了缓存水位、容量、阈值三者之间的逻辑关系,以及水位上升过程中各阶段对应的运维动作:

缓存水位概念关系图 缓存水位 已用容量 / 最大容量 × 100% 缓存容量 最大可用内存 / 存储空间 水位阈值 Warning / Critical / Emergency 水位区间与对应运维动作 0% – 40% 低水位 · 监控 40% – 70% 中水位 · 规划 70% – 85% 高水位 · 告警 85% – 95% 超高水位 · 扩容 95% – 100% 满水位 · 应急 核心公式与阈值设定原则 • 缓存水位 = (已用容量 / 最大容量) × 100% • 阈值设定遵循"预留 30% 缓冲空间"原则,避免水位逼近极限 • 不同缓存类型(Redis / Memcached / 本地缓存)阈值需差异化配置

1.5 水位阈值设定流程

在实际 SRE 工作中,水位阈值的设定应遵循以下标准化流程:

  1. 容量摸底:统计缓存实例的最大可用容量,包括主节点、副本节点、持久化开销等。
  2. 业务峰值分析:收集过去 3–6 个月的业务流量峰值数据,评估水位增长速率。
  3. 阈值初设:根据缓存类型和业务容忍度,设定 Warning / Critical / Emergency 三级阈值。
  4. 压测验证:在预发环境模拟水位上升场景,验证阈值触发后的告警与自动扩缩容是否正常。
  5. 灰度上线:先在非核心业务缓存实例上应用新阈值,观察 1–2 个完整业务周期。
  6. 持续调优:根据实际告警频率、误报率、漏报率,每季度调整一次阈值参数。
最佳实践:建议将水位阈值配置为动态值,结合时间维度(如白天/夜间、工作日/节假日)自动切换不同阈值组,避免因业务潮汐导致误告警。