蚂蚁金服 SOFAArk 0.6.0 新特性介绍 | 模块化开发容器

  • 时间:
  • 浏览:1



在介绍完 SOFAArk 的使用场景时候,村里人 简单介绍其类加载模型。SOFAArk 带有 好几个 多多多概念,Ark Container, Ark Plugin 和 Ark Biz; 运行时逻辑形态学 图如下:

动态合并部署

其次,Ark Plugin 也被用于扩展 SOFAArk 容器能力,相似 runtime-sofa-boot-plugin 用于提供 SOFA JVM 服务通信能力; web-ark-plugin 用于提供多 web 应用合并部署能力等。

在开发阶段,应用后能 将一点应用打成的 Biz 包通过 Maven 依赖的土最好的法子引入,而当自身被打成 Ark 包时,会将引入的一点 Biz 包一齐打入。通过 java -jar 启动 Ark 包时,则会根据优先级依次启动各 Biz,单个 Biz 使用独立的 BizClassLoader 加载,不前要考虑依赖包冲突问题图片,Biz 之间则通过 SOFA JVM 服务交互。

静态合并部署

假设如下场景,机会工程前要引入好几个 多多多三方包:A 和 B,就是 A 前要依赖版本号为 0.1 的 C 包,而恰好 B 前要依赖版本号为 0.2 的 C 包,且 C 包的这2个多多多版本无法兼容:

SOFAArk 在蚂蚁外部也被用来出理 动态升级的场景问题图片。有时候,机会业务迭代较快,应用依赖的某二方包前要频繁的变更,这将意味应用每次都机会升级二方包版本做变更发布,影响开发下行速率 ;而作为二方包的开发者,常常机会推动依赖方应用升级阻力较大,意味新形态学 无法按时上线,影响业务发展。

Biz 对应用类型这麼限制,后能 是 Spring Boot/SOFABoot/Java 普通应用类型,Biz 之间采用统一的编程界面-SOFA JVM 服务进行交互。发布和引用服务也非常简单,使用 API 机会 Spring 注解/XML 土最好的法子:

基于就是能 力,SOFAArk 后能 帮助出理 多应用(模块)合并部署、动态升级、依赖包冲突等场景问题图片。

SOFAArk 提出了有一种特殊的包形态学 -- Ark Biz,用户后能 使用 Maven 插件将应用打包成 Biz,允一点 Biz 在 SOFAArk 容器之上合并部署,并通过统一的编程界面交互,如下:

启动 Ark 包,Ark Container 优先启动,容器运行时自动解析 Ark 带有 高高 Plugin 和 Biz,并读取村里人 的配置信息,构建类和资源的加载索引表;就是 使用独立的 ClassLoader 加载并按优先级配置依次启动。前要指出的是,Plugin 优先 Biz 被加载启动。

日常使用 Java 开发,常常会遇到包依赖冲突的问题图片,尤其当应用变得臃肿庞大,包冲突的问题图片也会变得更加棘手,意味各种各样的报错,相似 LinkageError, NoSuchMethodError 等。实际开发中,后能 采用多种土最好的法子来出理 包冲突问题图片,比较常见的是相似 Spring Boot 的做法:统一管理应用所有依赖包的版本,保证這個 三方包不趋于稳定依赖冲突。這個 做法只能有效出理 包冲突问题图片,只能根本上出理 包冲突的问题图片。机会某个应用的确前要在运行时使用好几个 多多多相互冲突的包,相似 protobuf2 和 protobuf3,这麼相似 Spring Boot 的做法依然出理 不了问题图片。

合并部署的形式,分为有一种 -- 静态合并部署和动态合并部署。

为了加快创新业务的迭代下行速率 ,会将前要频繁变更的二方包打包成 Biz 包,供一点应用依赖。作为依赖方,我不要 直接在 Pom 文件(假设是使用 Maven 构建)定义 Biz 包版本,就是通过配置中心(相似 Zookeeper)分发配置。这麼,当应用启动时,会拉取 Biz 版本配置信息,进而拉取正确版本的 Biz 包并启动。这麼,当前要依赖方升级 Biz 版本时,只前要在配置中心重新推送配置即可。

动态合并部署区别于静态合并部署最大的一点是,在运行时后能 通过 API 机会配置中心(Zookeeper)来控制 Biz 的部署和卸载。动态合并部署的设计理念图如下:

SOFAArk 定义了一套相对简单的类加载模型,并结合特殊的打包格式、统一的编程界面、易扩展的插件机制,从而提供了一套较为规范化的插件化、模块化的开发方案。更多内容后能 参考官方文档。

