大家第一次看到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的原创文章,请关注公众号"汪子熙":

SAP云平台里的三叉戟应用的更多相关文章

  1. SAP云平台里Global Account和Sub Account的关系

    在Cloud Foundry环境里,一个Global Account或者Trial Account能够创建多个SubAccount,如图: 创建好的新的subaccount: 一旦subaccount ...

  2. 使用SAP云平台 + JNDI访问Internet Service

    以Internet Service http://maps.googleapis.com/maps/api/distancematrix/xml?origins=Walldorf&destin ...

  3. 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数

    最近Jerry接到一个原型开发的任务,需要在微信里调用ABAP On Premise系统(SAP CRM On-Premise)里的某些函数.具体场景和我之前的公众号文章 Cloud for Cust ...

  4. 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务

    Jerry 2016年在学习SAP CDS view时,曾经写过一个CDS view的自学系列,其中有一篇提到了一个很方便的注解: @OData.publish: true 加上这个注解的CDS vi ...

  5. 使用SAP云平台的destination消费Internet上的OData service

    通过SAP云平台上的destination我们可以消费Internet上的OData service或者其他通过HTTP方式暴露出来的服务. 创建一个新的destination: 维护如下属性: 点击 ...

  6. 如何在SAP云平台上使用MongoDB服务

    首先按照我这篇文章在SAP云平台上给您的账号分配MongboDB服务:如何在SAP云平台的Cloud Foundry环境下添加新的Service 然后从这个链接下载SAP提供的例子程序. 1. 使用命 ...

  7. 在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务

    我的前一篇文章 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数介绍了在SAP云平台的Neo环境下如何通过SAP Cloud Conne ...

  8. 如何在Java代码中使用SAP云平台CloudFoundry环境的环境变量

    本文使用的例子源代码在我的github上. 在我的公众号文章在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务介绍了如何通过Cloud Connector ...

  9. ABAP Netweaver, Hybris Commerce和SAP 云平台的登录认证

    ABAP Netweaver 在事务码SICF里选择一个服务,在明细页面对Procedure字段点击F1,查看Logon Procedure的帮助文档. 通过这个链接打开对应的帮助文档,可以看到下列七 ...

随机推荐

  1. 数据库sql优化总结之5--数据库SQL优化大总结

    数据库SQL优化大总结 小编最近几天一直未出新技术点,是因为小编在忙着总结整理数据库的一些优化方案,特此奉上,优化总结较多,建议分段去消化,一口吃不成pang(胖)纸 一.百万级数据库优化方案 1.对 ...

  2. Red Hat Enterprise Linux ISO 全镜像下载

    1.iso网盘下载地址:https://wanghualang.pipipan.com/dir/13133650-26232498-a8efb3/ 2.中国大陆开源镜像站汇总,企业贡献: 搜狐开源镜像 ...

  3. IDEA 开发javafx: error: java:package javafx.application does not exist

    1)jdk使用1.8, 1.7中未包含javafx相关内容. 2)确保classpath中加入了javafx包路径. 在“file” --> "project structure&qu ...

  4. MD5(3)

    import java.io.UnsupportedEncodingException; import java.security.PrivateKey; import java.security.S ...

  5. BladeX 2.0.7.RELEASE版本git后,在idea中导入项目,结果无法运行FlowApplication等几个服务的错误

    问题:2.0.7.RELEASE版本git后,在Intellij IDEA运行项目,结果无法运行FlowApplication等几个服务的错误 描述:打开IDEA,点击Check out from V ...

  6. linux信号--阻塞与未决

    执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending). 进程可以选择阻塞(Block)某个信号.被阻塞的信号产生时将保持在未决状态,直到进程解 ...

  7. 使用C++调用并部署pytorch模型

    1.背景(Background) 上图显示了目前深度学习模型在生产环境中的方法,本文仅探讨如何部署pytorch模型! 至于为什么要用C++调用pytorch模型,其目的在于:使用C++及多线程可以加 ...

  8. [LeetCode] 324. Wiggle Sort II 摆动排序 II

    Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]... ...

  9. [LeetCode] 499. The Maze III 迷宫 III

    There is a ball in a maze with empty spaces and walls. The ball can go through empty spaces by rolli ...

  10. 【计算机视觉】目标检测中的指标衡量Recall与Precision

    [计算机视觉]目标检测中的指标衡量Recall与Precision 标签(空格分隔): [图像处理] 说明:目标检测性能指标Recall与Precision的理解. Recall与Precision ...