1. 程式人生 > >阿里巴巴開源框架JarsLink

阿里巴巴開源框架JarsLink

JarsLink (原名Titan) 是一個基於JAVA的模組化開發框架,它提供在執行時動態載入模組(一個JAR包)、解除安裝模組和模組間呼叫的API。也是阿里巴巴的開源專案之一 https://github.com/alibaba/jarslink,目前在微貸事業群廣泛使用。

需求背景

  • 應用拆分的多或少都有問題。多則維護成本高,每次釋出一堆應用。少則拆分成本高,無用功能很難下線。
  • 故障不隔離。當一個系統由多人同時參與開發時,修改A功能,可能會影響B功能,引發故障。
  • 多分支開發引發衝突。多分支開發完之後合併會產生衝突。
  • 牽一髮動全身。一處核心程式碼的改動,或一個基礎Jar的升級需要回歸整個系統。
  • 升級和遷移成本高。中介軟體升級每個應用都有升級成本。

模組化開發的好處

  • 可插拔,一個應用由多個模組組成,應用裡的模組可拆和合,模組可快速在多個系統中遷移和部署。
  • 模組化開發,模組之間互相隔離,實現故障隔離。
  • 一個模組一個分支,不會引發程式碼衝突。
  • 在模組中增加或修改功能,只會影響當前模組,不會影響整個應用。
  • 動態部署,在執行時把模組部署到應用中,快速修復故障,提高發布效率。
  • 多版本部署,可以在執行時同時部署某個模組的新舊版本,進行AB TEST。
  • 減少資源消耗,通過部署模組的方式減少應用數量和機器數量。

JarsLink的應用場景

  • 微服務整合測試, 目前一個微服務是一個FAT JAR,如果有幾十個微服務,則需要啟動很多程序,DEBUG埠會很多,使用JarsLink框架合併FAT JAR,再路由請求到其他JAR,就可以只啟動一個程序進行DEBUG測試。
  • 資料管理中心,資料採集的資料來源多,而且每種資料來源都需要對接和開發,通過模組化開發,實現一個數據源使用一個模組進行對接。
  • 指標計算系統,每個TOPIC一個模組,把訊息轉發到模組中進行訊息處理。
  • 後臺管理系統,幾乎每個系統都有後臺開發的需求,新建應用則應用數多,維護成本高,引入模組化開發,一個二級域一個模組來開發後臺功能。

目前螞蟻金服微貸事業部幾個系統和幾十個模組已經使用JarsLink框架。

JarsLink的特性

隔離性

  • 類隔離:框架為每個模組的Class使用單獨的ClassLoader來載入,每個模組可以依賴同一種框架的不同的版本。
  • 例項隔離:框架為每個模組建立了一個獨立的Spring上下文,來載入模組中的BEAN,例項化失敗不會影響其他模組。
  • 資源隔離:後續會支援模組之間的資源隔離,每個模組使用獨立的CPU和記憶體資源。

動態性

  • 動態載入:模組能在執行時動態載入到系統中,實現不需要重啟和釋出系統新增功能。支援突破雙親委派機制,在執行時載入父載入器已經載入過的類,實現模組升級依賴包不需要系統釋出。
  • 動態解除安裝:模組能在執行時被動態解除安裝乾淨,實現快速下線不需要功能。

易用性

  • 提供了通用靈活的API讓系統和模組進行互動。


方 騰飛

花名清英,併發網(ifeve.com)創始人,暢銷書《Java併發程式設計的藝術》作者,螞蟻金服技術專家。目前工作於支付寶微貸事業部,關注網際網路金融,併發程式設計和敏捷實踐。微信公眾號aliqinying。