资料介绍
软件简介
SOFAArk 是一款基于 Java 实现的轻量级类隔离容器,由蚂蚁金服公司开源贡献;主要为应用程序提供类隔离和依赖包隔离的能力;基于 Fat Jar 技术,应用可以被打包成一个自包含可运行的 Fat Jar,应用既可以是简单的单模块 Java 应用也可以是 Spring Boot 应用。可访问网址进入快速开始并获取更多详细信息。
背景
日常使用 Java 开发,常常会遇到包依赖冲突的问题,尤其当工程应用变得臃肿庞大,包冲突的问题也会变得更加棘手,导致各种各样的报错,例如LinkageError, NoSuchMethodError等;实际开发中,可以采用多种方法来解决包冲突问题,比较常见的是类似 SpringBoot 的做法,统一管理应用所有依赖包的版本,保证这些三方包不存在依赖冲突;这种做法只能有效避免包冲突的问题,不能根本上解决包冲突的问题;如果某个应用的确需要在运行时使用两个相互冲突的包,例如 protobuf2 和 protobuf3,那么类似 SpringBoot 的做法依然解决不了问题;
为了彻底解决包冲突的问题,我们需要借助类隔离机制,使用不同的 Classloader 加载不同版本的三方依赖,进而隔离包冲突问题;OSGI 作为业内最出名的类隔离框架,自然是可以被用于解决上述包冲突问题,但是 OSGI 框架太过臃肿,功能繁杂;为了解决包冲突问题,引入 OSGI 框架,有牛刀杀鸡之嫌,反而使工程变得更加复杂,不利于开发;
SOFAArk 专注于解决类隔离问题,采用轻量级的类隔离方案来解决日常经常遇到的包冲突问题,在蚂蚁金服内部服务于整个 SOFABoot 技术体系,弥补 SpringBoot 没有的类隔离能力。实际上,SOFAArk 是一个通用的轻量级类隔离框架,并不限于 SpringBoot 应用,也可以和其他的 Java 开发框架集成;
原理
SOFAArk 框架包含有三个概念,Ark Container, Ark Plugin 和 Ark Biz; 运行时逻辑结构图如下:

在介绍这三个概念之前,为了统一术语,有必要先说一下所谓的 Ark 包;Ark 包是满足特定目录格式要求的 Executed Fat Jar,使用官方提供的 Maven 插件 sofa-ark-maven-plugin可以将工程应用打包成一个标准格式的 Ark 包;使用命令 java -jar application.jar即可在 Ark 容器之上启动应用;Ark 包 通常包含 Ark Container、Ark Plugin、 Ark Biz;以下我们针对这三个概念简单做下名词解释:
-
Ark Container: Ark 容器,负责整个运行时的管理;Ark Plugin和Ark Biz运行在 Ark 容器之上;容器具备管理多插件、多应用的功能;容器启动成功后,会自动解析 classpath 包含的Ark Plugin和Ark Biz依赖,完成隔离加载并按优先级依次启动之; -
Ark Plugin: Ark 插件,满足特定目录格式要求的Fat Jar,使用官方提供的Maven插件sofa-ark-plugin-maven-plugin可以将一个或多个普通的Java Jar包打包成一个标准格式的Ark Plugin;Ark Plugin会包含一份配置文件,通常包括插件类导入导出配置、插件启动优先级等;运行时,Ark 容器会使用独立的PluginClassLoader加载插件,并根据插件配置构建类加载索引表,从而使插件与插件、插件与应用之间相互隔离; -
Ark Biz: Ark 业务模块,满足特定目录格式要求的Fat Jar,使用官方提供的Maven插件sofa-ark-maven-plugin可以将工程应用打包成一个标准格式的Ark-Biz包;是工程应用模块及其依赖包的组织单元,包含应用启动所需的所有依赖和配置;
在运行时,Ark Container 优先启动,自动解析 classpath 包含的 Ark Plugin 和 Ark Biz,并读取他们的配置,构建类加载索引关系;然后使用独立的 Classloader 加载他们并按优先级配置依次启动;需要指出的是,Ark Plugin 优先 Ark Biz被加载启动;Ark Plugin 之间是双向类索引关系,即可以相互委托对方加载所需的类;Ark Plugin 和 Ark Biz 是单向类索引关系,即只允许 Ark Biz 索引 Ark Plugin 加载的类,反之则不允许。
场景
SOFAArk初衷是为了解决包冲突问题,那什么情况下可以使用 SOFAArk 以及如何使用呢? 假设如下场景,如果工程需要引入两个三方包:A 和 B,但是 A 需要依赖版本号为 0.1 的 C 包,而恰好 B 需要依赖版本号为 0.2 的 C 包,且 C 包的这两个版本无法兼容:

