开源之夏经验分享|SOFARPC 社区郑佳莉:开源的收获不止代码

简介: 郑佳莉,国防科技大学计算机学院研二学生,专注Java领域与中间件技术。在开源之夏2024中,她参与SOFARPC社区项目,完善了动态配置能力,集成Nacos、Zookeeper等配置中心。通过这段经历,她不仅深入理解了SOFARPC框架的设计与实现,还学会了在大型开源项目中推动功能优化与创新,平衡系统稳定性和灵活性。导师和社区的支持使她受益匪浅。她鼓励更多新人勇敢尝试开源,保持热情,在挑战中不断成长。

开源之夏经验分享|SOFARPC 社区郑佳莉:开源的收获不止代码

文|郑佳莉

计算机学院研二在读
SOFARPC 社区贡献者

就读于国防科技大学计算机学院研二。专注 Java 领域,探索基础架构与中间件技术中。

本文 2476 字,预计阅读 7 分钟

今天 SOFAStack 邀请到了开源之夏 2024 SOFARPC 社区的中选学生郑佳莉同学!在本项目中,她参与完成了 ​SOFARPC 动态配置能力完善​。希望她分享的这段经历,能让更多人了解到 SOFARPC 开源社区,感受开源的魅力~

项目链接​:https://summer-ospp.ac.cn/org/prodetail/2495a0307

项目信息

项目名称​:SOFARPC 动态配置能力完善

项目导师​:刘建军

项目背景​:

RPC 动态配置能力是指运行时针对 RPC 相关的配置进行修改,使其能够根据需要动态调整行为,而无需重新启动服务或强制更新客户端应用程序。动态配置能力通常包括动态调整负载均衡策略、重试策略、超时设置、限流和熔断策略、序列化和反序列化配置等。
当前 SOFARPC 简单集成了 Apollo 配置中心,期望梳理出 SOFARPC 相关需要支持的动态配置,完善对应的接口维度的动态配置能力。另外,在此基础之上,期望在 SOFARPC 中集成 Nacos、Zookeeper 等作为配置中心,支持对应的动态配置能力。

项目实现思路

方案描述

SOFARPC 原本的配置情况如下:

简单集成了 Apollo 作为配置中心;
仅支持请求维度的动态配置,需要在调用流程中去主动获取对应的配置,支持的配置项包括超时时间和负载均衡策略。

针对以上两点,改进方案分为以下三部分:

1、进一步集成 Nacos、Zookeeper 作为配置中心,并在此基础上支持请求维度的动态配置

各配置中心内,请求维度配置信息的存储结构设计如下图,其中每个配置节点的数据对应着单个配置项的值:

图片

2、梳理出 SOFARPC 相关需要支持的动态配置选项

动态配置选项如下表所示:

图片

3、增加接口维度的动态配置能力

各配置中心内,接口维度配置信息的存储结构设计如下图,其中,每个配置节点中的数据存储格式为 properties,单个配置节点的数据对应着某个接口的多个配置项:

图片

动态配置能力通过对配置进行监听来实现,当配置中心中的配置发生变化时,SOFARPC 应自动检测到新的配置并更新到接口配置实例中。

添加接口维度配置监听器的流程如下:

图片

接口维度配置动态更新流程如下:

图片

开源之夏个人随访

自我介绍

大家好,我叫郑佳莉,是国防科技大学计算机学院研二的学生。我日常主要使用 Java 进行开发,对基础架构和中间件技术十分感兴趣。

这是我第一次参与开源之夏,通过参与 SOFAStack 社区的项目,我得以深入体验开源社区的工作流程和开发过程。

申请本社区项目的原因​

在之前的学习和实践中,我曾参与过一些分布式系统的开发工作,并且,我在学校的分布式计算课程中实现过一个简易的 RPC 框架。通过这些经历,我对 RPC 框架的工作原理和服务治理的挑战有了较为深入的理解。

