当前位置: 首页 > news >正文

阿里部分集团内部中间件简介

目录

  • Pandora Boot
  • HSF
  • MetaQ
  • TDDL
  • Xdb·OTS·OceanBase
  • Switch
  • EagleEye
  • SLS
  • Sunfire

Pandora Boot

背景与需求
在阿里巴巴内部,几乎所有的应用程序都依赖于多种中间件(例如HSF、TDDL、Diamond等),而这些中间件之间常常存在版本冲突和依赖问题。传统的Maven依赖管理工具只能通过排除冲突来解决这种问题,但这往往会导致更复杂的错误和更高的维护成本。为了解决这些问题,阿里巴巴开发了Pandora,一个基于类隔离技术的轻量级容器,用于管理和隔离中间件依赖,确保系统的稳定性。


依赖冲突问题的产生
依赖冲突问题通常出现在以下情况:

    1. 版本冲突:同一个类库的不同版本被不同的中间件或应用程序依赖。例如,中间件A依赖类库X的1.0版本,而中间件B依赖类库X的2.0版本。由于传统的Maven依赖管理是平坦化的,它只能选择其中一个版本,这可能导致应用程序在运行时遇到NoSuchMethodError或ClassNotFoundException等错误。
    1. 多中间件依赖:当一个应用程序同时依赖多个中间件,而这些中间件又依赖不同版本的相同类库时,如果没有适当的隔离机制,这些依赖会混淆在一起,导致运行时错误。

Pandora Boot的类加载器隔离技术
Pandora Boot通过引入多个类加载器,并对这些类加载器的职责进行明确划分,来解决上述的依赖冲突问题。具体的隔离机制如下:

    1. PandoraClassLoader:
    • 这是Pandora容器的类加载器,负责加载Pandora自身的核心类库和中间件依赖的类库。由于PandoraClassLoader独立于应用程序的类加载器(AppClassLoader),因此它可以确保Pandora容器中的类不会与应用程序的类发生冲突。
    • 这个类加载器基本上是一个标准的URLClassLoader,但由于它不依赖于应用程序的类加载器,所以可以独立加载其所需的类库。
    1. ModuleClassLoader:
    • 为每个中间件插件(如HSF、TDDL等)创建一个独立的ModuleClassLoader。这样,每个插件中的类库只会在其对应的ModuleClassLoader中加载,插件之间的类不会互相干扰。这种插件级别的隔离确保了即使不同插件依赖相同类库的不同版本,也不会发生冲突。
    • 每当部署一个新的中间件插件时,Pandora会为该插件创建一个新的ModuleClassLoader,以保证插件之间的完全隔离。
    1. BizClassLoader:这是用于加载应用程序自身类库的类加载器,可以由外部传入。它与Pandora的类加载器体系是独立的,从而实现应用程序与Pandora之间的隔离。

Pandora Boot的运行机制

Pandora Boot在运行时,首先会启动Pandora环境,准备好类隔离环境,然后再启动应用程序的主函数。这样,应用程序可以选择传统的Spring XML配置方式,也可以使用更现代的Spring Boot方式进行开发。

Pandora Boot的启动过程与Spring Boot类似,但在生成的可执行jar文件中,Pandora Boot会替换Spring Boot的Main-Class为Pandora Boot的启动器,并加载额外的Pandora Boot特定的jar包。这个过程确保了在启动时,Pandora Boot能够优先加载必要的类,从而实现中间件的平滑升级和统一管理。


Pandora Boot的引入与优势

Pandora Boot是Pandora

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Qt:实现单例模式
  • 1.1 计算机网络基本概述
  • #if等命令的学习
  • 【Unity踩坑】为什么有Rigidbody的物体运行时位置会变化
  • 【Linux】Image、zImage与uImage的区别
  • 【蜡笔小新专享】安装虚拟机、PHP、DVWA
  • 三只羊的麻烦,轮到抖音了…
  • OpenCore Legacy Patcher 2.0.0 发布,83 款不受支持的 Mac 机型将能运行最新的 macOS Sequoia
  • Android Studio Menu制作
  • GPIO子系统
  • leetcode49字母异位词分组
  • 一.Oracle每日运维操作
  • 清理C盘缓存,电脑缓存清理怎么一键删除,操作简单的教程
  • Html在线编辑器
  • Markdown formula 公式
  • 10个确保微服务与容器安全的最佳实践
  • Android开源项目规范总结
  • Angular2开发踩坑系列-生产环境编译
  • canvas绘制圆角头像
  • eclipse(luna)创建web工程
  • iOS 系统授权开发
  • JAVA_NIO系列——Channel和Buffer详解
  • node学习系列之简单文件上传
  • php中curl和soap方式请求服务超时问题
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 回顾2016
  • 让你的分享飞起来——极光推出社会化分享组件
  • 入口文件开始,分析Vue源码实现
  • 试着探索高并发下的系统架构面貌
  • 新书推荐|Windows黑客编程技术详解
  • 仓管云——企业云erp功能有哪些?
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #数据结构 笔记一
  • $.ajax()
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (4) PIVOT 和 UPIVOT 的使用
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (Charles)如何抓取手机http的报文
  • (ZT)出版业改革:该死的死,该生的生
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (八)c52学习之旅-中断实验
  • (待修改)PyG安装步骤
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (三)mysql_MYSQL(三)
  • (十六)串口UART
  • (一)RocketMQ初步认识
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转) Face-Resources
  • (转载)从 Java 代码到 Java 堆
  • .NET DataGridView数据绑定说明
  • .NET 发展历程
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化