ABAP Netweaver裏的事務碼SICF是Jerry作原型開發時很是喜歡使用的一個工具:但凡遇到須要把ABAP系統裏的資源以服務的方式暴露出來的場景,Jerry都喜歡在SICF裏建立一個服務節點而後把業務邏輯寫進去。java
採用SICF服務的方式暴露ABAP Netweaver上的資源,比選擇OData或者Web Service的工做量要小不少,比較適合Jerry負責的一些開發週期短,須要迅速出成果的原型開發,好比Jerry以前作的 打通C/4HANA和S/4HANA的一個原型開發:智能服務創新案例,S/4HANA裏的資源暴露就採起的SICF來實現的。node
Netweaver做爲一個Web服務器,SAP把在SICF裏實現的這些服務類定位成Web服務器的擴展,地位如同Java Web服務器裏的Servlet,Jerry以前也寫過一篇博客對兩者進行了比較:程序員
ABAP ICF handler and Java Servletdocker
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也徹底支持。
命令行查看剛剛建立的函數:
使用命令行查看這個函數的明細:
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的原創文章,請關注公衆號"汪子熙":