SAP 云平台多目标应用 Multi-Target Application 的开发技术介绍

随着SAP云平台的出现,SAP云平台开发生态圈告别了过去单凭ABAP打天下的局面。

伴随着SAP云转型的步伐,越来越多的编程语言,技术栈,工具纷纷加入SAP开发生态圈。现代企业级应用,越来越不青睐过去传统的单体式架构,取而代之的是采用微服务的思想,将复杂的单体应用根据业务拆分成一个个细粒度的分散的松耦合模块,这些模块可以由不同的编程语言和技术栈实现。

凡事有利就有弊,这种拆分除了让我们享受微服务架构带来的收益外,也引入了新的挑战,比如这些模块群的生命周期管理,统一部署和配置等等。SAP MTA的引入就是为了解决这些挑战,Multi Target Application里包裹的所有模块,不管它们采用何种异构的技术栈实现,都共享同一套生命周期管理。通过MTA管理的应用模块,所有运行时的依赖问题都能得到妥善处理。

MTA 应用由表示数据、业务逻辑和 UI 层的多个软件模块组成。 这些模块使用不同的技术创建并部署到不同的目标平台,但共享相同的开发生命周期。MTA 应用程序概念旨在协调所有这些模块的部署,以便正确解决所有运行时依赖项,并按预期运行应用程序。 所有这一切是通过向部署工具提供一组描述符(descriptor)来实现的,这些描述符定义了应用程序中所有模块的相互依赖关系和部署场景。

MTA 描述符(位于项目根文件夹中的 mta.yaml 文件)在使用 SAP Web IDE 或者 SAP Business Application Studio 创建 MTA 应用程序项目时自动生成,并在项目属性更改或添加或删除模块时动态更新。 目前并非所有必要的信息都能够自动生成,在某些情况下,开发人员仍然需要手动维护描述符以完善资源、属性和依赖项的声明和定义。

MTA 描述符以 YAML 格式编写,具有严格的语法要求。 开发人员可以在基于文本的代码编辑器中编辑描述符,但更佳的选择是使用可视 MTA 编辑器,因为它提供输入验证。

要将 MTA 编辑器设置为 MTA 描述符的默认值,请转到 Preferences Default Editors 并设置 MTA 应用程序描述符的编辑器。

注意,MTA 可视化编辑器删除注释并格式化文件。 如果要添加注释,请使用代码编辑器。 要打开代码编辑器,请将代码编辑器设置为默认编辑器,或者右键单击文件并选择使用代码编辑器打开。

如果使用代码编辑器编辑文件,使用空格而不是制表符进行缩进很重要。

本文只是对SAP云平台上的MTA模型进行Hello world级别的介绍,更多SAP MTA高级用法,请参考 SAP官方文档。

在SAP WebIDE里根据向导可以很容易地创建一个MTA项目:

创建模板选择Multi Target Application:

随便命个名:

从MTA右键菜单里,我们能看到支持许多不同类型的模块创建,大家体会到了Multi的含义了吗?这里简单起见,我先创建一个nodejs模块:

nodejs模块取名为hello:

这里维护的信息会写入最后生成nodejs模块的package.json文件里:

生成的package.json如下,做过nodejs开发的朋友都很熟悉了:

通过命令行cf login和cf buildpacks能看到当前登录的SAP Cloud Platform CloudFoundry环境里支持的buildpack列表,我们创建的nodejs模块需要的buildpack也在里面。这些buildpack可以用于对相应的模块进行编译,处理依赖,打包,确保它们能够顺利运行在CloudFoundry上。

我在这个hello world级别的nodejs模块里,实现了一个简单的打印当前运行环境所有的环境变量的功能。代码编辑完后,点击Run菜单运行,会自动触发依赖分析,打包和部署的动作:

部署完毕后,会生成一个应用的url,点击:

成功打印出了当前CloudFoundry运行实例上的环境变量:

依法炮制,创建一个类型为Java的模块:

Java 模块是相关 Java 文件和服务定义的集合。Java 模块实现了应用程序的业务逻辑,可以代替 Node.js 模块,也可以作为 Node.js 模块的补充。Java 模块可以是使用 Apache Maven 构建的 Java Web Archive (WAR) 或 Java Archive (JAR)。

如果开发人员决定使用 settings.xml 文件来提供特定于项目的 Apache Maven 设置,请注意此文件会覆盖默认设置。

如果需要,在与 pom.xml 同样的文件夹层级结构下 创建 settings.xml.

模板选择Spring Boot Application:

换个名字:hellojava

这次就打印一个Hello World就完了:

同样点击Run菜单,触发build和部署,最后自动启动模块:

每个MTA项目都有一个描述文件,格式为yaml,里面记录了MTA包含的每个模块的技术明细。SAP官方文档里定义的很多高级用法,都在这个yaml文件里做文章。

在真实场景中,开发人员完成MTA的开发后,需要对MTA项目进行build,生成一个Archive文件,交给管理员由后者进行部署:

在MTA项目右键菜单里选择Build,生成这个Archive文件:

管理员可以用命令行或者SAP WebIDE里的菜单进行部署:

一旦管理员触发部署动作后,MTA项目里包含的所有模块都会被部署到SAP Cloud Platform上并处于运行状态。

总结

本文首先对 SAP 云平台上的多目标应用(MTA 项目)做了概要的介绍,包含 MTA 应用的基本概念和解决的业务痛点,然后从一个实例的例子出发,创建了一个包含 Node.js 和 Java 模块的 MTA 应用,并展示了该应用部署的详细步骤。希望这篇文章能让大家对 SAP 云平台提供的 MTA 模型有一个最基本的认识,感谢阅读。

推荐阅读更多精彩内容