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

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

目录

  • 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与Spring


http://www.kler.cn/a/305593.html

相关文章:

  • 【JavaEE进阶】导读
  • Python网络爬虫与数据采集实战——什么是网络爬虫
  • Android 进入浏览器下载应用,下载的是bin文件无法安装,应为apk文件
  • ubuntu20.04安装anaconda与基本使用
  • 【ARM Coresight OpenOCD 系列 5 -- arp_examine 使用介绍】
  • 光流法与直接法在SLAM中的应用
  • 【Elasticsearch系列四】ELK Stack
  • DroidBot-GPT: GPT-powered UI Automation for Android论文学习
  • C++学习笔记----7、使用类与对象获得高性能(一)---- 书写类(2)
  • 【编程基础知识】Java语言中字面字符和转义字符的区别
  • 自建,前端sdk库(react-utils-dev-sdk)
  • Pytorch2.4.0自动安装cudnn9.1??? pip安装cudnn方法
  • 使用SQLAlchemy进行数据库操作:编写一个高效的Python函数
  • SpringBoot和SpringMVC是什么关系?SpringBoot替代SpringMVC了吗?
  • 继图书管理项目遗留的问题修改
  • Google宣布所有英语语种的Gemini Live用户现可免费使用
  • 对游戏语音软件Oopz遭遇DDoS攻击后的一些建议
  • 深入了解 Python 的 argparse 模块:命令行参数处理的艺术
  • 828华为云征文 | 华为云X实例服务器上部署知识图谱项目的详细指南
  • 企微机器人:企业数字化转型的得力助手
  • dubbo一
  • 重拾java-------day2(下载,特点,运行过程,环境变量)
  • React 中的事件绑定与参数传递
  • 尚品汇-订单拆单、支付宝关闭交易、关闭过期订单整合(五十)
  • 《网络协议 - HTTP传输协议及状态码解析》
  • 伙房食堂电气安全新挑战:油烟潮湿环境下,如何筑起电气火灾“防火墙”?