SOFARPC 作为一个广泛使用的开源 RPC 框架,吸引了我参与其中,希望能在项目中进一步扩展我的知识和技能。特别是看到 SOFARPC 在动态配置方面的潜力后,我希望能够贡献自己的力量优化系统,帮助开发者更好地管理配置。

如何克服项目过程中的困难与挑战?

在项目过程中,我面临的主要难题是如何在不影响系统现有配置功能的前提下,扩展动态配置功能,尤其是要兼容不同的配置中心。由于不同配置中心的存储结构不同,接口实现和配置更新策略存在较大差异,导致了配置管理类的实现复杂度增加,兼容性问题也相应变得更加突出。

针对这些问题,我提出了以下解决方案:

统一存储层次和抽象设计​:为了更好地兼容不同的配置中心,我设计了统一的存储层次结构,在每个配置中心内部,接口级的配置信息均与应用名相对应。此外,通过 SPI 机制,使用统一的 DynamicConfigManager 接口,不同配置中心的实现方式被抽象为一个统一的层,减少了各配置管理类之间的耦合。

监听机制的统一和优化​:为了实现动态配置的实时生效,需要对配置变更进行事件监听。然而,由于 Apollo、Nacos 和 Zookeeper 的监听机制不同,初期设计的监听器存在重复创建和事件丢失的问题,导致部分配置更新时没有及时生效。为了解决这一问题,我分别为不同配置中心实现了其特定的 Listener 子类,并在 DynamicConfigManager 中引入了统一的监听器管理机制。通过引入 ConfigChangedEvent 事件类,我成功统一了事件的触发和处理逻辑,解决了事件丢失和重复创建的问题。

经过多次实验和调整,并在导师的指导下不断优化,最终我成功实现了负载均衡策略、超时设置等配置项的动态更新,并顺利集成了 Nacos 和 Zookeeper。

导师与社区带来的帮助

在整个项目过程中,我得到了导师和社区的悉心指导与支持。项目启动之初,导师便帮助我梳理了项目的核心需求和整体的任务安排,在之后的每周,我们都会定期召开会议,汇报进度并商讨进一步的实现思路。在整个项目周期内,导师为我提供了诸多宝贵的技术建议。

社区印象

SOFAStack 社区是一个充满创新精神和协作氛围的开源平台,汇聚了许多技术爱好者和开发者。社区成员不仅拥有丰富的技术背景,也热衷于分享和贡献自己的经验与成果。在这里,每个人都能找到志同道合的伙伴,彼此帮助、共同进步。

有哪些收获

我不仅深入理解了 SOFARPC 框架的设计与实现,还学到了如何在大型开源项目中推动功能优化与创新。我学会了如何在扩展功能的同时,平衡系统稳定性与灵活性之间的关系,避免引入不必要的复杂性。这一经验对我未来的技术工作具有深远影响,尤其是在处理复杂系统的设计与优化时,我将更加注重架构的清晰性与可维护性。

对更多开源新人的寄语

开源之路充满挑战,但也极富回报。勇于尝试,保持对技术的热情,你将在这个过程中不断成长!