此时,即可使用 SOFAArk 解决该依赖冲突问题;只需要把 A 和版本为 0.1 的 C 包一起打包成一个 Ark Plugin,然后让应用工程引入该插件依赖即可。
- PSoC NeoPixel Easy轻量级库
- 嵌入式Linux容器技术
- 轻量级的SDN数据包转发验证方案 10次下载
- 基于Feistel结构的超轻量级分组密码算法 4次下载
- 基于轻量级虚拟化的LDDoS仿真攻防方法 6次下载
- 基于YOLO改进的轻量级交通标识检测模型 12次下载
- 一种轻量级时间卷积网络设计方案 6次下载
- Protothreads极轻量级系统的详细资料简介
- Java教程之零点起飞学Java的类与对象资料说明 14次下载
- 基于ARM的轻量级TCPIP协议栈的移植及应用 54次下载
- 基于MVC架构的轻量级工作流引擎设计 0次下载
- 轻量级工作流引擎架构设计 0次下载
- 轻量级RFID安全协议 22次下载
- 基于动态AOP 和WebServices 的轻量级RBAC
- Java的类 0次下载
- Linux轻量级工具集合Busybox的特点和使用 2.4k次阅读
- 类隔离的使用场景 869次阅读
- 一个轻量级的权限认证框架:Sa-Token 4.2k次阅读
- 解读Ⅰ类陶瓷电容器与Ⅱ类陶瓷电容器 2.5k次阅读
- 一个纯Python编写的轻量级数据库 1.8k次阅读
- 针对单片机开发的轻量级OTA组件 2.3k次阅读
- TinyDB轻量级数据库有哪些特点呢 2.6k次阅读
- 一款适合初学者超轻量级C语言网络库—Dyad 3.3k次阅读
- 轻量级Kubernetes-K3S工具介绍 3.5k次阅读
- 容器——“轻量级”的虚拟化 8k次阅读
- 全球首款轻量级机械臂已经出现了! 8.2k次阅读
- Java数组的常用方法_Java:数组工具类Arrays类的常用方法的用法及代码 3.1k次阅读
- spring框架中定时器使用与配置 2.1k次阅读
- 谷歌开源TFGAN轻量级的工具库 目的是让训练和评估GAN变得更加简单 5.6k次阅读
- 谷歌开发一个轻量级的库——TFGAN 它可以让生成对抗网络更易于实验 6k次阅读
下载排行
本周
- 1矽力杰 Silergy SY7215A 同步升压调节器 规格书 Datasheet 佰祥电子
- 1.12 MB | 5次下载 | 免费
- 2HT81696H 内置升压的30W立体声D类音频功放数据手册
- 1.21 MB | 1次下载 | 免费
- 3HTA6863 3W超低噪声超低功耗单声道D类音频功率放大器数据手册
- 0.87 MB | 次下载 | 免费
- 4南芯 Southchip SC8802C 充电控制器 规格书 Datasheet 佰祥电子
- 88.16 KB | 次下载 | 免费
- 5矽力杰 Silergy SY7065 同步升压转换器 规格书 Datasheet 佰祥电子
- 910.67 KB | 次下载 | 免费
- 6矽力杰 Silergy SY7066 同步升压转换器 规格书 Datasheet 佰祥电子
- 989.14 KB | 次下载 | 免费
- 7WD6208A产品规格书
- 631.24 KB | 次下载 | 免费
- 8NB685 26 V,12 A,低静态电流,大电流 同步降压变换器数据手册
- 1.64 MB | 次下载 | 2 积分
本月
- 1EMC PCB设计总结
- 0.33 MB | 12次下载 | 免费
- 2PD取电芯片 ECP5702规格书
- 0.88 MB | 5次下载 | 免费
- 3矽力杰 Silergy SY7215A 同步升压调节器 规格书 Datasheet 佰祥电子
- 1.12 MB | 5次下载 | 免费
- 4氮化镓GaN FET/GaN HEMT 功率驱动电路选型表
- 0.10 MB | 3次下载 | 免费
- 5PD取电芯片,可取5/9/12/15/20V电压ECP5702数据手册
- 0.88 MB | 3次下载 | 免费
- 6SY50655 用于高输入电压应用的伪固定频率SSR反激式稳压器英文资料
- 1.01 MB | 3次下载 | 免费
- 7怎么为半导体测试仪选择精密放大器
- 0.65 MB | 2次下载 | 免费
- 8SY52341 次级侧同步整流英文手册
- 0.94 MB | 2次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935137次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420064次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233095次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191469次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183360次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81606次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73832次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65991次下载 | 10 积分
电子发烧友App





创作
发文章
发帖
提问
发资料
发视频
上传资料赚积分
评论