2. 缓存基础概念:DNS缓存、HTTP缓存、反向代理缓存的工作原理,缓存命中与未命中的影响
2.1 缓存的核心价值与通用模型
在SRE与网络架构视角下,缓存是降低延迟、减少上游负载、提升系统吞吐量的核心手段。所有缓存系统遵循同一抽象模型:
- 存储层:将热数据暂存于高速介质(内存/SSD)。
- 过期策略:TTL(Time-To-Live)或LRU(Least Recently Used)淘汰。
- 一致性协议:源站与缓存节点间的数据同步规则。
SRE关键指标: 缓存命中率(Cache Hit Ratio)是衡量缓存效率的核心SLO。低于80%的命中率通常意味着配置不当或容量不足。
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 工作原理
- 客户端请求到达反向代理。
- 代理根据缓存键(URL + Host + 部分Header)查找本地缓存。
- 命中:直接返回缓存响应。
- 未命中:转发请求到后端,缓存响应副本,再返回客户端。
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值、缓存预热状态、回滚后命中率恢复曲线三项数据。