開源之夏經驗分享|Koupleless 社區黃興抗:在開源中培養工程思維

開源之夏經驗分享|Koupleless 社區黃興抗:在開源中培養工程思維

文|黃興抗

電子信息工程專業

Koupleless 社區貢獻者

就讀于南昌師范學院,電子信息工程專業的大三學生。

本文 2634 字,預計閱讀 7? 分鐘?

今天 SOFAStack 邀請到了開源之夏 2024 Koupleless 社區的中選學生黃興抗同學!在本項目中,他參與完成了?存量應用自動改造成模塊?。希望他分享的這段經歷,能讓更多人了解到 Koupleless 開源社區,感受開源的魅力~

?項目鏈接?:https://summer-ospp.ac.cn/org/prodetail/2495a0376?lang=zh&list=pro

項目信息

?項目名稱?:存量應用自動改造成模塊

?項目導師?:趙真靈

?項目背景?:在參與 Koupleless 社區項目之前,我就在社區文章中了解到,當前企業在向云原生轉型的過程中往往面臨著一個重要痛點——?存量應用改造成本高?。特別是對于大量已經運行的 SpringBoot/SOFABoot 應用,「如何低成本地實現模塊化改造」成為一個急需解決的問題。

?項目目的?:本項目的核心目標是建設存量應用的自動化模塊改造工具,使得應用能夠實現傳統應用向模塊化的低成本升級,兼顧代碼兼容性,同時支持獨立啟動與合并部署。

技術方案設計

? 整體架構

為了實現目標,我們通過 <span>arkctl</span> 命令行工具提供簡單易用的入口,將核心邏輯封裝在一個包含以下 4 個主要組件的 JAR 包中:

  1. Launcher—作為整個工具的統一入口
  2. ApplicationPropertiesModifier—用于掃描并修改應用配置
  3. SlimmingConfiguration—負責模塊瘦身和依賴管理
  4. PomModifier—專門處理 Maven 配置相關的邏輯

? 關鍵技術點

1. 配置文件自動化處理

自動掃描和修改配置文件,支持多環境配置合并,確保改造過程安全、可回滾。

2. POM 文件智能改造?

自動添加必要的依賴和插件,實現版本兼容檢測和適配。

3. 模塊瘦身方案

實現依賴隔離,優化模塊體積,保證改造后的應用在運行時的兼容性。

模塊改造的核心要素?

1. 模塊打包插件的引入
POM 文件中的關鍵配置如下:

<plugin>
<groupId>com.alipay.sofa</groupId>
<artifactId>sofa-ark-maven-plugin</artifactId>
<configuration>
<skipArkExecutable>true</skipArkExecutable>
<declaredMode>true</declaredMode>
</configuration>
</plugin>

Q:為什么需要引入模塊打包插件?
傳統的 Spring Boot 應用打包后是一個可獨立運行的 JAR,sofa-ark-maven-plugin 能夠將應用打包成符合模塊規范的格式,模塊化部署需要特殊的類加載隔離機制,通過 declaredMode 實現精確的類隔離,避免多模塊間的沖突。

2. 模塊瘦身的必要性
模塊瘦身配置示例:

slimming.excludeGroupIds=org.springframework,org.apache.commons
slimming.excludeArtifactIds=commons-lang,commons-io

Q:為什么需要模塊瘦身?
基座已包含大量公共依賴,模塊無需重復打包。重復依賴會導致類加載沖突,模塊體積過大影響啟動性能和資源利用,通過瘦身可以優化模塊大小,提高部署效率。

3. 配置文件改造的意義
配置文件處理的核心邏輯如下:

public static void modifyApplicationProperties(String directoryPath, String applicationName) {
Properties props = new Properties();
props.setProperty("spring.application.name", applicationName);
}

Q:為什么需要改造配置文件?
模塊需要獨立的應用名稱和上下文路徑,避免多模塊間的配置沖突,確保模塊能夠在合并部署環境中正確運行,支持模塊的動態部署和熱更新。

項目實現思路

