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 缓存请求流程中的位置与关系:
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,两者差距过大时需深入分析对象大小分布。