基于 Kyma 的企业级云原生应用的扩展案例分享
什么是 Kyma?其官網的定義是,Kyma 是一個開源的云原生應用開發平臺和運行時,底層基于 Kubernetes,借助一系列包括 Istio, NATS, Serverless 和 Prometheus 在內的其他優秀開源項目和組件,能夠開發、運行和操作云原生應用程序,支持對傳統的 On-Premises(本地部署)應用程序和云原生應用基于事件驅動模式的松耦合擴展。
本文分為兩部分,分別給大家介紹使用 Kyma 對本地部署的傳統應用和企業級云原生應用進行擴展的案例。
使用 Kyma 擴展本地部署的 WordPress 應用
WordPress 是一個基于 PHP 的開源內容管理系統,很多朋友喜歡使用 WordPress 搭建自己的個人博客網站。
設想這樣一個場景:某程序員是一個社交媒體達人,喜歡將自己的見聞經歷,同步到 Twitter,Facebook,Youtube,微信等多個社交媒體上。手動登錄一個個媒體平臺然后逐一更新狀態,無疑是一件費時費力的事情。
還好我們是程序員,可以充分發揮自己的動手能力。
假設我們自己的 WordPress 網站可以同 Kyma 連接,每當 WordPress 有新的動態(比如一篇博客)發布時,會給 Kyma 發送一個 post.published 事件。Kyma 接收到該事件后,觸發注冊在該事件上的監聽函數,逐一調用社交媒體平臺的 API,創建對應的動態即可。
我們本地部署的 WordPress,扮演的就是下圖左邊 Business Solution 代表的角色。
安裝 Kyma for WordPress 的插件之后,我們能夠在 WordPress Settings 標簽頁里,看到一個新的 Kyma Connector Settings 頁面,維護 Kyma 實例的 url,登錄用戶名和密碼等信息。
在上圖 Kyma Connection 字段里維護的 url,會被 Kyma Application Connector 解析,并在 WordPress 和 Kyma 間建立互相信任的連接。
在 Kyma 控制臺創建一個新應用,點擊 Connection Application 按鈕,把彈出的 url 維護到 WordPress Kyma Connection 字段。
如果把該 url 直接粘貼到瀏覽器里,可以看到以下內容:
- csrUrl(Certificate Signing Request) 和 certificate:用來生成在 WordPress 和 Kyma 之間建立 SSL 連接所必需的數字證書
- api:Kyma Service Catalog 注冊的 endpoint
我們通過單步調式 WordPress 的方式,來深入了解 WordPress 與 Kyma 建立安全連接的技術細節。
WordPress 向傳入的 url 發起 HTTP GET 請求(下圖第 22 行代碼的 wp_remote_get),獲取到 CSR Certificate 和 API end point,存儲在第 32 行的變量 $body_json 內。
第 73 行從變量 $body_json 的 csrUrl 字段拿到 Kyma 的 CSR(Certificate Signning Request)url,第 75 行向該 url 發送一個 POST 請求,拿到響應:
將 HTTP 響應數據另存為WordPress 目錄下的三個本地文件:
- crt.pem
- clientCrt.pem
- caCrt.pem
接下來 WordPress 同 Kyma 的安全連接,就是基于這些本地數字證書文件來完成。
建立了安全連接后,下一步需要將 WordPress 指定的事件發布到 Kyma 上去。
點擊上圖 Save Changes 之后,WordPress 的 Kyma 插件會將用戶維護的待注冊事件,拼裝成對應的 JSON 字符串,通過 HTTP POST 請求 向 Kyma 發送:
事件注冊成功后,在 Kyma Application 控制臺,就能看到發起連接請求的 WordPress 實例的對應記錄:
同時在 Kyma Service Catalog 里,也能看到 WordPress 通過注冊事件暴露出來的可訪問 API 入口:
WordPress 事件發布成功后,這些事件就會出現在 Kyma 實例控制臺的 Service Catalog(服務目錄)界面里,如下圖所示。
這種事件注冊機制,確保了 WordPress 和 Kyma 的松耦合關系:在 Kyma 平臺上編寫事件監聽函數的開發人員,完全不需要了解關于 WordPress 的任何技術細節,這些事件監聽函數在 Kyma 上的載體就是一個個 Lambda Function,開發人員可以用自己喜歡的編程語言來實現函數。
創建一個 Lambda Function,為 WordPress 暴露給 Kyma 的 post.published 事件實現監聽函數的邏輯。
函數實現的技術棧,選擇 Node.js:
Select Function Trigger 即觸發方式選擇,我們選擇 WordPress 暴露給 Kyma 的 post.published 事件。這樣當 WordPress 里有新的 post 創建時,WordPress 會發送 post.published 事件,連同 post 的具體內容,傳給 Kyma,后者會自動調用創建好的基于 Serverless 的 Lambda Function.
剩下的 Lambda Function 的實現工作就是純粹的 Node.js 編程:從事件參數 event 對象里將 WordPress 傳入的 post 內容解析出來,調用 axios 工具庫將此條 post 進行轉發。
Lambda Function 實現里,我選擇了調用微信 Open API,將該條 post 推送給一個用于測試的硬編碼的微信用戶:
以上就是使用 Kyma 將 WordPress 里發布的內容自動 “同步” 到其他社交媒體平臺比如微信的步驟。我們簡單回顧一下思路:
(1) 通過 Kyma Application Connector 與 WordPress 建立互相信任的安全連接。
(2) 將 WordPress 暴露出的 post.published 事件,發布到 Kyma Service Catalog 里。
(3) 實現 Kyma Lambda Function,監聽 WordPress 所發布的 post.published 事件,實現對應的內容轉發到社交媒體平臺的功能。如果除了微信之后,還希望轉發到其他社交媒體平臺上,只需再創建一個新的 Lambda Function,然后調用其他的社交媒體平臺的發布 API 即可。
以上步驟同樣適用于通過 Kyma 對其他的云原生應用進行擴展。
按照上述三個步驟,對 WordPress 進行擴展之后,發布一條新的帖子,關于影片《切爾諾貝利》的觀后感:
單步調試 WordPress 的帖子發布功能,發現發布的帖子內容被推送到了 Kyma API Gateway 對應的 url:
回到 Kyma Lambda Function 函數的控制臺,確認 WordPress 發送的事件內容,已經成功被 Kyma 接收到了:
最后我的微信號上成功收到了 Kyma Lambda Function 里調用微信 Open API 發送的消息:
使用 Kyma 擴展企業級云原生應用
在 Kyma 官網的客戶成功案例中,赫然有 SAP,Netconomy,Accenture,Digital Lights 這些企業用戶。
SAP 在客戶體驗產品線(Customer Experience) 這一領域推出的 C/4HANA 套件,包含市場云,電商云,銷售云,服務云和客戶數據云。Kyma 正是 SAP 推薦的對這些企業家云原生應用進行擴展的推薦平臺和工具之一。
下面我們來了解一些具體的擴展案例。
SAP 電商云(Commerce Cloud) 有一套訂單狀態編排模型,從用戶下單到訂單最終處于 Complete 狀態,狀態的遷移通過一系列 Action 進行驅動。
假設我們期望在 SAP 電商云里實現這樣一個增強場景:在用戶下單之后,發貨之前,增添一個自定義的檢查步驟 Fraud Check(訂單欺詐檢查),如下圖流程圖內淺色矩形框所示。
一種比較直接的方式,是在 SAP 電商云源代碼里,查找訂單編排流程里基于 Spring 框架的 Hook,通過自定義 Java Bean 的方式,實現自定義檢查邏輯。這種方式在開發完成后,需要重新構建 SAP 電商云的 Java 源代碼。這就是所謂的 In-App extension 方式。
如果選擇 Kyma 以事件驅動的方式對 SAP 電商云進行增強,則增強邏輯以 Lambda Function 的載體存儲在 Kyma 平臺上,而非對 SAP 電商云本身的源代碼進行增強。這種方式又稱為 Side-by-Side extension 方式。
主要的開發步驟如下:
(1) 在 SAP 電商云進行配置,將自定義事件 Fraud Check 發布給 Kyma.
(2) SAP 電商云的增強開發人員,登錄 Kyma 控制臺,創建 Lambda Function,將 Function Triggers 選擇為步驟一在 SAP 電商云里發布的自定義事件。Lambda Function 的實現內容,即從事件對象里解析出下單的客戶信息,然后調用 Marketing Cloud 和 SAP 云平臺提供的 Restful API,對該客戶身份的有效性進行檢查。
運行時,當用戶下單后,SAP 電商云向 Kyma 拋出一個事件。Kyma 分別調用 SAP Marketing Cloud 和 SAP 云平臺的 Business Partner API,將檢查結果返回給 SAP 電商云。
登錄 SAP 電商云 Backoffice 配置頁面,定義一個新的Action,ID 為 EXTERNAL_KYMA_FRAUD_CHECK.
登錄 Kyma 控制臺,創建一個新的 Lambda Function,Function Triggers 選擇為 SAP 電商云 Backoffice 里維護的自定義事件:
Lambda Function 的具體實現:
- 代碼 18~19 行:從 輸入的 event 事件對象參數里,解析出訂單 Code
- 26 行:消費 SAP 電商云的 OCC(Omni Commerce Channel) Restul API,獲得訂單明細,從中獲得下單的客戶 ID
- 30 行:根據客戶 ID 拿到客戶明細
- 37 行:檢查該客戶的郵箱地址是否有效
- 40 行:檢查該客戶是否第一次下單
- 43 行:調用 SAP Marketing Cloud API 檢查客戶身份有效性
- 46 行:調用 SAP 云平臺 Business Partner API 檢查客戶身份有效性
下面對這種基于事件驅動方式所完成的增強實現進行測試。
在 SAP 電商云里創建一個新的訂單,記下訂單 ID 2139.
登錄 SAP 電商云 Backoffice 控制臺,檢查自定義 Fraud Check 邏輯是否按照我們期望的流程來執行。
根據 ID EXTERNAL_KYMA_FRAUD_CHECK 進行搜索,找到了之前新建的 Action 對應的流程日志記錄:
打開訂單的 Fraud Reports 面板,查看檢查記錄:
Email 字段檢查結果:客戶維護的 Email 字段是一個有效的郵箱地址。
首單檢查(First Time Order Check)返回的分數是 100,根據 SAP 電商云當前配置,這個結果被判定為首單。
SAP Marketing Cloud API 調用返回的結果:
SAP 云平臺 Business Partner API 調用返回的結果:
我們再來看看另一個使用 Kyma 擴展 SAP 銷售云即 SAP Cloud for Customer Sales 模塊的例子。
這是一個所謂 Account Address Enrichment 的場景,用戶在 SAP 銷售云里創建 Account 主數據時,只需維護基本的地址信息,點擊保存后,銷售云發送事件給 Kyma,后者響應該事件,調用 SAP API Hub上的 Address 微服務,把 Enrich 之后的地址詳情,通過銷售云 Account OData API 進行寫回。這個增強可以減少銷售云用戶錄入 Account 數據的工作量。
這個增強最關鍵的一步,就是打通 SAP 銷售云與 Kyma 的連接,讓 Kyma 能夠接收到 SAP 銷售云運行業務流程時拋出的事件。
進入 SAP 銷售云 Administration 工作中心 的 Event Notification 配置頁面:
新建一個銷售云 OData 事件的消費者,即 Kyma 實例。
Consumer 創建頁面需要維護遠端 Kyma Application Connector url:
這個 url 可以通過登錄 Kyma 控制臺,點擊 Connect Application 按鈕生成:
回到銷售云配置頁面,指定將 Account 和 Opportunity 這兩個 Business Object 的創建和更新事件,發送給 Kyma.
這些 Business Object 的事件發布行為,通過銷售云的 Subscription 來描述:
保存配置后,到 Kyma 控制臺,此時就能觀察到 SAP 銷售云(Sales Cloud) 注冊的事件了。
點擊 SAP Sales Cloud,能夠查閱注冊事件的技術明細,比如事件負載(Payload) 格式,包含的字段名和數據類型等。
剩下的就是和之前擴展 WordPress 以及 SAP 電商云一樣的操作,在 Kyma 中基于 SAP 銷售云注冊的事件,創建 Lambda Function,解析事件參數并進行相應處理。出于文章篇幅限制,在 Lambda Function 里僅僅簡單將銷售云傳入的事件對象的內容打印出來。
在 SAP 銷售云里新建一個 Opportunity 并保存。
到 Kyma Lambda Function 日志控制臺里,觀察到了函數體里使用 console.log 打印出的來自 SAP 銷售云的 Opportunity 創建事件包含的字段:
總結
本文首先簡要介紹了 Kyma 這個底層基于 Kubernetes 的開源云原生應用開發平臺和運行時,接著分成兩大部分,分別分享了使用 Kyma 對傳統的 On-Premises 應用(WordPress) 和企業級云原生應用(SAP 電商云和 SAP 銷售云)進行擴展的案例。
這些擴展案例均來自筆者實際工作中的項目經歷,希望能起到拋磚引玉的作用,感謝閱讀。
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的基于 Kyma 的企业级云原生应用的扩展案例分享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于施加在 div 标签上的 ngTem
- 下一篇: 关于 ng-template 通过 @i