-
Notifications
You must be signed in to change notification settings - Fork 987
Open
Labels
enhancementNew feature or requestNew feature or request
Description
✅ 验证清单
🎯 功能描述
在 Dubbo-Go 的 RouterChain 层引入一种轻量级的路由结果缓存机制。
目前,每一次 RPC 调用都会完整执行所有的 Router 逻辑(如 Tag 匹配、脚本运算等)。本功能旨在优化这一过程,具体行为如下:
-
结果缓存:将
RouterChain计算后的最终产物(即过滤后的Invoker列表)进行缓存。 -
读取拦截:在执行路由逻辑前,根据 RPC 方法、Consumer 上下文以及当前的规则版本构建 Cache Key。如果命中缓存,直接返回结果,跳过所有 Router 的计算。
-
自动失效:依赖“路由规则版本号”和“服务列表版本号”来感知变化。一旦服务上下线或规则变更,生成的 Key 会自动变化,从而自然屏蔽旧的缓存数据,确保路由准确性。
-
可配置:提供配置开关,允许用户根据业务场景选择开启或关闭此缓存能力。
📋 使用场景
-
高并发场景
在 QPS 很高,但服务列表和路由规则相对稳定的场景下,能避免重复计算,显著降低 CPU 消耗。 -
复杂路由规则
当系统中使用了较复杂的路由逻辑(如多重条件路由或脚本路由)时,缓存能直接跳过繁重的计算过程。 -
对延迟敏感的核心链路
消除框架内部不必要的计算开销,降低 RPC 调用的整体延迟。
⚖️ 复杂性与风险评估
内存占用
风险:如果 Cache Key 设计不当(例如包含随机值)导致 Key 数量爆炸,或者缓存未设置容量上限,可能引发 OOM。
对策:默认实现应基于 LRU(最近最少使用)策略,并设置合理的容量上限。
🔗 外部依赖
No response
📚 附加信息
No response
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request