2. 缓存命中率核心指标
缓存命中率是衡量 Envoy 灾备缓存系统效率最直接的量化指标。它反映了请求在缓存层被直接满足的比例,直接关联到后端回源压力、响应延迟和整体系统稳定性。本节从定义、计算、影响因子和行业基准四个维度展开,为后续巡检和优化建立统一的度量标尺。
2.1 缓存命中率定义与计算方式
缓存命中率(Cache Hit Ratio, CHR)是指在特定时间窗口内,Envoy 直接从缓存中成功响应请求的次数占总请求次数的百分比。与之对应的是缓存未命中率(Cache Miss Ratio, CMR),两者之和为 100%。
| 指标 | 定义 | 计算公式 |
|---|---|---|
| 缓存命中率 (CHR) | 缓存直接响应的请求占比 | CHR = (Cache Hits / Total Requests) × 100% |
| 缓存未命中率 (CMR) | 需要回源或重新计算的请求占比 | CMR = (Cache Misses / Total Requests) × 100% |
| 字节命中率 (BHR) | 从缓存中直接提供的字节数占比 | BHR = (Cache Bytes / Total Response Bytes) × 100% |
巡检要点:在 Envoy 的统计输出中,
cluster.{name}.upstream_rq_completed 代表总请求数,cluster.{name}.upstream_rq_200 等状态码计数需结合缓存层(如 Redis、Memcached)的 get_hits 和 get_misses 指标联合计算。建议同时监控请求命中率和字节命中率,因为小对象高命中率可能掩盖大对象频繁未命中的问题。
2.2 影响缓存命中率的核心因子
Envoy 灾备场景下,缓存命中率并非孤立指标,它受以下五个关键因子共同作用:
- 缓存容量与淘汰策略:容量不足导致频繁驱逐(Eviction),LRU/LFU/TTL 策略的选择直接影响热数据留存率。
- 请求分布与热点倾斜度:遵循 Zipf 分布的请求天然具有高命中率潜力;均匀分布或长尾请求会显著拉低命中率。
- 缓存键设计:键粒度过细(如包含时间戳、用户 ID)会导致缓存碎片化,几乎无法命中;键粒度过粗则可能引发缓存雪崩。
- 数据有效期(TTL):TTL 过短导致缓存频繁过期重建;TTL 过长则数据新鲜度下降,灾备场景下可能返回过期数据。
- 灾备切换行为:主集群故障触发灾备切换时,缓存预热未完成、路由规则变更、连接池重建等都会造成瞬时命中率暴跌。
Envoy 特有因子:Envoy 的
route_config 动态更新、hedge(对冲请求)和 retry(重试)策略会放大后端请求计数,导致统计层面的命中率失真。巡检时需区分“Envoy 视角的请求数”与“缓存层视角的请求数”。
2.3 行业基准值与分级标准
缓存命中率没有的“满分”值,不同业务场景的合理区间差异显著。以下基准值基于大规模生产环境(CDN、API 网关、微服务缓存)的统计归纳,适用于 Envoy 灾备场景的参考对标:
| 业务场景 | 优秀区间 | 良好区间 | 需关注区间 | 危险区间 |
|---|---|---|---|---|
| 静态资源(图片/JS/CSS) | ≥ 95% | 90% – 94% | 80% – 89% | < 80% |
| API 响应缓存(读密集) | ≥ 85% | 75% – 84% | 60% – 74% | < 60% |
| 数据库查询结果缓存 | ≥ 90% | 80% – 89% | 65% – 79% | < 65% |
| 灾备切换后预热期 | ≥ 70%(30分钟内) | 50% – 69% | 30% – 49% | < 30% |
| 会话/状态缓存 | ≥ 99% | 95% – 98% | 85% – 94% | < 85% |
灾备场景特别警示:灾备切换后的“预热期”命中率基准与稳态不同。切换后 5 分钟内命中率可能低于 20%,这是正常现象。但如果 30 分钟后仍低于 50%,说明缓存预热机制或容量规划存在严重缺陷,需要立即介入。
2.4 命中率与系统健康的关联模型
缓存命中率不是孤立数字,它与后端负载、响应延迟、错误率之间存在明确的量化关联。理解这些关联,才能在巡检中快速定位根因:
- 命中率下降 10% → 后端 QPS 上升 30%~50%(取决于缓存 miss 是否触发重试/对冲)
- 命中率低于 60% → P99 延迟可能翻倍(回源路径增加网络往返和计算开销)
- 命中率剧烈波动(±20% 以上)→ 通常伴随缓存雪崩或热点失效
- 字节命中率远低于请求命中率 → 大对象缓存策略需要优化
2.5 命中率巡检的黄金指标组合
在实际 Envoy 灾备巡检中,建议同时采集以下五个指标形成“命中率健康面板”:
| 指标名称 | Envoy/缓存层来源 | 巡检阈值 | 异常行为 |
|---|---|---|---|
| 请求命中率 | envoy_cluster_upstream_rq_* + 缓存 get_hits |
≥ 80%(稳态) | 持续低于 60% 或单次跌幅 > 15% |
| 字节命中率 | 缓存层 bytes_served / bytes_requested |
≥ 75% | 与请求命中率偏差 > 20% |
| 驱逐率 | 缓存层 evicted_keys / 秒 |
< 1% 总键数/小时 | 驱逐率突增 > 5 倍基线 |
| 过期率 | 缓存层 expired_keys / 秒 |
< 2% 总键数/小时 | 过期率突增 > 3 倍基线 |
| 回源延迟比 | envoy_cluster_upstream_rq_time / 缓存命中延迟 |
回源延迟 ≤ 3× 缓存命中延迟 | 回源延迟 > 5× 缓存命中延迟 |
巡检自动化建议:将上述五个指标封装为 Prometheus 告警规则,设置多级阈值(Warning / Critical)。在灾备切换场景下,自动将 Warning 阈值放宽 50%(例如命中率从 80% 降至 60% 才告警),避免切换期间产生大量误报。