開源之夏經驗分享|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 框架的設計與實現,還學到了如何在大型開源項目中推動功能優化與創新。我學會了如何在擴展功能的同時,平衡系統穩定性與靈活性之間的關係,避免引入不必要的複雜性。這一經驗對我未來的技術工作具有深遠影響,尤其是在處理複雜系統的設計與優化時,我將更加註重架構的清晰性與可維護性。
對更多開源新人的寄語
開源之路充滿挑戰,但也極富回報。勇於嘗試,保持對技術的熱情,你將在這個過程中不斷成長!