4. 缓存命中率核心指标:定义与计算

在 Envoy 驱动的灾备缓存体系中,衡量缓存效果不能仅凭“命中了几次”。我们需要一组精确的量化指标来评估缓存是否真正降低了后端负载、缩短了响应时间。本节将定义三个最核心的指标:命中率 (Hit Ratio)、字节命中率 (Byte Hit Ratio) 和 缓存效率 (Cache Efficiency),并给出它们的计算公式与适用场景。

4.1 命中率 (Hit Ratio)

命中率是最直观的缓存指标,表示所有缓存查询请求中,成功从缓存获取到数据的比例。它直接反映了缓存对请求数量的过滤能力。

指标 定义 计算公式 典型值参考
命中率 (HR) 缓存命中的请求次数占总请求次数的百分比 HR = (Cache Hits) / (Cache Hits + Cache Misses) × 100% 静态资源:90%–99%
动态API:60%–85%
Envoy 实践提示: 在 Envoy 的统计输出中,cluster.{name}.upstream_rq_200 与 cluster.{name}.upstream_rq_4xx 等指标不能直接用于命中率计算。你需要启用 Lua 过滤器 或 外部授权 来标记缓存命中/未命中,或者使用 Envoy 的 metadata 动态属性来区分。

4.2 字节命中率 (Byte Hit Ratio)

字节命中率从数据传输量的角度衡量缓存效果。它关注的是:从缓存返回的字节数占所有响应字节数的比例。这个指标对于带宽敏感的场景(如边缘缓存、CDN、跨区域灾备)尤为重要。

指标 定义 计算公式 适用场景
字节命中率 (BHR) 缓存命中的响应体字节数占总响应字节数的百分比 BHR = (Cache Hit Bytes) / (Cache Hit Bytes + Cache Miss Bytes) × 100% 大文件分发、视频流、软件包镜像
注意: 命中率与字节命中率可能差异巨大。例如:缓存命中 100 个小文件(每个 1KB),但未命中 1 个大文件(10MB)。此时 HR = 99%,但 BHR ≈ 9.9%。在灾备场景中,字节命中率更能反映对跨区域带宽的节省效果。

4.3 缓存效率 (Cache Efficiency)

缓存效率是一个综合指标,它结合了命中率与缓存服务的资源消耗(如内存占用、CPU 开销)。它回答的是:“我们投入的缓存资源是否带来了足够的收益?”

指标 定义 计算公式 说明
缓存效率 (CE) 单位缓存资源(如每 GB 内存)带来的命中请求数或节省的带宽 CE = (Cache Hits per second) / (Cache Memory in GB)
或
CE = (Bytes Saved per second) / (Cache Memory in GB)
用于评估缓存策略的经济性,指导扩容或缩容

4.4 三指标关系与对比

下面这张 SVG 图展示了三个指标在 Envoy 缓存请求流程中的位置与关系:

缓存命中率核心指标关系图 客户端请求 Envoy 缓存层 (Lua / External Cache) 缓存命中 缓存未命中 直接返回 回源后端 三个指标的计算锚点 ① 命中率 (HR) 计数点:Envoy 缓存层决策分支 → 统计命中/未命中请求次数 公式:HR = 命中次数 / (命中次数 + 未命中次数) × 100% ② 字节命中率 (BHR) 计数点:响应体字节数 → 统计命中响应字节 vs 未命中响应字节 公式:BHR = 命中字节数 / (命中字节数 + 未命中字节数) × 100%

4.5 综合计算示例

假设一个 Envoy 缓存实例在 5 分钟内的统计数据如下:

指标项 数值
缓存命中次数 8,000
缓存未命中次数 2,000
命中响应总字节数 120 MB
未命中响应总字节数 80 MB
缓存分配内存 4 GB

计算过程:

命中率 (HR) = 8000 / (8000 + 2000) × 100% = 80%

字节命中率 (BHR) = 120 MB / (120 MB + 80 MB) × 100% = 60%

缓存效率 (CE) = 8000 次 / 4 GB = 2000 次/GB
(或按字节:120 MB / 4 GB = 30 MB/GB)
关键洞察: 本例中 HR = 80% 看似不错,但 BHR 只有 60%,说明未命中的请求携带了更大的响应体。在灾备场景中,这意味着跨区域回源流量仍然很高。优化方向应优先针对大对象的缓存策略,而非单纯提升小对象的命中次数。

4.6 指标选择建议

  • 日常巡检与告警: 优先使用 命中率 (HR),它最敏感,能快速反映缓存是否正常工作。
  • 带宽成本评估: 使用 字节命中率 (BHR),直接关联跨区域流量费用。
  • 资源规划与扩容: 使用 缓存效率 (CE),判断是否需要增加内存或调整淘汰策略。
  • 综合健康度: 同时监控 HR 和 BHR,两者差距过大时需深入分析对象大小分布。