You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
GSoC 题目:Dubbo-Go 轻量化运行时探索与插件化机制实现
项目背景与问题描述
Dubbo-Go 已发展为一个功能丰富的 RPC 框架,拥有覆盖服务注册、服务发现、协议实现、治理能力等在内的庞大扩展生态系统。当前框架在设计上追求“开箱即用”,大多数扩展组件在编译期或运行期默认启用,无需显式声明即可参与框架初始化流程。
然而,这种设计在实际使用中逐渐暴露出若干问题:
用户无法明确关闭不需要的扩展组件,即使这些组件在当前使用场景下并不必要。
即便是仅使用基础 RPC 能力的场景,也会隐式引入注册中心、治理、配置等多个子系统的初始化逻辑。
许多扩展实现长期存在于 Dubbo-Go 主仓库中,导致核心代码与扩展逻辑边界模糊,增加维护与演进成本。
在此前的重构过程中,一些使用频率较低的扩展(例如 Consul 注册中心)被从核心仓库中移除。但由于缺乏统一的插件化框架、SPI 边界定义以及标准化的加载与启停机制,这些扩展难以以“可选组件”的形式重新引入和独立维护。
因此,当前 Dubbo-Go 面临的核心问题已不仅是“是否插件化”,而是:
相关issue: #2326 #1981
项目目标
本项目旨在探索 Dubbo-Go 的轻量化运行时模式,并通过插件化机制实现对扩展组件的显式加载与控制,而不改变现有用户的配置方式与使用习惯。
具体目标包括:
dubbo-go-extensions,承载非核心运行时能力。关键技术挑战
1. 插件加载顺序、启停控制与初始化机制
当前 Dubbo-Go 中,大多数扩展通过空白导入和
init()函数自动注册,且默认参与启动流程。本项目将系统性分析并解决以下问题:init()+ 全局注册表)。目标是建立一个可预测、可裁剪、可文档化的插件加载与控制模型。
2. SPI 层设计与边界稳定性
SPI 层是实现插件化与轻量运行时的关键基础,其设计目标包括:
SPI 是以独立模块形式存在,还是作为 Dubbo-Go 仓库内边界清晰的子包存在,将作为设计探索的一部分,而非预设结论。
3. 扩展仓库与可选能力拆分
项目将建立新的
dubbo-go-extensions仓库,用于承载非核心能力的插件实现:registry/consul、registry/polaris)。4. 扩展适配与迁移验证
为验证插件化机制与轻量化运行时设计的可行性与通用性,本项目将选择并适配多种具有代表性的 Dubbo-Go 扩展,包括:
针对历史移除扩展,将完成以下工作:
该过程将沉淀可复用的扩展适配与迁移经验,并形成指导文档,为后续更多扩展的插件化提供参考。
5. 轻量化运行时模式探索
基于对启动流程和插件依赖的分析,项目将探索:
预期成果
dubbo-go-extensions扩展仓库。难度与工作量
预期 12-Week Milestones
Community Bonding(编码前准备)
目标:统一认知,避免学生一上来就改代码
熟悉 Dubbo-Go 代码结构与启动流程
阅读现有 extension / SPI 机制(如
common/extension)梳理当前插件的注册、初始化、启用方式
与导师确认:
交付物:
Coding Period(12 周)
Week 1:Dubbo-Go 启动流程与插件现状分析
目标:搞清楚“现在到底是怎么跑起来的”
梳理 Dubbo-Go 启动主路径(入口 → runtime → extension)
识别:
分析插件注册方式(
init()、全局 registry)交付物:
Week 2:最小运行时能力边界定义
目标:明确什么是“轻量运行时”
定义 Minimal Runtime 能力集合(如基础 RPC)
明确哪些能力应视为“可选插件”:
标注当前代码中的强耦合点
交付物:
Week 3:插件启停模型与加载顺序设计
目标:先设计,再动代码
设计插件生命周期模型:
明确插件加载顺序与依赖关系
讨论并确定:
交付物:
Week 4:SPI 层边界设计与稳定化
目标:把“核心”和“插件”真正隔开
梳理现有 SPI 使用情况
设计稳定的 SPI 接口集合
明确:
交付物:
Week 5:插件管理与启停机制实现(核心)
目标:真正让插件“可以关掉”
实现插件管理基础设施:
支持插件在初始化阶段被跳过
保证不破坏现有默认行为
交付物:
Week 6:加载顺序与确定性初始化保障
目标:解决 Go
init()的不确定性问题交付物:
Midterm Evaluation(中期评估)
应达到状态:
Week 7:建立
dubbo-go-extensions仓库目标:验证插件真正可以“离开核心仓库”
dubbo-go-extensions交付物:
Week 8:适配多个现有扩展(不少于 3 个)
目标:验证机制通用性
选择多个现有扩展进行适配
验证:
交付物:
Week 9:恢复历史移除扩展(如 Consul)
目标:解决“历史包袱”问题
交付物:
Week 10:完善插件文档与示例工程
目标:让用户和开发者“能用、会用”
交付物:
Week 11:测试、稳定性与向后兼容性验证
目标:避免“能跑但不敢合”
交付物:
Week 12:最终整理与成果交付
目标:让社区愿意合并
交付物:
Beta Was this translation helpful? Give feedback.
All reactions