ABAP Netweaver里的事务码SICF是Jerry做原型开发时非常喜欢使用的一个工具:但凡遇到需要把ABAP系统里的资源以服务的方式暴露出来的场景,Jerry都喜欢在SICF里创建一个服务节点然后把业务逻辑写进去。

采用SICF服务的方式暴露ABAP Netweaver上的资源,比选择OData或者Web Service的工作量要小很多,比较适合Jerry负责的一些开发周期短,需要迅速出成果的原型开发,比如Jerry之前做的 打通C/4HANA和S/4HANA的一个原型开发:智能服务创新案例,S/4HANA里的资源暴露就采取的SICF来实现的。

Netweaver作为一个Web服务器,SAP把在SICF里实现的这些服务类定位成Web服务器的扩展,地位如同Java Web服务器里的Servlet,Jerry之前也写过一篇博客对二者进行了比较:

ABAP ICF handler and Java Servlet

Jerry觉得用SICF/Java Servlet进行开发,一个比较舒服的地方在于,应用开发人员不需要操心这些服务类实例何时创建和销毁等生命周期管理的问题,从而能专注于在预定义好的接口里编写业务逻辑代码,省心。

在企业级开发应用进入云原生开发时代之后,Serverless架构这个词也频繁出没于各大技术媒体里。

Serverless的字面意思容易给人以“不再需要服务器了”的误解,关于其准确定义,建议大家阅读Jerry非常尊敬的一位前辈,公众号“码农翻身”的一篇文章:我建议你了解一点儿Serverless,该文用非常浅显易懂的语言阐述了Serverless的含义以及从最早的局域网时代演进到Serverless架构的发展过程。

站在整个企业的角度上讲,ABAP Netweaver的SICF开发模式,和Serverless架构几乎没有任何联系,两者区别很大:一个是需要在部署于企业本地的服务器上编写函数代码,另一个则是直接在云服务提供商提供的平台上编写代码。然而,从只需要专心搬砖的程序员个体视角出发,两者也有一些相似之处:程序员都不需要关注自己编写的代码在服务器端如何存储, 也不用操心这些函数在何时被调用。

当然,技术总是在向前发展的,运行在现代云服务提供商基于Serverless架构平台之上的函数,和运行在ABAP Netweaver服务器上的SICF服务相比,就像一个含着金钥匙出生的富二代,天生就具备云原生应用的一些基本特质,比如高可用性,弹性伸缩,按需装载,动态计费等等。

SAP近些年来在云原生开发领域进行了巨大的持续投入,自然少不了基于Serverless架构的解决方案,比如本文标题提到的SAP Kyma上的Lambda Function.

在Jerry之前的文章WordPress,SAP Kyma和微信三者的集成 里,曾经介绍了如何在SAP Kyma上编写Lambda Function,用于响应WordPress投递给Kyma的事件,并且在Lambda Function里调用微信API,向指定的微信用户推送消息。在前一篇文章里,如那篇文章标题所示,Jerry聚焦的是WordPress,SAP Kyma和微信三者的互动,而本文咱们来专门聊聊SAP Kyma里的Lambda Function.

SAP Kyma Serverless的实现基于Kubeless,一个Kubernetes原生支持的Serverless框架,实现了运行于Kubernetes之上资源的自动伸缩,API路由,监控和排错等功能。

借助Kubeless提供的命令行接口,我们可以在Kyma上创建和部署具备Serverless特性的Lambda Function.

kubeless命令行接口提供的CRUD操作:

当然也可以在Kyma提供的浏览器控制台里进行创建工作。

如下图所示,我创建了一个Hello World级别的Lambda Function,执行的逻辑是简单的把传入的字符串尾部加上一个后缀,函数基于nodejs8实现。

在Jerry之前的文章WordPress,SAP Kyma和微信三者的集成里创建的Lambda Function选择的触发方式是基于事件触发,这里我们试试HTTPS触发。

这个HTTPS-endpoint就是将来我们调用这个Lambda Function的url.

这个Lambda Function的认证由dex完成,一个基于openID的开源认证框架。

在Kyma提供的函数测试控制台里,发送一个请求,得到添加了后缀的字符串,简单易懂。

当我们创建了一个Lambda Function,背后发生了什么?虽然名称为Serverless,但是这些函数物理上总得运行于服务器上某种容器内,这种容器就是Kubernetes的pod,Jerry之前强调过,SAP Kubernetes基于Kubernetes,因此Kubernetes支持的命令,SAP Kyma也完全支持。

命令行查看刚刚创建的函数:

kubeless function list -n ctu-demo

使用命令行查看这个函数的明细:

kubectl describe function zjerry-lambda -n ctu-demo

Deployment和ReplicationSet:

水平自动伸缩的实现:

Lambda Function这个概念是SAP Kyma基于Kubernetes的Custom Resource Definitions(CRD)机制创建的一种自定义资源,而上图显示的这些函数属性都是Kubernetes里资源支持的原生属性。

在Kyma的控制台里能找到Lambda Function创建后,Kyma后台自动生成的对应资源:

Pod,即Lambda Function代码的运行环境:

同样的,使用kubectl describe pod命令可以查看这个pod的明细,找到里面包含的docker ID和docker镜像ID.