針對傳統的存量應用手動改造成模塊的方式,對其相關步驟進行拆解和分析后,可感知到三個挑戰:配置文件改造、依賴管理和構建適配。

  • 配置文件改造?方面,挑戰主要在于配置文件分散在不同目錄、多環境*(如開發、測試、生產)*配置的復雜性,以及可能存在的配置沖突。為了解決這些問題,我們通過遞歸掃描定位所有配置文件,利用 Java Properties API 確保讀寫的安全性,同時采用追加寫入的方式,避免覆蓋已有配置內容。
  • 依賴管理方面,我們需要處理模塊與基座依賴的重復問題、版本沖突的風險,以及模塊體積過大導致加載性能下降的情況。針對這些問題,我們設計了預設排除規則,精確分析依賴關系,添加必要依賴,并將有沖突的模塊默認調整為經過測試的穩定版本。此外,我們在配置文件中增加了黑白名單規則,以實現模塊瘦身。
  • 構建適配方面,主要難點在于多模塊項目復雜的依賴關系以及構建效率的優化。我們通過 <span>declaredMode</span> 實現類加載隔離,統一管理版本號,并合理配置構建參數,優化插件的執行順序,減少了不必要的構建步驟。

開源之夏個人隨訪

? 自我介紹

大家好,我是?黃興抗?,目前就讀于南昌師范學院電子信息工程專業,大三學生。雖然我的專業和計算機軟件領域并不完全對口,但我對軟件開發也頗感興趣,因此也十分向往接觸云原生技術、微服務架構等前沿技術領域。接觸開源是大二下學期時開始,自那之后我就經常關注開源社區的技術動態。

參與該項目的原因?

選擇 SOFAStack 社區主要有基于以下幾點的考慮:

1. 技術積累

SOFAStack 作為螞蟻集團開源的金融級云原生架構,擁有豐富的企業級實踐經驗。社區項目涵蓋了微服務、云原生等熱門技術領域,與我未來想從事的就業發展方向高度契合。

2. 社區氛圍

SOFAStack 社區有著完善的新人引導機制,倉庫所有者也會為新人提供適合入手的 issue 作為開始。使得我在相關課題正式開發之前,就可以對其中的模塊瘦身白名單實現的相關 issue 做一定貢獻,讓我能夠切身感受到解決問題過程中完善的反饋機制。同時社區維護者積極響應,使我能夠及時獲得技術指導。

3. 項目價值

Koupleless 項目致力于解決企業實際痛點,具有明確的商業價值。自動化改造工具的開發也能夠幫助我積累工程化經驗。此外,項目涉及多個技術領域,有助于拓展技術視野。

?如何克服項目過程中的困難與挑戰

在開發過程中少不了各種大大小小的困難與挑戰,其中不僅有代碼實現部分,也有許多非代碼要求的項目流程,如文檔編寫、工作流的設計、測試用例等工作。這些實際面向企業的開發流程規范,讓尚未就業的我時常感到困惑和阻礙。在這一情況下,導師給到我很多指導和建議,如參考一些優秀的活躍社區,這讓我收獲頗多。

在項目開發的初期階段,導師會細心引導我深入了解項目的愿景、業務背景以及代碼的整體架構,幫助我整體緊抓課題的方向,為后續開發奠定了堅實的基礎。

在實際開發過程中,每當我遇到困難或卡點時,導師總是耐心地為我提供具體的建議和可行的改進方向,幫助我快速找到解決問題的思路。此外,社區還定期舉辦雙周例會,大家在會上同步開發進展、交流心得,針對開發中遇到的難題展開討論,并集思廣益尋找高效的解決方案。這種機制不僅增強了團隊協作,也讓我更好地在學習中成長。

最讓我印象深刻的挑戰之一,是如何處理各種不同項目的配置文件差異版本兼容性問題。針對前者,我采用了遞歸掃描的方式,并實現了智能合并策略,確保改造過程不會破壞原有配置。針對后者,面對不同版本的 Spring Boot 和 SOFABoot 應用,需要確保工具的通用性,最終通過實現版本檢測和適配機制解決了這個問題。

有哪些收獲

1. 技術積累

通過這個項目,我鍛煉了編碼能力,更重要的是學會了如何設計一個自動化工具來解決實際問題。尤其是在處理配置文件、管理依賴等方面積累了寶貴經驗。

2. 開源精神

參與社區讓我深刻體會到開源的協作精神。從社區成員的熱情幫助到積極的反饋機制,都讓我在解決問題的同時感受到了團隊合作的力量。

3. 工程思維

