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是采用了它的理念并加以拓展!

posted @ 2020-12-12 13:00  JaxYoun  阅读(1269)  评论(0编辑  收藏  举报