JarsLink 詳細介紹
JarsLink (原名 Titan ) 是一個基於 Java 的模組化開發架構,它提供在運行時動態載入模組(一個 Jar 包)、卸載模組和模組間調用的 API。 需求背景
應用拆分的多或少都有問題。多則維護成本高,每次發布一堆應用。少則拆分成本高,無用功能很難下線。
故障不隔離。當一個系統由多人同時參與開發時,修改A功能,可能會影響B功能,引發故障。
多分支開發引發衝突。多分支開發完之後合并會產生衝突。
牽一髮動全身。一處核心代碼的改動,或一個基礎Jar的升級需要迴歸整個系統。
升級和遷移成本高。中介軟體升級每個應用都有升級成本。 模組化開發的好處
可插拔,一個應用由多個模組組成,應用裡的模組可拆和合,模組可快速在多個系統中遷移和部署。
模組化開發,模組之間互相隔離,實現故障隔離。
一個模組一個分支,不會引發代碼衝突。
在模組中增加或修改功能,只會影響當前模組,不會影響整個應用。
動態部署,在運行時把模組部署到應用中,快速修複故障,提高發布效率。
多版本部署,可以在運行時同時部署某個模組的新舊版本,進行AB TEST。
減少資源消耗,通過部署模組的方式減少應用數量和機器數量。 JarsLink的應用情境
微服務整合測試, 目前一個微服務是一個FAT JAR,如果有幾十個微服務,則需要啟動很多進程,DEBUG連接埠會很多,使用JarsLink架構合并FAT JAR,再路由請求到其他JAR,就可以只啟動一個進程進行DEBUG測試。
資料管理中心,資料擷取的資料來源多,而且每種資料來源都需要對接和開發,通過模組化開發,實現一個資料來源使用一個模組進行對接。
指標計算系統,每個TOPIC一個模組,把訊息轉寄到模組中進行訊息處理。
後台管理系統,幾乎每個系統都有後台開發的需求,建立應用則應用數多,維護成本高,引入模組化開發,一個二級域一個模組來開發後台功能。
目前螞蟻金服微貸事業部幾個系統和幾十個模組已經使用JarsLink架構。 JarsLink的特性
隔離性
類隔離:架構為每個模組的Class使用單獨的ClassLoader來載入,每個模組可以依賴同一種架構的不同的版本。
執行個體隔離:架構為每個模組建立了一個獨立的Spring上下文,來載入模組中的BEAN,執行個體化失敗不會影響其他模組。
資源隔離:後續會支援模組之間的資源隔離,每個模組使用獨立的CPU和記憶體資源。
動態性
動態發布:模組能在運行時動態載入到系統中,實現不需要重啟和發布系統新增功能。支援突破雙親委派機制,在運行時載入父載入器已經載入過的類,實現模組升級依賴包不需要系統發布。
動態卸載:模組能在運行時被動態卸載乾淨,實現快速下線不需要功能。
易用性
提供了通用靈活的API讓系統和模組進行互動。