从通信原理角度看待缓存机制
扫描二维码
随时随地手机看文章
分层视角:缓存如何在通信栈中运作
1. 应用层缓存
场景:HTTP 缓存 (浏览器/CDN/反向代理)
原理:浏览器根据 Cache-Control (如 max-age=3600) 将静态资源(JS/CSS/图片)存储在本地;CDN 节点缓存热资源,用户请求命中边缘节点而非源站。
通信优化:减少 80%+ 的重复 HTTP 请求(YSlow 数据);降低 RTT(Round-Trip Time)延迟,从 200ms(跨省)→ 10ms(本地节点)
2. 传输层缓存
场景:TCP 快速重传/滑动窗口
原理:维护发送缓冲区,存储已发送未确认的数据包;存储乱序到达的数据包,等待重组(如 TCP Reassembly)。
通信优化:避免重复传输丢失包(通过 ACK + 冗余确认触发快速重传);滑动窗口机制允许持续发送多包,无需等待单包确认。
3. 网络层缓存
场景:路由器转发缓存(FIB/RIB)
原理:存储频繁使用的路由条目(如最长前缀匹配表);本地网络 IP-MAC 地址映射(如 192.168.1.1 → 00:11:22:33:44:55)。
通信优化:减少路由查找时间(硬件转发表 TCAM 加速);避免重复 ARP 广播请求。
4. 数据链路层缓存
场景:交换机 MAC 地址表
原理:交换机学习源 MAC 地址与端口的映射,缓存到 CAM 表。
通信优化:目标 MAC 已知时无需广播(单播转发),降低冲突域压力。
缓存带来的通信挑战
1. 一致性问题
场景:用户 A 更新数据,用户 B 从缓存读取旧值。
解决方案:缓存键含数据版本号(如 data_v2);Raft/Paxos 协调多节点缓存失效。
2. 缓存穿透/击穿/雪崩
穿透-查询不存在的数据(绕过缓存)-布隆过滤器拦截非法 Key
击穿-热点Key失效瞬间高并发击垮后端互斥锁重建缓存
雪崩-大量缓存同时过期-随机化 TTL + 熔断降级
3. 安全风险
侧信道攻击:通过缓存访问时间差推断敏感信息(如网站用户存在性检测)。
防御:常量时间访问设计 + 缓存分区隔离。
缓存设计的通信学原则
局部性原理:最近访问的数据很可能再次访问(LRU 算法);相邻地址数据可能被连续访问(预取机制);Belady's OPT(淘汰最远未来使用的数据);LRU(最近最少使用)、LFU(最不常用)或其变种(如 ARC)。