Pandora Boot和Spring Boot


Pandora Boot和Spring Boot

在阿里集團內部,幾乎所有的應用都用到了各式各樣的中間件,比如HSF、TDDL、Diamond等等。本身中間件之間可能就有版本依賴的問題,比如你的應用HSF和Diamond分別依賴了同名jar包的不同版本,maven只會引入其中一個版本。同樣的中間件和應用之間也存在同樣的Jar包依賴的問題,出於要解決這些依賴沖突的問題,阿里就開發了Pandora ,中文名潘多拉,簡單的來說就是一個類隔離容器。

Pandora要解決的問題:

  1. 二方包、三方包沖突:NoSuchMethodError

如果不采用類隔離,則應用依賴的所有外部類都植入到CLASSPATH下,都由AppClassLoader進行加載。假設類A依賴類B (version 1),類C依賴類B (version 2),並且使用了B (version2)中的一個新方法,如果此時AppClassLoader加載的是B(version),就會獲得成就“NoSuchMethodError”。依賴管理工具Maven給出的解法是,手動將B(version1)排除,它會導致應用起不來。

img

2. 沖突排查浪費大量時間

試想,如果我們應用系統依賴的中間件逐漸增多時,排除包將是一件很恐怖的事情!那么中間件團隊可能就要花大量時間在答疑上面,和應用開發一起折騰了。

可怕的遠遠不止此,排除好了,應用系統也跑起來了,但到了某個點某個場景可能就出bug了。

3.中間件升級困難

如果要實時升級中間件到推薦版本,但是發現並沒有那么容易,應用中引入了十個八個中間件,隔三差五其中一個中間件就有小版本更新,每天盯着中間件的更新情況,那還有時間關心業務的開發了。

那Pandora要解決什么問題:

  • 實現類隔離,提供穩定的運行環境,Pandora實現了應用與中間件之間隔離、中間件與中間件之間隔離,保證了類的正確加載,而不會讓依賴關系與依賴加載出現不一一對應的情況。
  • 中間件平滑升級,由於應用服務器會優先加載Pandora的類,因此只要升級Pandora中的插件即可,無需對應用中的pom.xml進行修改。
  • 中間件統一管理,降低中間件接入和使用成本,Pandora會統一管理中間的啟動、初始化以及資源回收等一系列操作,開發者基本上只需要了解它的配置及使用特性就好

設計上要滿足:

  • 類加載器隔離,Pandora容器本身和應用之間隔離
  • 中間件插件化,定義標准的啟動、導出方式和使用方法
  • 集成到spring ioc,減少提供優化的API降低使用成本

Pandora 內部組件圖

主應用依賴Pandora Bootstrap(啟動器),負責將所有插件化中間件的核心類加載並導出。隨后在使用到中間件時,將通過這些導出的類進行對象的實例化。

img

Pandora Boot

Pandora Boot是在Pandora的基礎之上,發展出的更輕量地使用集團中間件的方式;它基於Pandora和FatJar技術,也可以在IDE里啟動Pandora環境,開發調試等效率大大提高。也就是Pandora Boot是Pandora與Spring Boot結合的產物,可以更方便的享受Spring Boot社區帶來的便利。

Pandora Boot與Spring Boot的聯系和區別

如果你了解osgi,一定聽說過Servlet Container In OSGI的運行模式,有點那個意思!Pandora Boot是運行中在Spring Boot上的,完全兼容。對Pandora Boot來說Spring Boot就像是一個依賴或者簡單的Main函數應用。

兩者區別:

  • Spring Boot 通過 Maven 來管理依賴,是扁平化的,前面提到的二方包、三方包依賴問題,SpringBoot里通過maven解決不了
  • Pandora Boot很好的管理了中間件應用,用戶可以快速的引入各類中間件,平滑的保持中間件升級。
  • Pandora Boot 目前已經很好的集成了 autoconfig,外部也和 AONE2、PSP 等系統進行打通,開發起來更加的方便

關於啟動原理

下圖要結合內部組件圖進行理解(生成的可運行的jar解壓)會發現區別:Main-Class被替換成Pandora Boot的!

img

下圖是spring boot的其實就是maven plugins的spring-boot-loader-tools把spring-boot-loader.jar打進去了。

img

Pandora Boot原理也是,它復雜點最終呈現的是spring-boot-loader.jar和pandora-boot-loader.jar。

img

but,Pandora Boot畢竟未開源,現在的學習資料和視頻還是比較少的,但這並沒關系,如果你對spring boot啟動原理及相關源碼比較熟悉的話,你會發現Pandora Boot是采用了它的理念並加以拓展!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM