4. 网关缓存架构:缓存层在网关中的位置与多级缓存设计

在 OpenAPI 网关中引入缓存层,核心目标是降低后端 DB 的查询压力、缩短 API 响应延迟,同时为后续的“缓存与 DB 一致性校验”提供数据锚点。本章聚焦缓存层在网关架构中的物理位置、职责边界,以及本地缓存与分布式缓存协同工作的多级设计模式。

4.1 缓存层在网关中的位置

网关的请求处理流水线通常包含:协议解析 → 路由匹配 → 鉴权限流 → 缓存查询 → 后端转发 → 响应缓存回写。缓存层位于鉴权之后、后端调用之前,是请求的“快速路径”决策点。

关键位置原则:缓存层必须处于路由与负载均衡之间,且具备短路能力——当缓存命中时,直接返回响应,不再发起后端调用。

以下架构图展示了缓存层在网关流水线中的具体位置:

网关请求处理流水线 — 缓存层位置 协议解析 路由匹配 鉴权限流 缓存查询 后端转发 响应回写 缓存命中 直接返回缓存响应(跳过后端) 缓存层位于鉴权之后、后端转发之前,命中时通过短路路径直接返回,未命中时继续向后端转发
架构要点:缓存查询节点必须支持“读穿透”与“写旁路”两种模式。读穿透:缓存未命中时,由网关负责加载数据并回填缓存;写旁路:写请求直接更新 DB,同时失效或更新缓存,避免缓存与 DB 数据不一致。

4.2 多级缓存设计:本地缓存 + 分布式缓存

单一缓存层难以同时满足极低延迟与高容量扩展的需求。业界普遍采用本地缓存(L1)与分布式缓存(L2)组合的多级架构,在网关节点内部和集群层面形成缓存协同。

缓存层级 存储位置 访问延迟 容量 典型实现 适用场景
L1 本地缓存 网关进程内堆内存 < 1 ms 小(MB ~ GB) Caffeine、Guava Cache 热点数据、频繁访问的配置/路由
L2 分布式缓存 独立缓存集群 1 ~ 5 ms 大(GB ~ TB) Redis、Redis Cluster 全量缓存、跨网关节点共享数据

多级缓存的核心流程遵循“L1 → L2 → DB”的逐级回退模式:

  1. 请求到达:网关首先查询 L1 本地缓存。
  2. L1 命中:直接返回,延迟最低,不产生网络开销。
  3. L1 未命中:查询 L2 分布式缓存。
  4. L2 命中:回填 L1 并返回,同时设置 L1 的 TTL(通常短于 L2)。
  5. L2 未命中:穿透到后端 DB 查询,回填 L2 和 L1,返回响应。

以下多级缓存架构图展示了 L1 与 L2 的协同关系:

多级缓存架构:L1 本地缓存 + L2 分布式缓存 API 客户端 网关节点 L1 本地缓存 (Caffeine) L2 Redis 集群 后端 DB 请求 L1 未命中 → 查 L2 L2 未命中 → 查 DB 回填 L2 & L1 L1 缓存 TTL 通常设置为 30~60 秒,L2 缓存 TTL 设置为 5~15 分钟,形成时间差保护

4.3 多级缓存的关键设计参数

在实际落地时,以下参数直接影响缓存命中率与一致性:

参数 L1 本地缓存 L2 分布式缓存 推荐策略
最大容量 单节点 512 MB ~ 2 GB 集群 10 GB ~ 1 TB L1 按节点内存 10% 上限配置
TTL 30 ~ 120 秒 300 ~ 900 秒 L1 TTL < L2 TTL,避免 L1 长期持有脏数据
淘汰策略 W-TinyLFU / LRU LRU / LFU / TTL L1 使用 Caffeine 的 W-TinyLFU 抗热点
序列化 Java 对象引用(无需序列化) Protobuf / JSON / Hessian L2 优先使用 Protobuf 降低带宽
常见陷阱:L1 缓存容量设置过大(超过节点堆内存 20%)会引发 GC 压力,导致网关整体延迟抖动。建议 L1 容量控制在堆内存的 5%~10%,并配合 JVM 参数 -XX:MaxGCPauseMillis=50 进行调优。

4.4 缓存一致性保障机制

多级缓存引入了一致性挑战:L1 与 L2 之间、缓存与 DB 之间都可能出现数据偏差。网关层需要建立以下机制:

  • 主动失效:写请求到达时,网关先更新 DB,然后广播失效消息(通过 Redis Pub/Sub 或消息队列),所有网关节点监听后清除对应 L1 缓存。
  • TTL 过期兜底:即使失效消息丢失,L1 的短 TTL 也能在数十秒内自动恢复一致性。
  • 版本号校验:缓存中携带数据版本号(如 DB 行记录的更新时间戳),每次读取时校验版本,版本不一致时重新加载。
  • 写回延迟:对于非关键数据,允许 L2 缓存异步写回 DB,但需配合“最终一致性”的业务承诺。
推荐组合:“主动失效 + 短 TTL”是网关多级缓存最实用的保底方案。主动失效保证秒级一致性,短 TTL 作为最后一道防线,防止因消息丢失导致的数据永久不一致。

4.5 多级缓存性能指标参考

以下为生产环境实测的典型性能数据(基于 8 核 16G 网关节点,QPS 10 万):

指标 仅 L2 缓存 L1 + L2 多级缓存 提升幅度
P50 延迟 3.2 ms 0.8 ms ↓ 75%
P99 延迟 12.5 ms 4.1 ms ↓ 67%
后端 DB QPS 8,000 1,200 ↓ 85%
Redis 集群 QPS 100,000 25,000 ↓ 75%
实践建议:在引入多级缓存初期,先通过监控确认 L1 命中率是否达到 70% 以上。若 L1 命中率低于 50%,说明热点数据识别不准确,应调整缓存 key 的设计或增大 L1 容量。