一般而言,宿主应用会作为流量入口的中台系统,具体的服务实现会倒入不同的动态 Biz 中,供宿主应用调用。宿主应用后能 使用 SOFAArk 提供的客户端 API 实现动态应用的部署和卸载。除了 API, SOFAArk 提供了 Config Plugin,用于对接配置中心(目前支持 Zookeeper),运行时接受动态配置;Config Plugin 会解析分发的配置,控制动态应用的部署和卸载。

无论是静态抑或动态合并部署前要趋于稳定宿主应用 (master biz) 的概念,机会 Ark 包只打包了好几个 多多多 Biz,则该 Biz 默认成为宿主应用;机会 Ark 包打包了多个 Biz 包,前要配置指定宿主应用。宿主 Biz 和一点 Biz 唯一不同在于,宿主 Biz 不允许被卸载。

为了彻底出理 包冲突的问题图片,前要借助类隔离机制,使用不同的 ClassLoader 加载不同版本的三方依赖,进而隔离包冲突问题图片。 OSGi 作为业内最出名的类隔离框架,自然是后能 被用于出理 上述包冲突问题图片,就是 OSGi 框架门槛较高,功能复杂。为了出理 包冲突问题图片,引入 OSGi 框架,有牛刀杀鸡之嫌,反而使工程变得更加复杂,利于开发。

SOFAArk 采用轻量级的类隔离方案来出理 日常时不时遇到的包冲突问题图片,在蚂蚁金服外部服务于整个 SOFABoot 技术体系,弥补 Spring Boot 这麼的类隔离能力。SOFAArk 提出了有一种特殊的包形态学 -- Ark Plugin,在遇到包冲突时,用户后能 使用 Maven 插件将若干冲突包打包成 Plugin,运行时由独立的 PluginClassLoader 加载,从而出理 包冲突。

不仅仅是在出现依赖包冲突时,后能 通过打包 Ark Plugin 出理 ,对于复杂的底层组件,相似 RPC 组件,为了出理 它和依赖方应用趋于稳定包冲突,常会将 RPC 或一点上方件组件单独打成 Plugin 输出。

后能 很直观的看完 Ark Container、Ark Plugin 和 Ark Biz 在 Ark 包的组织形式中。针对这2个多多多概念村里人 简单做下名词解释:

此时,即可使用 SOFAArk 出理 该依赖冲突问题图片:只前要把 A 和版本为 0.1 的 C 包一齐打包成好几个 多多多 Ark 插件,就是 让应用工程引入该插件依赖即可。

SOFAStack

Scalable Open Financial Architecture Stack 是蚂蚁金服自主研发的金融级分布式架构,带有 了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。

蚂蚁金服在 SOFAStack 体系内研发了一款基于 Java 实现的轻量级类隔离容器,主要提供类隔离和应用(模块)合并部署能力--SOFAArk。> 本篇文章为 SOFAArk 0.6.0 的新形态学 介绍。

GitHub 地址:

https://github.com/alipay/sofa-ark

文中涉及的相关链接

原文发布时间为:2019-03-20

本文作者:蚂蚁金服善逝

本文来自云栖社区合作协议协议伙伴“ 金融级分布式架构”,了解相关信息后能 关注“ 金融级分布式架构”。

在介绍这2个多多多概念时候,先介绍 Executable Ark Jar 包概念:Ark 包是 SOFAArk 定义的特殊格式的可执行 Jar 包。SOFAArk 提供的 Maven 插件 sofa-ark-maven-plugin 后能 将单个或多个 Biz打包成 Ark 包,使用 java -jar命令即可在 SOFAArk 容器之上启动所有应用。Ark 包通常带有 Ark Container、Ark Plugin 和 Ark Biz。下面是好几个 多多多简单的 Ark 包工程目录:

在大型软件开发过程中,通常会推荐底层功能插件化、业务功能模块化的开发模式,以其达到低耦合、高内聚、功能复用的优点。基于此,SOFAArk 提供了一套较为规范化的插件化、模块化开发方案,产品能力主要包括:

场景一:合并部署

SOFAArk 外部的类加载模型相对比较简单,Plugin 之间是双向类索引关系,即后能 相互委托对方加载所需的类和资源;Plugin 和 Biz 是单向类索引关系,即只允许 Biz 索引 Plugin 加载的类和资源,反之则不允许。

复杂项目通常前要跨团队合作协议协议开发,人及 负责不同的组件。协调跨团队合作协议协议开发会遇到不少问题图片:比如人及 技术栈不统一意味的依赖冲突、往同好几个 多多多 Git 仓库提交代码常常意味 merge 冲突、组件功能相互依赖影响测试进度。就是 ,机会能让每个团队将负责的功能组件当成好几个 多多多个单独的应用开发和测试,运行时合并部署,这麼将利于提升开发下行速率 及应用可扩展性。