SOFAArk 升级 2.0

本文介绍 SOFAArk 2.0 版本,以及如何升级 SOFAArk 2.0 版本。

背景信息

SOFAArk 框架包含 Ark Container、Ark Plugin 和 Ark Biz 三个概念,并在三层概念的基础上,衍生出复杂的类加载机制,如下图所示:image

说明

更多信息,请参见 Ark 容器类加载机制

以上机制引发如下问题:

  • 由于 Ark Plugin 的存在,插件在依赖层面的强管控,造成如下问题:

    • 业务使用的依赖是被插件管控导出的,但是插件管控导出的版本与业务实际期望的版本不符(比如插件管控的版本是 1.0,而业务需要的是 2.0)。

    • 插件对于依赖的强管控,直接堵住了业务扩展插件能力的路;也存在部分依赖,当业务引入时会直接报错(其package 被导出了,但是依赖不在插件中),那么对于业务来说就只能等框架发版解决。

    • 业务接入成本、学习成本较高,问题排查困难,需要非常熟悉 Ark 类加载机制。

    • 由于管控依赖的增长,Ark Plugin 难以持续维护。

  • 研发运维困难

    由于 Ark Container 先于 Master Biz 启动,Master Biz 的启动入口和 Spring Boot、SOFABoot 不一致,导致 Ark Master Biz 的启动在研发运维中需要定制镜像和启动入口,造成研发运维困难。

针对以上问题,蚂蚁集团尝试从框架层面去优化三层结构,沉淀出了 SOFAArk 2.0 方案。方案的整体优化思路和原则是 Ark Master Biz 和原生 Spring Boot、SOFABoot 保持一致,弱化复杂的 Ark Plugin 类管控机制,将 Ark Plugin 与 Master Biz 合并。SOFAArk 2.0 方案整体优化点如下:

  • 弱化 Ark Plugin 层,改为普通 pom 依赖。

  • Ark Master Biz 和原生的 Spring Boot、SOFABoot 应用启动方式和类加载方式保持一致。

  • 优化 Ark Biz 启动速度。

升级方式

版本升级

SOFAArk 版本号第一位为大版本号,当为 1.x.x 时为 SOFAArk 1.0 版;当为 2.x.x 时是 SOFAArk 2.0 版,当前 2.0 版本已正式发布,发布说明请参见 Release-Notes

升级版本时,您只需要将如下配置:

<properties>
    <sofa.ark.version>1.1.6</sofa.ark.version>
</properties>

改为:

<properties>
    <sofa.ark.version>2.0.0</sofa.ark.version>
</properties>

打包插件

在 SOFAArk 1.0 中使用 sofa-ark-maven-plugin 打包,在 SOFAArk 2.0 中采用 Spring Boot 原生打包插件 spring-boot-maven-plugin 打包。

<build>
    <plugins>
        <plugin>
            <groupId>com.alipay.sofa</groupId>
            <artifactId>sofa-ark-maven-plugin</artifactId>
            <version>${sofa.ark.version}</version>
            <executions>
                <execution>
                    <id>default-cli</id>

                    <!--goal executed to generate executable-ark-jar -->
                    <goals>
                        <goal>repackage</goal>
                    </goals>

                    <configuration>
                        <!--specify destination where executable-ark-jar will be saved, default saved to ${project.build.directory}-->
                        <outputDirectory>./target</outputDirectory>

                        <!--default none-->
                        <arkClassifier>executable-ark</arkClassifier>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

替换为:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.6.6</version>

            <configuration>
                <outputDirectory>target</outputDirectory>
                <classifier>ark-biz</classifier>
            </configuration>
            <executions>
                <execution>
                    <id>package</id>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

运行启动

方式一:IDEA 启动

本地启动需要加上启动参数:

-Dsofa.ark.embed.enable=true -Dcom.alipay.sofa.ark.master.biz=${bizName}

方式二:命令行启动

Ark 包是可执行 JAR,可直接使用Java -jar的方式启动:

  1. 先使用mvn clean package进行打包,打包得到${bizName}-${bizVersion}-ark-biz.jar

  2. 命令行启动。

    java -jar -Dsofa.ark.embed.enable=true -Dcom.alipay.sofa.ark.master.biz=${bizName} ${bizName}-${bizVersion}-ark-biz.jar

示例工程

SOFAArk 1.0 接入方式请参见 SOFAArk 1.0 示例工程

SOFAArk 2.0 接入方式请参见 SOFAArk 2.0 示例工程