相关文章
|
1月前
|
Cloud Native 测试技术 Go
开源之夏经验分享|MOSN 社区韦鑫:做自己认为很酷的事
韦鑫是南京航空航天大学计算机科学与技术学院研三学生,研究方向为分布式系统。作为HTNN社区贡献者,他参与了开源之夏2024 MOSN社区项目,负责将Sentinel-golang流量控制能力集成到MOSN on Envoy(MoE)生态中。通过该项目,韦鑫不仅提升了对服务网格和云原生网关的理解,还学会了如何开发HTNN插件,并深刻体会到严格的单元测试、集成测试及CI/CD对项目的重要性。他的经历展示了积极参与开源项目的价值,鼓励更多人勇敢尝试并投身于开源社区。
开源之夏经验分享|MOSN 社区韦鑫:做自己认为很酷的事
|
1月前
|
Cloud Native API 开发者
开源之夏经验分享|Layotto 社区 郑浩宁:尝试,就会有收获!
郑浩宁,福州大学软件工程专业大三学生,致力于微服务与云原生领域。作为 Layotto 社区贡献者,他参与了开源之夏 2024,完成了“对齐 Layotto 对 Dapr 的依赖”项目,将 Layotto 的 Dapr 兼容版本升级到 v1.13.0。
开源之夏经验分享|Layotto 社区 郑浩宁:尝试,就会有收获!
|
1月前
|
Cloud Native 安全 Java
开源之夏经验分享|Koupleless 社区黄兴抗:在开源中培养工程思维
黄兴抗是南昌师范学院电子信息工程专业的大三学生,同时也是Koupleless社区的贡献者。在开源之夏2024项目中,他参与了“存量应用自动改造成模块”的开发,旨在解决企业云原生转型中的存量应用改造难题。通过自动化工具,实现了传统应用向模块化的低成本升级,兼顾代码兼容性与独立启动功能。项目链接:[点击这里](https://summer-ospp.ac.cn/org/prodetail/2495a0376?lang=zh&list=pro)。 简介字数:238个字符。
|
11月前
|
前端开发
FANbbs社区圈子源码
最新FANbbs社区圈子源码 视频链接允许使用外部直链,在填写或者上传视频后会自动填写链接。 链接会自动请求,如果需要设置封面图,可以在发布视频页面上方播放界面点击齿轮图标选择截图。
128 2
|
架构师 Java 程序员
同事开源我的微服务深度实践笔记到GitHub,短短3天竟吸粉10W+
说Spring成就了Java,Spring是Java程序员必修课之一,应该没人反对吧? 前几年面试最常问的且可以顺利拿到高薪的技能是Spring,随着Spring体系的壮大,除非你在简历上添加Spring Boot和Spring Cloud的技能,才可以打动面试官,而现在,除非是Spring架构的扎实经验,否则难以让面试官高看。 一名合格的Java后端工程师或架构师,至少微服务架构是必须牢牢掌握的,这里也整理了整套微服务架构学习路线,准备作为福利送给大家,可以先看一下重点简图。
|
自然语言处理 运维 Dubbo
闲话 dubbogo 社区
dubbogo 社区马上要进入第八个年头。dubbogo 项目初期的使命就是 "Bridging the gap between Java and Go",目前 dubbogo 已经对齐所有 dubbo 版本,正与 Dubbo 齐头并进,并在云原生方向反哺 Dubbo。且实现了与 Spring Cloud、gRPC 生态的互联互通,把 Java 中间件能力带入了 Go 语言生态。社区目前正全力推进的 dubbo-go-pixiu 等社区项目,打造下一代 Dubbo Mesh 生态。
253 17
闲话 dubbogo 社区
|
开发者
启动!阿里巴巴编程之夏2022
启动!阿里巴巴编程之夏2022
191 0
|
自然语言处理 供应链 负载均衡
【开源之夏 2023】欢迎报名 MOSN 社区项目!
2023 年,MOSN 社区再次加入中国科学院软件研究所的高校开源活动—— “开源之夏 2023” ,为大家准备了三个任务,涉及 Go、HTTP、Security、Software-Defined Networking、Container 等多个领域。
|
Cloud Native 开发者
云原生应用插件扩展训练营上线,帮你开始开源社区贡献者之旅!
阿里云开发者学堂联合云原生开发平台推出了云原生应用插件扩展训练营,帮你开始开源社区贡献者之旅!
云原生应用插件扩展训练营上线,帮你开始开源社区贡献者之旅!
|
人工智能 开发者 Python
模型社区实战训练营首开,开源让代码更有趣!
阿里云开发者学堂联合modelscope社区推出了模型实战系列训练营,培养AI开发者从各种模态的模型选择,只需要懂得python,也可以玩转人工智能模型。
下一篇
oss创建bucket