前面提到SAP Kyma的Lambda Function采取dex进行认证,如果想在编程语言里显式调用,需要提供相应的token.

在Kyma的控制台里拿到token,

传到Postman的Authorization头部字段里,得到期望的响应。

希望本文能让之前不了解Serverless的朋友们对SAP Kyma里基于Serverless架构的Lambda Function有一个基本的感性认识,感谢阅读。

更多阅读

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

从ABAP Netweaver的SICF到SAP Kyma的Lambda Function的更多相关文章

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

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

  2. 周伯通的空明拳,米诺斯的星尘傀儡线,SAP Kyma的Serverless

    Jerry一直认为,金庸的<天龙八部>里的武学建模已经有点脱离传统武侠小说的范畴了,像已经走上玄幻道路的灵鹫宫"八荒六合唯我独尊功",以及杀伤力足够能被视为现代激光武器 ...

  3. 如何使用Prometheus采集SAP ABAP Netweaver的应用日志数据

    Prometheus是一套开源的系统监控报警框架.它启发于Google的borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发 ...

  4. 站在巨人肩膀上的牛顿:Kubernetes和SAP Kyma

    这周Jerry在SAP上海研究院参加了一个为期4天的Kubernetes培训,度过了忙碌而又充实的4天.Jason,Benny和Peng三位大神的培训干货满满,借此机会,Jerry和过去的两位老领导P ...

  5. 基于SAP Kyma的订单编排增强介绍

    尽管有一万个舍不得,2018年还是无可挽回地离我们远去了. 唯有SAP成都研究院的同事和我去年在网络上留下的这些痕迹,能证明2018年我们曾经很认真地去度过每一天: SAP成都研究院2018年总共87 ...

  6. ABAP Netweaver体内的那些寄生式编程语言

    今天这篇文章的主题是:寄生. Jerry最近看到朋友圈里一位朋友分享的一张寄居蟹的照片,对于Jerry这种在内地长大的又很宅的人来说,没有机会看到寄居蟹,所以觉得很新鲜: 寄居蟹主要以螺壳为寄体,寄居 ...

  7. ABAP Netweaver和Hybris里获得内存使用统计数据

    ABAP Netweaver 事物码ST06 Hybris 每隔5秒钟,Hybris Administration console会发起一个到Java后台的AJAX查询请求: 这个5秒的时间间隔定义在 ...

  8. ABAP Netweaver和Hybris Enterprise Commerce Platform的登录认证

    ABAP Netweaver 在我的博客Learn more detail about Standard logon procedure里有详细介绍. Hybris ECP Hybris Admini ...

  9. 如何把SAP Kyma和SAP Cloud for Customer连接起来

    首先进入SAP Cloud for Customer的Administration的工作中心,打开General Settings视图,进入Event Notification配置UI: 新建一个C4 ...

随机推荐

  1. 24Flutter中常见的表单有TextField单行文本框,TextField多行文本框、CheckBox、Radio、Switch

    一.Flutter常用表单介绍: CheckboxListTile.RadioListTile.SwitchListTile.Slide. 二.TextField:表单常见属性: maxLines:设 ...

  2. mysql stream read.

    Statement stmt = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY) ...

  3. python基础之知识补充-作用域、特殊语法

    python作用域 无函数的作用域 在python中没有块级作用域 什么叫块级作用域呢?先来看个例子: if 1 == 1: name= 'alex' print(name) 运行结果为alex 在j ...

  4. asp.net下Response.ContentType类型汇总

    在ASP.NET中使用Response.ContentType="类型名";来确定输出格式 'ez' => 'application/andrew-inset', 'hqx' ...

  5. Docker 跨主机网络 overlay(十六)

    目录 一.跨主机网络概述 二.准备 overlay 环境 1.环境描述 2.创建 consul 3.修改 docker 配置文件 4.准备就绪 三.创建 overlay 网络 1.在 host1 中创 ...

  6. 码云clone提示“you do not have permission to pull from the repository”

    使用git进行项目下载,换了电脑,配置了账号和邮箱后,pull一个私有项目的时候,出现如下问题: 原因分析: 由于没有设置Gitee的SSH公钥.生成公钥和配置公钥的办法,可以参考Gitee帮助里面的 ...

  7. 使用GDAL进行波段分离

    波段分离一般最常用的还是OpenCV,使用OpenCV的split方法可以直接对波段分离,并且效果不错,但是有一个问题是只能处理有限波段的数据,比如波段超过一定的数目就无法完成波段分离工作,或者数据有 ...

  8. async/await小知识点

    一.使用async修饰的函数,返回的内容就是一个Promise,因此可以使用Promise对象所有的方法,如then等 二.在async函数中使用await是否会影响其他代码的执行,答案是:不会.

  9. Redis学习笔记(一):Redis的数据类型

    之前笔者常常接触的数据库是关系型数据库,其中MySQL接触居多.近年来NoSQL兴起,各种新型数据库不断诞生,redis就是NoSQL中的一种热门数据库. 注:此类文章仅仅作为笔者的学习和阅读积累,若 ...

  10. Spring AOP 简介(三)

    Spring AOP 简介 如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用. AOP 即 Aspect Orien ...