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