2. 缓存基础概念:DNS缓存、HTTP缓存、反向代理缓存的工作原理,缓存命中与未命中的影响

2.1 缓存的核心价值与通用模型

在SRE与网络架构视角下,缓存是降低延迟、减少上游负载、提升系统吞吐量的核心手段。所有缓存系统遵循同一抽象模型:

  1. 存储层:将热数据暂存于高速介质(内存/SSD)。
  2. 过期策略:TTL(Time-To-Live)或LRU(Least Recently Used)淘汰。
  3. 一致性协议:源站与缓存节点间的数据同步规则。
SRE关键指标: 缓存命中率(Cache Hit Ratio)是衡量缓存效率的核心SLO。低于80%的命中率通常意味着配置不当或容量不足。
通用缓存工作模型 客户端请求 缓存节点 (DNS/HTTP/反向代理) 源站/上游 请求 未命中时回源 响应 + 缓存填充 命中时直接返回 ⚡ 核心流程: ① 客户端请求 → ② 缓存节点检查是否命中 → ③ 命中则直接返回;未命中则回源拉取并填充缓存 → ④ 返回响应。

2.2 DNS缓存:域名解析的加速器

DNS缓存发生在递归解析器、操作系统、浏览器三个层级。其工作原理基于资源记录(RR)中的TTL字段。

层级 缓存位置 默认TTL 典型影响
浏览器DNS缓存 Chrome net::HostCache 60s 减少页面加载DNS查询时间
操作系统DNS缓存 /etc/hosts + systemd-resolved 取决于OS配置 影响所有应用进程
递归解析器缓存 CoreDNS / Unbound / BIND 遵循SOA MINIMUM 决定DNS解析速度
CoreDNS巡检要点: 检查 cache 插件的 prefetch 和 serve_stale 配置。当上游DNS故障时,serve_stale 可提供过期缓存作为降级方案,避免解析完全中断。

2.2.1 DNS缓存命中与未命中的影响

  • 命中:延迟通常在 0.1ms – 1ms,零上游负载,用户体验最佳。
  • 未命中:延迟增加至 10ms – 100ms+(取决于上游递归链),消耗上游QPS配额,可能触发超时重试。
  • 缓存污染:恶意或错误DNS记录被缓存,导致流量被劫持或服务不可达。

2.3 HTTP缓存:Web性能的基石

HTTP缓存由请求头(Cache-Control、If-Modified-Since)和响应头(Expires、ETag)共同控制。浏览器和CDN边缘节点是主要缓存实体。

2.3.1 缓存控制策略对比

指令 方向 含义 典型场景
max-age=3600 响应 缓存有效期3600秒 静态资源(JS/CSS/图片)
no-cache 响应 每次使用前需向源站验证 动态API但允许条件请求
no-store 响应 禁止任何缓存 敏感数据(支付/个人隐私)
private 响应 仅允许浏览器缓存,禁止CDN 用户个性化内容
public 响应 允许所有中间缓存 公开静态资源

2.3.2 命中与未命中的影响

  • 命中(HIT):延迟 1ms – 5ms,源站零负载,带宽消耗仅边缘出站。
  • 未命中(MISS):延迟 50ms – 500ms,源站承受完整请求压力,带宽消耗翻倍(回源+响应)。
  • 过期验证(REVALIDATED):通过 If-None-Match 或 If-Modified-Since 返回304,延迟较低但仍有上游交互。
⚠ 常见陷阱: 动态API误设 max-age 导致用户看到过期数据;或 Cache-Control: public 泄露用户隐私。SRE应使用 Cache-Control: no-store 保护敏感接口。

2.4 反向代理缓存:架构级加速

反向代理缓存(如Nginx、Varnish、Envoy)位于客户端与后端服务之间,缓存完整的HTTP响应。它不同于浏览器缓存,是服务器端共享缓存。

2.4.1 工作原理

  1. 客户端请求到达反向代理。
  2. 代理根据缓存键(URL + Host + 部分Header)查找本地缓存。
  3. 命中:直接返回缓存响应。
  4. 未命中:转发请求到后端,缓存响应副本,再返回客户端。
反向代理缓存架构 用户 浏览器/APP 反向代理缓存 Nginx / Varnish / Envoy 缓存键: URL + Host 后端服务集群 App Server / API 数据库 / 微服务 HTTP请求 回源(未命中) 响应 + 缓存填充 缓存响应 📊 缓存命中率对架构的影响 • 命中率 > 90%:后端负载极低,延迟 < 5ms,带宽节省显著。 • 命中率 < 60%:后端压力大,延迟波动明显,需检查缓存键设计或TTL策略。

2.4.2 命中与未命中的影响

状态 延迟 后端负载 带宽消耗 典型原因
HIT 1-3ms 无 仅边缘出站 热数据、合理TTL
MISS 50-200ms 增加1倍 回源+出站双倍 首次请求、缓存驱逐
PASS 50-200ms 增加1倍 回源+出站双倍 请求带Cookie/Authorization
STALE 1-3ms 异步验证 仅边缘出站 serve_stale配置生效

2.5 三种缓存的对比总结

维度 DNS缓存 HTTP缓存 反向代理缓存
缓存对象 域名→IP映射 HTTP响应体+头 完整的HTTP响应
缓存位置 客户端/递归器 浏览器/CDN 代理服务器
过期控制 TTL(秒级) Cache-Control/ETag TTL + 主动失效API
命中延迟 < 1ms < 5ms < 3ms
未命中延迟 10-100ms 50-500ms 50-200ms
SRE关注点 TTL一致性、缓存污染 缓存策略配置、隐私 缓存键设计、命中率监控
巡检回滚关联: 在CoreDNS准入核验中,DNS缓存TTL的变更(如从60s改为600s)可能引发解析延迟故障。回滚记录必须包含变更前TTL值、缓存预热状态、回滚后命中率恢复曲线三项数据。