从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的原創文章,請關注公眾號"汪子熙":
[外鏈圖片轉存失敗(img-OKC5OKlG-1565577891650)(https://user-images.githubusercontent.com/5669954/60097669-68224900-9786-11e9-9f1e-e8bee08db4fa.png)]要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
總結
以上是生活随笔為你收集整理的从ABAP Netweaver的SICF到SAP Kyma的Lambda Function的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 房屋继承遗产税怎么算 房子的遗产继承税是
- 下一篇: 通过kubeless命令行部署Kyma