項目讓我開始從更全面的角度看問題:功能的實現只是第一步,如何保證工具的可維護性、擴展性,甚至用戶體驗,都是需要考慮的重要因素。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896918.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896918.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896918.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ollama存在安全風險的情況通報及解決方案

據清華大學網絡空間測繪聯合研究中心分析&#xff0c;開源跨平臺大模型工具Ollama默認配置存在未授權訪問與模型竊取等安全隱患。鑒于目前DeepSeek等大模型的研究部署和應用非常廣泛&#xff0c;多數用戶使用Ollama私有化部署且未修改默認配置&#xff0c;存在數據泄露、算力盜…

線代[9]|線性代數主要內容及其發展簡史(任廣千《線性代數的幾何意義》的附錄1)

文章目錄 向量行列式矩陣線性方程組二次型 向量 向量又稱為矢量&#xff0c;最初應用與物理學。很多物理量如力、速度、位移以及電場強度、磁感應強度等等都是向量。大約公元前350年前&#xff0c;古希臘著名學者亞里士多德就知道了力可以表示成向量&#xff0c;兩個力的組合作…

H20半精度推理報錯:Floating point exception (core dumped)

Nvidia H20 顯卡在執行bf16&#xff0c;f16推理時程序異常中斷 時間是 2025年3月4日 課題組新到的8卡H20服務器在使用過程中&#xff0c;torch加載模型進行bf16的推理時&#xff0c;出現Floating point exception (core dumped)錯誤 當時一頭霧水&#xff0c;后來苦苦尋找&…

服務是否設置為開機自啟動

在 Linux 系統中&#xff0c;可以通過以下幾種方法檢查服務是否設置為開機自啟動&#xff1a; 方法 1&#xff1a;使用 systemctl 命令&#xff08;適用于 systemd 系統&#xff09; systemctl 是 systemd 系統的命令行工具&#xff0c;用于管理系統服務。以下是具體步驟&…

QT——基于 QListWidget 和 QStackedWidget 的頁面切換

Qt 練習題&#xff1a;基于 QListWidget 和 QStackedWidget 的頁面切換 Qt 練習題&#xff1a;基于 QListWidget 和 QStackedWidget 的頁面切換 題目描述&#xff1a; 請使用 Qt 設計一個窗口&#xff0c;其中包含一個 QListWidget 和一個 QStackedWidget。要求實現以下功能&a…

DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)示例2: 分頁和排序

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏+關注哦 ?? 目錄 DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)示例2: 分頁和排序??前言??頁面效果??指令…

C語言文件操作學習筆記:從基礎到實踐

在C語言的知識體系中&#xff0c;文件操作是極為關鍵的一環&#xff0c;它賦予了程序存儲和讀取外部數據的能力&#xff0c;對于開發各類實用程序至關重要。近期&#xff0c;借助課程的學習&#xff0c;我對C語言文件操作進行了系統且深入的學習&#xff0c;下面將我的學習心得…

VLM-E2E:通過多模態駕駛員注意融合增強端到端自動駕駛

25年2月來自香港科大廣州分校、理想汽車和廈門大學的論文“VLM-E2E: Enhancing End-to-End Autonomous Driving with Multimodal Driver Attention Fusion”。 人類駕駛員能夠利用豐富的注意語義&#xff0c;熟練地應對復雜場景&#xff0c;但當前的自動駕駛系統難以復制這種能…

第十天-字符串:編程世界的文本基石

在編程的廣闊領域中&#xff0c;字符串是極為重要的數據類型&#xff0c;它就像一座橋梁&#xff0c;連接著人類的自然語言和計算機能夠理解與處理的數字信息。下面&#xff0c;讓我們深入探索字符串的世界。 一、字符串簡介 字符串是由零個或多個字符組成的有序序列&#xff…

《基于HarmonyOS NEXT API 12+,搭建新聞創作智能寫作引擎》

在信息爆炸的時代&#xff0c;新聞行業對于內容生產的效率和質量有著極高的要求。AI技術的發展為新聞創作帶來了新的變革契機&#xff0c;借助AI智能寫作助手&#xff0c;新聞工作者可以快速生成新聞稿件的初稿&#xff0c;大大提高創作效率。本文將基于HarmonyOS NEXT API 12及…

基于STM32的環境監測系統(自制藍牙APP)

