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 的原创文章,请关注公众号 ” 汪子熙 ”: