從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的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2654058/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SAP ABAP Netweaver 裡的 ABAP 會話概念會話
- 如何建立最簡單的 SAP Kyma FunctionFunction
- SAP ABAP Netweaver和Hybris Commerce的部署策略
- SAP ABAP Netweaver裡的胖介面(fat interface)
- 從 ABAP Netweaver 到 ABAP Platform,我們一直在努力Platform
- SAP Hybris和ABAP Netweaver裡的DAO(Data access object)Object
- SAP ABAP Netweaver 裡的使用者會話概念會話
- ABAP Netweaver, SAP Cloud Platform和Kubernetes的使用者區分CloudPlatform
- 雲原生平臺 Kyma 上建立的 Lambda Function 的技術實現細節介紹Function
- ABAP SICF服務和Java Servlet的比較JavaServlet
- ABAP Netweaver, Hybris Commerce和SAP 雲平臺的登入認證
- SAP ABAP Netweaver伺服器的標準登入方式講解伺服器
- 如何使用Prometheus採集SAP ABAP Netweaver的應用日誌資料Prometheus應用日誌
- ABAP Netweaver和git的快捷方式Git
- 把 SAP UI5 應用部署到 SAP KymaUI
- SAP ABAP Netweaver 容器化的一些前沿性研究工作分享
- ABAP Netweaver 和 ABAP Platform 這兩個名詞的辨析Platform
- 容器,Docker,Kubernetes和Kyma,以及Kyma對SAP的意義Docker
- 容器,Docker, Kubernetes和Kyma,以及Kyma對SAP的意義Docker
- SAP ABAP Function Module 的動態呼叫方式使用方式介紹試讀版Function
- 關於無法用 https 登入 SAP ABAP Netweaver 系統的問題和解決方案HTTP
- ABAP Netweaver體內的那些寄生式程式語言
- SAP Kyma(Extension Factory on SAP Cloud Platform)的架構簡介CloudPlatform架構
- Lambda Function, Callable, Optional in PythonFunctionPython
- SAP Hybris的Master Tenant和Netweaver的System ClientASTNaNclient
- SAP Netweaver和Hybris的資料庫層資料庫
- Netweaver和SAP雲平臺的quota管理
- 如何把某個網站的SSL Server certificate鏈匯入到ABAP Netweaver系統裡網站Server
- 把執行在 Docker 容器內的 Microsoft SQL 伺服器部署到 SAP Kyma 中DockerROSSQL伺服器
- EventBus in SAP UI5 and KymaUI
- ABAP Netweaver和Cloud Foundry上的環境變數Environment VariableCloud變數
- SAP ABAP FOR ALL ENTRIES 的用法
- 站在巨人肩膀上的牛頓:Kubernetes和SAP Kyma
- WordPress,SAP Kyma和微信三者的整合
- SAP ABAP裡資料庫表的Storage Parameters從哪裡來的資料庫
- 一步步將 SAP Commerce Mock 應用部署到 SAP BTP Kyma RuntimeMock
- SAP ABAP Gateway Client 的 ABAP 實現,重用 HTTP ConnectionGatewayclientHTTP
- 把經典的ABAP webdynpro應用配置到SAP Fiori Launchpad裡Web