从ABAP Netweaver的SICF到SAP Kyma的Lambda Function
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有一个基本的感性认识,感谢阅读。
更多阅读
- 站在巨人肩膀上的牛顿:Kubernetes和SAP Kyma
- 高射炮打蚊子,杀鸡用绝世好剑:在SAP Kyma上运行UI5应用
- 什么?在SAP中国研究院里还需要会PHP开发?
- 第三方应用如何在SAP Kyma上进行服务注册
- 基于SAP Kyma的订单编排增强介绍
- WordPress,SAP Kyma和微信三者的集成
要获取更多Jerry的原创文章,请关注公众号"汪子熙":

从ABAP Netweaver的SICF到SAP Kyma的Lambda Function的更多相关文章
- ABAP Netweaver, Hybris Commerce和SAP 云平台的登录认证
ABAP Netweaver 在事务码SICF里选择一个服务,在明细页面对Procedure字段点击F1,查看Logon Procedure的帮助文档. 通过这个链接打开对应的帮助文档,可以看到下列七 ...
- 周伯通的空明拳,米诺斯的星尘傀儡线,SAP Kyma的Serverless
Jerry一直认为,金庸的<天龙八部>里的武学建模已经有点脱离传统武侠小说的范畴了,像已经走上玄幻道路的灵鹫宫"八荒六合唯我独尊功",以及杀伤力足够能被视为现代激光武器 ...
- 如何使用Prometheus采集SAP ABAP Netweaver的应用日志数据
Prometheus是一套开源的系统监控报警框架.它启发于Google的borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发 ...
- 站在巨人肩膀上的牛顿:Kubernetes和SAP Kyma
这周Jerry在SAP上海研究院参加了一个为期4天的Kubernetes培训,度过了忙碌而又充实的4天.Jason,Benny和Peng三位大神的培训干货满满,借此机会,Jerry和过去的两位老领导P ...
- 基于SAP Kyma的订单编排增强介绍
尽管有一万个舍不得,2018年还是无可挽回地离我们远去了. 唯有SAP成都研究院的同事和我去年在网络上留下的这些痕迹,能证明2018年我们曾经很认真地去度过每一天: SAP成都研究院2018年总共87 ...
- ABAP Netweaver体内的那些寄生式编程语言
今天这篇文章的主题是:寄生. Jerry最近看到朋友圈里一位朋友分享的一张寄居蟹的照片,对于Jerry这种在内地长大的又很宅的人来说,没有机会看到寄居蟹,所以觉得很新鲜: 寄居蟹主要以螺壳为寄体,寄居 ...
- ABAP Netweaver和Hybris里获得内存使用统计数据
ABAP Netweaver 事物码ST06 Hybris 每隔5秒钟,Hybris Administration console会发起一个到Java后台的AJAX查询请求: 这个5秒的时间间隔定义在 ...
- ABAP Netweaver和Hybris Enterprise Commerce Platform的登录认证
ABAP Netweaver 在我的博客Learn more detail about Standard logon procedure里有详细介绍. Hybris ECP Hybris Admini ...
- 如何把SAP Kyma和SAP Cloud for Customer连接起来
首先进入SAP Cloud for Customer的Administration的工作中心,打开General Settings视图,进入Event Notification配置UI: 新建一个C4 ...
随机推荐
- java获取properties配置文件中某个属性最简单方法
假如我想获取src目录下sysConfig.properties中的uploadpath属性的值 方法如下所示: private static final ResourceBundle bundle ...
- Django之model补充:一对多、跨表操作
表结构概述 model.py : class Something(models.Model): name = models.CharField(max_length=32) class UserTyp ...
- PAT 甲级 1033 To Fill or Not to Fill (25 分)(贪心,误以为动态规划,忽视了油量问题)*
1033 To Fill or Not to Fill (25 分) With highways available, driving a car from Hangzhou to any oth ...
- SpringMvc+ajax跨域请求时,出现options类型的请求并返回403的解决方案
在使用 $.ajax({ url:'http://127.0.0.1:8081/rest/ccxxx/xxxx', type:'POST', dataType:"json", co ...
- 【嵌入式硬件Esp32】ESP32学习之在windows下搭建eclipse开发环境
一.所需工具 由于项目要用ESP32模块进行开发,折腾了下集成开发环境,现将过程记录下来,以便需要的人使用.其中需要的有交叉编译工具,esp-idf示例代码以及C/C++版的eclipse. 交叉编译 ...
- 【C#设计模式3】工厂方法模式
一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是——简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以 ...
- nginx限流方案的实现(三种方式)
通过查看nginx官方文档,小弟查看到了三种nginx限流方式. 1.limit_conn_zone 2.limit_req_zone 3.ngx_http_upstream_module 前两种只能 ...
- 最新 中手游java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.中手游等10家互联网公司的校招Offer,因为某些自身原因最终选择了中手游.6.7月主要是做系统复习.项目复盘.LeetCo ...
- vue中使用axios下载文件,兼容IE11
一.设置axios返回值为blob 二.使用a标签的down属性下载,如果是IE浏览器,可以使用navigator.msSaveBlob进行下载 // data的数据类型是blob downloadF ...
- jqGrid刷新不取消选中
也就是说,刷新前选中的行,刷新后还是选中 var jqGrid = $("#jqGrid"); // 获取刷新前选中的行id var jqGridRowid=jqGrid.jqGr ...