Aetherance opened a new issue, #3166: URL: https://github.com/apache/dubbo-go/issues/3166
### ✅ 验证清单 - [x] 🔍 我已经搜索过 [现有 Issues](https://github.com/apache/dubbo-go/issues),确信这不是重复请求 - [x] 📋 我已经查看了 [发布说明](https://github.com/apache/dubbo-go/releases),确信此功能尚未实现 ### 🎯 功能描述 在 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_ -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
