大家第一次看到SAP MTA这个词组,会联想到什么?
Jerry第一次看到的时候,联想到的是那一个个足坛著名的三叉戟攻击组合。
海皇波塞冬(Poseidon),奥林匹斯十二神中地位仅次于宙斯的大神,海界的统治者,他的威严与大地无穷无尽的生命力及洪水相匹敌。三叉戟是海皇波塞冬的武器,外型似鱼叉,中间刺较长而边缘两根刺较短。这把武器因《圣斗士星矢》在国内的热播而被广大八零后九零后熟知。
由于三叉戟极富攻击力的视觉外观,国内外很多球迷喜欢将很多成为无数后卫噩梦的足坛攻击性组合称为“三叉戟”组合,并使用构成这些组合的球星名字首字母的组合命名,比如巴塞罗那队曾经的南美三叉戟MSN,以及死敌皇家马德里的欧洲三叉戟BBC.
当然,咱国内足坛也有自己的三叉戟,比如令无数老球迷津津乐道的“金玉圣”三叉戟:李金羽,张玉宁,曲圣卿。
刮起青春风暴的辽小虎们凭借无坚不摧的金玉圣三叉戟,在1999年甲A联赛里差点创造了德甲凯泽斯劳滕般的奇迹,最后仅以1分之差,位于山东鲁能泰山队之后,屈居亚军。
(Jerry:我大四川全兴队这一年高开低走,不过还是创造了四川队的历史最佳名次)
所以Jerry第一次看到SAP MTA这个组合时,虽然视觉上看到的是Multi Target Application,然而脑子里却习惯性地把给我留下深刻印象的球星名字和MTA进行匹配:
M:Makélélé
马克莱莱,法国著名球星,司职防守型后腰,在Jerry心中他是最被低估的巨星之一。绿茵场上总有一些默默无闻干着脏活的“蓝领”球员,当球队进球时镁光灯的焦点从来不会落在他们身上,然而一旦缺少他们,所有人才发现整只球队都玩不转了。马克莱莱就是这样的低调实力派球员,实力远大于名气。重心低,下盘稳,一对一缠斗能力极强,防守动作成功率极高,以其惊人的横向覆盖能力,使得他在球队里踢的位置被称为“马克莱莱位置”。
T: Totti
托蒂,意甲罗马队狼王,随着意甲在国内的直播而吸引了无数球迷。2017年8月14日,《天下足球》栏目推出的托蒂退役特别节目《狼图腾》,以天下足球栏目特有的催泪风格,送别了托蒂离开绿茵场。一个人,一座城,一袭红衣,一生传奇, 他早已是红狼之王, 永恒之城的图腾, 纵横28年屹立不倒。他的告别结束了一段童话,带走了一段光阴,也让国内无数八零后九零后球迷,送别了自己的青春。
A:Adriano
阿德里亚诺,巴西历史上继罗纳尔多之后又一位极有希望成为新球王的球星,他拥有成为球王的一切条件,巅峰期的阿德里亚诺无论是在真实的绿茵场上还是各式足球电脑游戏里都是bug一般的存在,有球迷称阿德里亚诺是现役球员莱万多夫斯基和C罗的综合体。
可惜造化弄人,阿德里亚诺像一颗流星一样迅速陨落了,坠入凡间的速度比罗纳尔迪尼奥更快。尽管阿德里亚诺远远没有达到专业人士和球迷期望他达到的高度,但他在国际米兰03到05年的巅峰表现,如今仍然是无数球迷津津乐道的话题。
Jerry排出的这个MTA组合虽然不是一个锋线三叉戟,但应该能算一个攻防俱佳,相当有竞争力的一个中前场铁三角吧?
扯淡完毕,进入正题。
SAP MTA: Multi Target Application
Jerry前一篇文章 学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景 里介绍过,随着SAP云平台的出现,SAP云平台开发生态圈告别了过去单凭ABAP打天下的局面。
伴随着SAP云转型的步伐,越来越多的编程语言,技术栈,工具纷纷加入SAP开发生态圈。现代企业级应用,越来越不青睐过去传统的单体式架构,取而代之的是采用微服务的思想,将复杂的单体应用根据业务拆分成一个个细粒度的分散的松耦合模块,这些模块可以由不同的编程语言和技术栈实现。
凡事有利就有弊,这种拆分除了让我们享受微服务架构带来的收益外,也引入了新的挑战,比如这些模块群的生命周期管理,统一部署和配置等等。SAP MTA的引入就是为了解决这些挑战,Multi Target Application里包裹的所有模块,不管它们采用何种异构的技术栈实现,都共享同一套生命周期管理。通过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运行实例上的环境变量:
依法炮制,创建一个MTA三叉戟的第二根尖刺,类型为Java模块:
模板选择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模型有一个最基本的认识,感谢阅读。国庆黄金周的第二天,祝大家国庆愉快。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":