在阿里集团内部,几乎所有的应用都用到了各式各样的中间件,比如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)排除,它会导致应用起不来。

2. 冲突排查浪费大量时间

试想,如果我们应用系统依赖的中间件逐渐增多时,排除包将是一件很恐怖的事情!那么中间件团队可能就要花大量时间在答疑上面,和应用开发一起折腾了。

可怕的远远不止此,排除好了,应用系统也跑起来了,但到了某个点某个场景可能就出bug了。

3.中间件升级困难

如果要实时升级中间件到推荐版本,但是发现并没有那么容易,应用中引入了十个八个中间件,隔三差五其中一个中间件就有小版本更新,每天盯着中间件的更新情况,那还有时间关心业务的开发了。

那Pandora要解决什么问题:

  • 实现类隔离,提供稳定的运行环境,Pandora实现了应用与中间件之间隔离、中间件与中间件之间隔离,保证了类的正确加载,而不会让依赖关系与依赖加载出现不一一对应的情况。
  • 中间件平滑升级,由于应用服务器会优先加载Pandora的类,因此只要升级Pandora中的插件即可,无需对应用中的pom.xml进行修改。
  • 中间件统一管理,降低中间件接入和使用成本,Pandora会统一管理中间的启动、初始化以及资源回收等一系列操作,开发者基本上只需要了解它的配置及使用特性就好

设计上要满足:

  • 类加载器隔离,Pandora容器本身和应用之间隔离
  • 中间件插件化,定义标准的启动、导出方式和使用方法
  • 集成到spring ioc,减少提供优化的API降低使用成本

Pandora 内部组件图

主应用依赖Pandora Bootstrap(启动器),负责将所有插件化中间件的核心类加载并导出。随后在使用到中间件时,将通过这些导出的类进行对象的实例化。

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解决不了
  • Pandora Boot很好的管理了中间件应用,用户可以快速的引入各类中间件,平滑的保持中间件升级。
  • Pandora Boot 目前已经很好的集成了 autoconfig,外部也和 AONE2、PSP 等系统进行打通,开发起来更加的方便

关于启动原理

下图要结合内部组件图进行理解(生成的可运行的jar解压)会发现区别:Main-Class被替换成Pandora Boot的!

下图是spring boot的其实就是maven plugins的spring-boot-loader-tools把spring-boot-loader.jar打进去了。

Pandora Boot原理也是,它复杂点最终呈现的是spring-boot-loader.jar和pandora-boot-loader.jar。

but,Pandora Boot现在的学习资料和视频还是比较少的,但这并没关系,如果你对spring boot启动原理及相关源码比较熟悉的话,你会发现Pandora Boot是采用了它的理念并加以拓展!

Pandora Boot和spring Boot相关推荐

  1. Spring Boot 入门——Spring Boot 简介||微服务简介

    Spring Boot 入门 1.Spring Boot 简介 Spring Boot来简化Spring应用开发,约定大于配置, 去繁从简,just run就能创建一个独立的,产品级别的应用 简化Sp ...

  2. spring boot三:spring boot的hello, world

    一: 创建一个maven工程(jar) 1. 打开idea,创建新工程 2. 选择maven----> project_sdk,选择安装的jdk 3.进入idea后,点击"enable ...

  3. Spring Boot(3)---Spring Boot入门:系统要求

    Spring Boot入门:系统要求 TagsSpring Boot, Spring Boot中文官方文档 9.系统要求 Spring Boot 2.0.0.RELEASE需要Java 8或9以及 S ...

  4. Spring Boot:在Spring Boot中使用定时任务

    2019独角兽企业重金招聘Python工程师标准>>> 本文主要介绍如何在Spring Boot中使用定时任务,假设你已经建好了一个基础的Spring Boot项目.首先,我们在项目 ...

  5. boot入门思想 spring_什么是Spring boot?Spring Boot快速入门以及Spring Boot实例教程

    转自:http://www.jianshu.com/p/d24bceea7665 简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候, ...

  6. [Spring Boot] 2. Spring Boot 启动过程定制化

    在上一篇文章中,从源码角度介绍了Spring Boot的启动过程.启动的代码虽然只有短短的一行,但是背后所做的工作还真不少,其中有一些可以定制化的部分,主要分为以下几个方面: 初始化器(Initial ...

  7. Spring Boot 整合——Spring Boot整合kafka整合

    Spring Boot 整合之前的内容 项目名称 描述 地址 base-data-mybatis 整合mybatis-plus(实际上官方教程已经很多,只做了自定义插件) 未完成 base-jpa J ...

  8. 【Spring Boot】Spring Boot 2.x + Spring Security OAuth2 2.3.3 出现 bad client credentials 错误的踩坑记录

    环境: spring boot 2.0.4.RELEASE spring security oauth 2.3.3.RELEASE OAuth2的配置 @Configuration @EnableAu ...

  9. [Spring Boot] 4. Spring Boot实现自动配置的原理

    入口注解类@EnableAutoConfiguration @SpringBootApplication注解中包含了自动配置的入口注解: @Target(ElementType.TYPE) @Rete ...

最新文章

  1. 大厂程序员和北京户口教师女友买房分歧,要求分配产权怕离婚扯皮
  2. JDOM是JAVA中最常用的一种解析XML的工具
  3. 半小时训练亿级规模知识图谱,亚马逊这个 AI 框架要火
  4. Python-OpenCV 笔记5 -- 几何变换(Geometric Transformations)
  5. javascript动态创建table
  6. 博达3956交换机配置手册_网络设备维保浅谈之交换机维保
  7. 如何在数字化转型战略中真正获得价值?浅谈数字化转型的四个层级
  8. python定义一个整数变量_python循环定义多个变量的实例分析
  9. dlsym 如何查看一个so里面的_如何查看并且使用android系统本身包含的so库?
  10. slab 着色如何最大限度地利用 Cache Lines 或 Cache Rows?
  11. post 261.html,261除以6约等于
  12. 如今前端程序员还有前途吗?
  13. Linq之Lambda进阶
  14. 生物信息学|基于多尺度特征融合的药物-药物相互作用预测
  15. Win7系统解决无法打开任务管理器
  16. 7-5 最佳情侣身高差
  17. 使用overleaf或Latex时,表头两行合并
  18. 图片太大怎么压缩变小?压缩有技巧
  19. eas bos客户端获取组织,人员,用户的方法
  20. PAT 1009 蜜蜂寻路

热门文章

  1. [Unity3D经验分享]批处理工具 (提前下班神器)
  2. blink php,什么是 Blink?
  3. [WinApi] C#获取其他窗口文本框内容
  4. win7此windows系统副本不正正版解决方法
  5. 《那些年啊,那些事——一个程序员的奋斗史》——70
  6. 【Linux】静态库与共享库
  7. java code combat_CodeCombat编程游戏
  8. 医用计算机软件属于,大型医用设备考试题库app
  9. java记事本源代码
  10. m3u8文件转换mp4