在 APISIX 中,要实现从 Redis 定时拉取数据并同步给各个 Worker,同时追求最高性能 ,业界(如荣耀等海量业务场景)的最佳实践是:"特权进程拉取 + 共享内存(Shared Dict)同步" 方案。
该方案的核心思想是将"网络 I/O"与"请求处理"彻底解耦,避免在 Worker 进程处理高并发请求时产生阻塞。以下是具体的架构设计与性能优化要点:
1. 核心架构:特权进程拉取 + 共享内存机制
- 特权进程拉取:APISIX 底层基于 Nginx,仅允许特权进程(Privileged Agent)定期从 Redis 拉取全量或增量数据。这避免了多个 Worker 进程并发去拉取数据,从而大幅降低了对 Redis 的网络 I/O 压力以及 APISIX 自身的 CPU 开销。
- 共享内存机制:特权进程将拉取到的数据写入 Nginx 的共享内存(Shared Dict)中。各个 Worker 进程在处理请求时,只需定期查询共享内存即可获取最新数据,无需再进行任何网络请求。
2. 性能优化关键点
为了将性能发挥到极致,建议在实施时注意以下几点:
- 采用异步同步机制:本地计数或数据更新通过异步方式定期与 Redis 同步,确保数据一致性的同时,不阻塞主请求链路。
- 引入互斥锁(Mutex)防雪崩:在多个 Worker 并发访问共享内存或穿透到 Redis 时,必须引入互斥锁(Mutex)机制。确保在缓存未命中时,只有一个请求去查询 Redis 并回写共享内存,有效防止"缓存击穿"(Dogpile Effect)带来的性能灾难。
- 构建多层缓存漏斗:结合 APISIX 原生的多层缓存机制,将 L1 缓存(Worker 级别的 LRU Cache)与 L2 缓存(Node 级别的 Shared Dict Cache)结合使用。绝大多数请求在 L1 和 L2 即可命中返回,极大减少对外部 Redis 的依赖。
3. 适用场景建议
- 高 QPS 应用:该方案特别适用于 QPS 较大的高并发场景,能够显著消除 Redis 的性能瓶颈和网络开销。
- 低 QPS 应用:如果业务 QPS 较低(如仅有几百 QPS),现有的常规分布式限流或直连方案已基本满足需求,无需引入上述复杂的共享内存优化方案,以降低系统维护复杂度。
通过这套"特权进程 + 共享内存 + 互斥锁"的组合拳,APISIX 能够在保证数据最终一致性的前提下,实现极高的并发处理能力和极低的请求时延。