Skip to content

Commit ffe3aa5

Browse files
Create index.md (#1323)
* Create index.md * Update index.md * Update index.md * Update index.md * Update index.md --------- Co-authored-by: Marco <[email protected]>
1 parent 913e234 commit ffe3aa5

File tree

1 file changed

+116
-0
lines changed
  • content/zh/blog/open-source-summer-experience-sharing-sofarpc-community-open-source-is-more-than-just-code

1 file changed

+116
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
---
2+
title: "开源之夏经验分享|SOFARPC 社区郑佳莉:开源的收获不止代码"
3+
authorlink: "https://github.com/sofastack"
4+
description: "RPC 动态配置能力是指运行时针对 RPC 相关的配置进行修改,使其能够根据需要动态调整行为,而无需重新启动服务或强制更新客户端应用程序。动态配置能力通常包括动态调整负载均衡策略、重试策略、超时设置、限流和熔断策略、序列化和反序列化配置等。
5+
当前 SOFARPC 简单集成了 Apollo 配置中心,期望梳理出 SOFARPC 相关需要支持的动态配置,完善对应的接口维度的动态配置能力。另外,在此基础之上,期望在 SOFARPC 中集成 Nacos、Zookeeper 等作为配置中心,支持对应的动态配置能力。"
6+
categories: "SOFAStack"
7+
tags: ["SOFAStack"]
8+
date: 2024-02-11T15:00:00+08:00
9+
cover: "https://img.alicdn.com/imgextra/i2/O1CN01oZDNj71Ri0ChbhCcH_!!6000000002144-0-tps-1216-515.jpg"
10+
---
11+
12+
# 开源之夏经验分享|SOFARPC 社区郑佳莉:开源的收获不止代码
13+
14+
> **文|郑佳莉**
15+
> 计算机学院研二在读
16+
> SOFARPC 社区贡献者
17+
>
18+
> 就读于国防科技大学计算机学院研二。专注 Java 领域,探索基础架构与中间件技术中。
19+
>
20+
> **本文 2476 字,预计阅读 7 分钟**
21+
22+
今天 SOFAStack 邀请到了开源之夏 2024 SOFARPC 社区的中选学生**郑佳莉**同学!在本项目中,她参与完成了 ​**SOFARPC 动态配置能力完善**​。希望她分享的这段经历,能让更多人了解到 SOFARPC 开源社区,感受开源的魅力~
23+
24+
**项目链接**​:[https://summer-ospp.ac.cn/org/prodetail/2495a0307](https://summer-ospp.ac.cn/org/prodetail/2495a0307)
25+
26+
## 项目信息
27+
28+
**项目名称**​:SOFARPC 动态配置能力完善
29+
30+
**项目导师**​:刘建军
31+
32+
**项目背景**​:
33+
34+
RPC 动态配置能力是指运行时针对 RPC 相关的配置进行修改,使其能够根据需要动态调整行为,而无需重新启动服务或强制更新客户端应用程序。动态配置能力通常包括动态调整负载均衡策略、重试策略、超时设置、限流和熔断策略、序列化和反序列化配置等。
35+
当前 SOFARPC 简单集成了 Apollo 配置中心,期望梳理出 SOFARPC 相关需要支持的动态配置,完善对应的接口维度的动态配置能力。另外,在此基础之上,期望在 SOFARPC 中集成 Nacos、Zookeeper 等作为配置中心,支持对应的动态配置能力。
36+
37+
## 项目实现思路
38+
39+
### 方案描述
40+
41+
**SOFARPC 原本的配置情况如下:**
42+
43+
简单集成了 Apollo 作为配置中心;
44+
仅支持请求维度的动态配置,需要在调用流程中去主动获取对应的配置,支持的配置项包括超时时间和负载均衡策略。
45+
46+
针对以上两点,改进方案分为以下三部分:
47+
48+
**1、进一步集成 Nacos、Zookeeper 作为配置中心,并在此基础上支持请求维度的动态配置**
49+
50+
各配置中心内,请求维度配置信息的存储结构设计如下图,其中每个配置节点的数据对应着单个配置项的值:
51+
52+
![图片](https://img.alicdn.com/imgextra/i1/O1CN01uam04Y1vr6Xyhl4qr_!!6000000006225-0-tps-1080-654.jpg)
53+
54+
**2、梳理出 SOFARPC 相关需要支持的动态配置选项**
55+
56+
动态配置选项如下表所示:
57+
58+
![图片](https://img.alicdn.com/imgextra/i3/O1CN01bTopnq1F8U669LruX_!!6000000000442-0-tps-1048-264.jpg)
59+
60+
**3、增加接口维度的动态配置能力**
61+
62+
各配置中心内,接口维度配置信息的存储结构设计如下图,其中,每个配置节点中的数据存储格式为 properties,单个配置节点的数据对应着某个接口的多个配置项:
63+
64+
![图片](https://img.alicdn.com/imgextra/i4/O1CN01ICkkAC1hBVxddRJ89_!!6000000004239-0-tps-1080-617.jpg)
65+
66+
动态配置能力通过对配置进行监听来实现,当配置中心中的配置发生变化时,SOFARPC 应自动检测到新的配置并更新到接口配置实例中。
67+
68+
添加接口维度配置监听器的流程如下:
69+
70+
![图片](https://img.alicdn.com/imgextra/i3/O1CN01BfI96r1YNZqmoPYHV_!!6000000003047-0-tps-821-320.jpg)
71+
72+
接口维度配置动态更新流程如下:
73+
74+
![图片](https://img.alicdn.com/imgextra/i2/O1CN01kfVMPK20WYrRRGTdr_!!6000000006857-0-tps-760-291.jpg)
75+
76+
## 开源之夏个人随访
77+
78+
### 自我介绍
79+
80+
大家好,我叫郑佳莉,是国防科技大学计算机学院研二的学生。我日常主要使用 Java 进行开发,对基础架构和中间件技术十分感兴趣。
81+
82+
这是我第一次参与开源之夏,通过参与 SOFAStack 社区的项目,我得以深入体验开源社区的工作流程和开发过程。
83+
84+
### 申请本社区项目的原因​
85+
86+
在之前的学习和实践中,我曾参与过一些分布式系统的开发工作,并且,我在学校的分布式计算课程中实现过一个简易的 RPC 框架。通过这些经历,我对 RPC 框架的工作原理和服务治理的挑战有了较为深入的理解。
87+
88+
SOFARPC 作为一个广泛使用的开源 RPC 框架,吸引了我参与其中,希望能在项目中进一步扩展我的知识和技能。特别是看到 SOFARPC 在动态配置方面的潜力后,我希望能够贡献自己的力量优化系统,帮助开发者更好地管理配置。
89+
90+
### 如何克服项目过程中的困难与挑战?
91+
92+
在项目过程中,我面临的主要难题是如何在不影响系统现有配置功能的前提下,扩展动态配置功能,尤其是要兼容不同的配置中心。由于不同配置中心的存储结构不同,接口实现和配置更新策略存在较大差异,导致了配置管理类的实现复杂度增加,兼容性问题也相应变得更加突出。
93+
94+
针对这些问题,我提出了以下解决方案:
95+
96+
**统一存储层次和抽象设计**​:为了更好地兼容不同的配置中心,我设计了统一的存储层次结构,在每个配置中心内部,接口级的配置信息均与应用名相对应。此外,通过 SPI 机制,使用统一的 DynamicConfigManager 接口,不同配置中心的实现方式被抽象为一个统一的层,减少了各配置管理类之间的耦合。
97+
98+
**监听机制的统一和优化**​:为了实现动态配置的实时生效,需要对配置变更进行事件监听。然而,由于 Apollo、Nacos 和 Zookeeper 的监听机制不同,初期设计的监听器存在重复创建和事件丢失的问题,导致部分配置更新时没有及时生效。为了解决这一问题,我分别为不同配置中心实现了其特定的 Listener 子类,并在 DynamicConfigManager 中引入了统一的监听器管理机制。通过引入 ConfigChangedEvent 事件类,我成功统一了事件的触发和处理逻辑,解决了事件丢失和重复创建的问题。
99+
100+
经过多次实验和调整,并在导师的指导下不断优化,最终我成功实现了负载均衡策略、超时设置等配置项的动态更新,并顺利集成了 Nacos 和 Zookeeper。
101+
102+
### 导师与社区带来的帮助
103+
104+
在整个项目过程中,我得到了导师和社区的悉心指导与支持。项目启动之初,导师便帮助我梳理了项目的核心需求和整体的任务安排,在之后的每周,我们都会定期召开会议,汇报进度并商讨进一步的实现思路。在整个项目周期内,导师为我提供了诸多宝贵的技术建议。
105+
106+
### 社区印象
107+
108+
SOFAStack 社区是一个充满创新精神和协作氛围的开源平台,汇聚了许多技术爱好者和开发者。社区成员不仅拥有丰富的技术背景,也热衷于分享和贡献自己的经验与成果。在这里,每个人都能找到志同道合的伙伴,彼此帮助、共同进步。
109+
110+
### 有哪些收获
111+
112+
我不仅深入理解了 SOFARPC 框架的设计与实现,还学到了如何在大型开源项目中推动功能优化与创新。我学会了如何在扩展功能的同时,平衡系统稳定性与灵活性之间的关系,避免引入不必要的复杂性。这一经验对我未来的技术工作具有深远影响,尤其是在处理复杂系统的设计与优化时,我将更加注重架构的清晰性与可维护性。
113+
114+
### 对更多开源新人的寄语
115+
116+
开源之路充满挑战,但也极富回报。勇于尝试,保持对技术的热情,你将在这个过程中不断成长!

0 commit comments

Comments
 (0)