從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

i042416發表於2019-08-18

ABAP Netweaver裡的事務碼SICF是Jerry做原型開發時非常喜歡使用的一個工具:但凡遇到需要把ABAP系統裡的資源以服務的方式暴露出來的場景,Jerry都喜歡在SICF裡建立一個服務節點然後把業務邏輯寫進去。

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

採用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

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

Jerry覺得用SICF/Java Servlet進行開發,一個比較舒服的地方在於,應用開發人員不需要操心這些服務類例項何時建立和銷燬等生命週期管理的問題,從而能專注於在預定義好的介面裡編寫業務邏輯程式碼,省心。

在企業級開發應用進入雲原生開發時代之後,Serverless架構這個詞也頻繁出沒於各大技術媒體裡。

Serverless的字面意思容易給人以“不再需要伺服器了”的誤解,關於其準確定義,建議大家閱讀Jerry非常尊敬的一位前輩,公眾號“碼農翻身”的一篇文章:我建議你瞭解一點兒Serverless,該文用非常淺顯易懂的語言闡述了Serverless的含義以及從最早的區域網時代演進到Serverless架構的發展過程。

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

站在整個企業的角度上講,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路由,監控和排錯等功能。

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

藉助Kubeless提供的命令列介面,我們可以在Kyma上建立和部署具備Serverless特性的Lambda Function.

kubeless命令列介面提供的CRUD操作:

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

當然也可以在Kyma提供的瀏覽器控制檯裡進行建立工作。

如下圖所示,我建立了一個Hello World級別的Lambda Function,執行的邏輯是簡單的把傳入的字串尾部加上一個字尾,函式基於nodejs8實現。

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

在Jerry之前的文章WordPress,SAP Kyma和微信三者的整合裡建立的Lambda Function選擇的觸發方式是基於事件觸發,這裡我們試試HTTPS觸發。

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

這個HTTPS-endpoint就是將來我們呼叫這個Lambda Function的url.

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

這個Lambda Function的認證由dex完成,一個基於openID的開源認證框架。

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

在Kyma提供的函式測試控制檯裡,傳送一個請求,得到新增了字尾的字串,簡單易懂。

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

當我們建立了一個Lambda Function,背後發生了什麼?雖然名稱為Serverless,但是這些函式物理上總得執行於伺服器上某種容器內,這種容器就是Kubernetes的pod,Jerry之前強調過,SAP Kubernetes基於Kubernetes,因此Kubernetes支援的命令,SAP Kyma也完全支援。

命令列檢視剛剛建立的函式:

kubeless function list -n ctu-demo

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

使用命令列檢視這個函式的明細:

kubectl describe function zjerry-lambda -n ctu-demo

Deployment和ReplicationSet:

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

水平自動伸縮的實現:

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

Lambda Function這個概念是SAP Kyma基於Kubernetes的Custom Resource Definitions(CRD)機制建立的一種自定義資源,而上圖顯示的這些函式屬性都是Kubernetes裡資源支援的原生屬性。

在Kyma的控制檯裡能找到Lambda Function建立後,Kyma後臺自動生成的對應資源:

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

Pod,即Lambda Function程式碼的執行環境:

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

同樣的,使用kubectl describe pod命令可以檢視這個pod的明細,找到裡面包含的docker ID和docker映象ID.

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

前面提到SAP Kyma的Lambda Function採取dex進行認證,如果想在程式語言裡顯式呼叫,需要提供相應的token.

在Kyma的控制檯裡拿到token,

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

傳到Postman的Authorization頭部欄位裡,得到期望的響應。

從ABAP Netweaver的SICF到SAP Kyma的Lambda Function

希望本文能讓之前不瞭解Serverless的朋友們對SAP Kyma裡基於Serverless架構的Lambda Function有一個基本的感性認識,感謝閱讀。

更多閱讀

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":


從ABAP Netweaver的SICF到SAP Kyma的Lambda Function


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2654058/,如需轉載,請註明出處,否則將追究法律責任。

相關文章