Skip to content

[FEATURE] Introduce Router Cache to Enhance Routing Performance #3166

@Aetherance

Description

@Aetherance

✅ 验证清单

  • 🔍 我已经搜索过 现有 Issues,确信这不是重复请求
  • 📋 我已经查看了 发布说明,确信此功能尚未实现

🎯 功能描述

在 Dubbo-Go 的 RouterChain 层引入一种轻量级的路由结果缓存机制

目前,每一次 RPC 调用都会完整执行所有的 Router 逻辑(如 Tag 匹配、脚本运算等)。本功能旨在优化这一过程,具体行为如下:

  1. 结果缓存:将 RouterChain 计算后的最终产物(即过滤后的 Invoker 列表)进行缓存。

  2. 读取拦截:在执行路由逻辑前,根据 RPC 方法、Consumer 上下文以及当前的规则版本构建 Cache Key。如果命中缓存,直接返回结果,跳过所有 Router 的计算。

  3. 自动失效:依赖“路由规则版本号”和“服务列表版本号”来感知变化。一旦服务上下线或规则变更,生成的 Key 会自动变化,从而自然屏蔽旧的缓存数据,确保路由准确性。

  4. 可配置:提供配置开关,允许用户根据业务场景选择开启或关闭此缓存能力。

📋 使用场景

  • 高并发场景
    在 QPS 很高,但服务列表和路由规则相对稳定的场景下,能避免重复计算,显著降低 CPU 消耗。

  • 复杂路由规则
    当系统中使用了较复杂的路由逻辑(如多重条件路由或脚本路由)时,缓存能直接跳过繁重的计算过程。

  • 对延迟敏感的核心链路
    消除框架内部不必要的计算开销,降低 RPC 调用的整体延迟。

⚖️ 复杂性与风险评估

内存占用
风险:如果 Cache Key 设计不当(例如包含随机值)导致 Key 数量爆炸,或者缓存未设置容量上限,可能引发 OOM。
对策:默认实现应基于 LRU(最近最少使用)策略,并设置合理的容量上限。

🔗 外部依赖

No response

📚 附加信息

No response

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions