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

对更多开源新人的寄语

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

相关文章
|
10月前
|
Cloud Native 测试技术 Go
开源之夏经验分享|MOSN 社区韦鑫:做自己认为很酷的事
韦鑫是南京航空航天大学计算机科学与技术学院研三学生,研究方向为分布式系统。作为HTNN社区贡献者,他参与了开源之夏2024 MOSN社区项目,负责将Sentinel-golang流量控制能力集成到MOSN on Envoy(MoE)生态中。通过该项目,韦鑫不仅提升了对服务网格和云原生网关的理解,还学会了如何开发HTNN插件,并深刻体会到严格的单元测试、集成测试及CI/CD对项目的重要性。他的经历展示了积极参与开源项目的价值,鼓励更多人勇敢尝试并投身于开源社区。
开源之夏经验分享|MOSN 社区韦鑫:做自己认为很酷的事
|
2月前
|
人工智能 运维 安全
云栖专刊 | 深度解读阿里云网络全新能力升级,助力企业出海和AI创新
阿里云飞天洛神云网络在2025云栖大会发布全新升级,聚焦企业出海与AI创新,推出确定性网络、智能云网络及AI for Network三大能力,提升全球连接质量,构建高效、安全、智能的云网络底座。
465 8
云栖专刊 | 深度解读阿里云网络全新能力升级,助力企业出海和AI创新
|
10月前
|
Cloud Native API 开发者
开源之夏经验分享|Layotto 社区 郑浩宁:尝试,就会有收获!
郑浩宁,福州大学软件工程专业大三学生,致力于微服务与云原生领域。作为 Layotto 社区贡献者,他参与了开源之夏 2024,完成了“对齐 Layotto 对 Dapr 的依赖”项目,将 Layotto 的 Dapr 兼容版本升级到 v1.13.0。
开源之夏经验分享|Layotto 社区 郑浩宁:尝试,就会有收获!
|
存储 缓存 关系型数据库
MySQL数据库缓存query_cache 19
【7月更文挑战第19天】MySQL数据库缓存query_cache
373 73
|
缓存 安全
域名遍历子域名挖掘机layer
域名遍历子域名挖掘机layer
|
关系型数据库 Java 数据库
探索后端技术:从基础到高级的旅程
本文将引导读者深入探索后端技术,从基础知识入手,逐步过渡到高级概念和技术。文章旨在为初学者和有经验的开发者提供有价值的见解和指导,帮助他们在后端开发领域不断进步。通过通俗易懂的语言和条理清晰的结构,我们将一起探讨后端技术的本质、内涵以及实际应用。
312 4
|
SQL NoSQL 数据可视化
【国庆弯道超车系列】MongoDB进阶之查询(一)
【国庆弯道超车系列】MongoDB进阶之查询(一)
417 0
|
数据可视化 Java Apache
Maven Dependency Tree:深入理解你的项目依赖
Maven Dependency Tree:深入理解你的项目依赖
3010 0
|
前端开发 JavaScript NoSQL
从前端到后端:构建全栈应用的技术挑战与解决方案
在当今互联网时代,全栈开发成为越来越受欢迎的技术趋势。本文将深入探讨从前端到后端的全栈开发过程中所面临的技术挑战,并提出相应的解决方案,涵盖前端框架选择、后端技术架构、数据库设计以及跨平台兼容性等关键问题。
|
存储 芯片
STM32速成笔记(十一)—EEPROM(AT24C02)
本文详细介绍了什么是AT24C02,介绍了它的引脚,读/写时序,给出了应用实例和详细的程序设计。最后,简单介绍了AT24C02的应用场景。
2747 0
STM32速成笔记(十一)—EEPROM(AT24C02)