目錄 項目概述 實物圖 演示視頻 概述 硬件模塊 原理圖以及PCB 0.96寸OLED屏幕&#xff08;SSD1306&#xff09; CubeMX配置 初始化代碼 MQ-2煙霧傳感器 CubeMX配置 初始化代碼 DHT11溫濕度模塊 驅動代碼 HC-05藍牙模塊 CubeMX配置 ?編輯 空閑中斷回調函數 有…

linux離線安裝ollama并部署deepseek-r1模型 指南

這篇文章主要分為兩部分&#xff1a; (1)離線環境下如何部署Ollama&#xff1b; (2)在離線環境下如何配置大模型&#xff0c;其中這一步又分為&#xff1a; ?1)部署完整的deepseek大模型&#xff0c;如&#xff1a;deepseek-r1:32B; ?2)部署蒸餾版模型&#xff0c;如&#xf…

坐標變換介紹與機器人九點標定的原理

【備注】本文的C#代碼在下面鏈接中可以下載:Opencv的C#九點標定代碼資源-CSDN文庫 https://download.csdn.net/download/qq_34047402/90452336 一、坐標變換的介紹 1.繞原點旋轉的坐標變換 一個點(x,y)繞原點旋轉u度,其旋轉后的坐標(x1,y1)如何計算? 2.繞任意點的坐標變…

大語言模型 智能助手——既能生成自然語言回復,又能在必要時調用外部工具獲取實時數據

示例代碼&#xff1a; import json from langgraph.graph import Graph, END,StateGraph from langchain_core.utils.function_calling import convert_to_openai_function from langchain_community.tools.openweathermap import OpenWeatherMapQueryRun from langchain_core…

FPGA學習(一)——DE2-115開發板編程入級

FPGA學習&#xff08;一&#xff09;——DE2-115開發板編程入級 一、實驗目的 通過 1 位全加器的詳細設計&#xff0c;深入掌握原理圖輸入以及 Verilog 的兩種設計方法&#xff0c;熟悉 Quartus II 13.0 軟件的使用流程&#xff0c;以及在 Intel DE2-115 開發板上的硬件測試過…

中間件專欄之MySQL篇——MySQL事務原理、鎖機制分析

MySQL的事務性也是其重要特性之一。 什么是事務&#xff1a;事務的本質是并發控制的單元&#xff0c;是用戶定義的一個操作序列。這些操作要么都做&#xff0c;要么都不做&#xff0c;是 一個不可分割的工作單位。 目的&#xff1a;事務的目的在于將數據庫從一種一致性狀態轉…

機器學習的三個基本要素

機器學習的基本要素包括模型、學習準則&#xff08;策略&#xff09;和優化算法三個部分。機器學習方法之間的不同&#xff0c;主要來自其模型、學習準則&#xff08;策略&#xff09;、優化算法的不同。 模型 機器學習首要考慮的問題是學習什么樣的模型&#xff08;Model&am…

集成方案 | Docusign 能與哪些應用程序集成?

如何實現 Docusign 與多種系統平臺之間的高效集成&#xff1f; 在企業跨境簽約場景中&#xff0c;員工常常需要在電子簽系統與辦公應用&#xff08;如釘釘、企業微信&#xff09;、CRM、ERP 等系統之間來回切換&#xff0c;手動上傳合同、下載簽署文件并同步數據。這種繁瑣的操…

2025華為OD機試真題目錄【E卷+A卷+B卷+C卷+D卷】持續收錄中...

摘要 本專欄提供2025最新最全的華為OD機試真題庫&#xff08;EABCD卷&#xff09;&#xff0c;包括100分和200分題型。題目包含題目描述、輸入描述、用例、備注和解題思路、多種語言解法&#xff08;Java/JS/Py/C/C&#xff09;。希望小伙伴們認真學習、順利通過。 聲明 本專…

廣域互聯網關鍵技術詳解(GRE/LSTP/IPsec/NAT/SAC/SPR)

《廣域互聯網關鍵技術詳解》屬于博主的“廣域網”專欄&#xff0c;若想成為HCIE&#xff0c;對于廣域網相關的知識需要非常了解&#xff0c;更多關于廣域網的內容博主會更新在“廣域網”專欄里&#xff0c;請持續關注&#xff01; 一.前言 廣域互聯技術紛雜多樣&#xff0c;不…