基于 ASK + EB 构建容器事件驱动服务
?作者:?冬島、?肯夢?
導讀
EDA 事件驅動架構( Event-Driven Architecture ) 是一種系統架構模型,它的核心能力在于能夠發現系統“事件”或重要的業務時刻(例如交易節點、站點訪問等)并實時或接近實時地對相應的事件采取必要行動。那么 EDA + 容器能擦出怎樣的火花呢?本篇文章將帶領大家一起在云上借助 ASK 容器服務 + EB 能力構建一套完整的事件驅動架構。
本篇文章以“在線文件解壓場景”為例為大家展示經典 EDA 事件驅動與容器如何搭配使用。
關注【Apache RocketMQ】公眾號,獲取更多相關信息!
服務架構
在線文件解壓以 EB OSS 事件通知為驅動點,架構方案如下:
EDA 架構的核心是對事件的應用,OSS 事件默認可以通過云服務總線完成采集,自定義通知事件。本場景是通過 EventBridge 把 OSS 上傳文件的事件實時傳遞給 ASK 中的服務,然后 ASK 中的服務對上傳的 ZIP 文件進行下載、解壓和再次回傳到 OSS。
用到的云服務:
-
ASK:Serverless 容器服務是一款基于阿里云彈性計算基礎架構,同時完全兼容 Kubernetes 生態,安全、可靠的容器產品。
-
EB:EventBridge 事件總線是一款無服務器事件總線服務,支持阿里云服務、自定義應用、SaaS 應用的事件接入,適用于輕松構建松耦合、分布式的事件驅動架構。
-
OSS:對象存儲服務,提供海量、安全、低成本、高可靠的云存儲服務。
場景實踐
OSS、ASK 以及 EventBridge 三個云產品的操作步驟如下:
OSS 資源配置
- 在 OSS 控制臺創建相關地域的 Bucket,并記住 Bucket 路徑信息。
zip:放置需要解壓的zip包
unzip:放置解壓后的文件
- 創建一個可以操作 OSS 文件的用戶,并生成 ak/sk 。
打開 RAM 控制臺 [1] ,點擊「創建用戶」。
- 輸入「登陸名稱」和「顯示名稱」并勾選 「Open API 調用訪問」然后點擊確定即可創建一個用戶身份。
- 創建好賬號以后再打開 RAM 控制臺 [1] 能看到剛才創建的賬號信息。
- 點擊賬號名稱,然后來到賬號詳情頁面。點擊「創建 AccessKey」。
- 然后就能生成 ak、sk 信息,如下所示。保存這兩個關鍵信息,后面配置 ask 解壓服務的時候需要使用,也可以點擊「下載 CSV 文件」的方式下載下來保存。
- 有了 ask sk 還不行,要能訪問 OSS 服務,還需要給這個子賬號授予 OSS 的操作權限,點擊「權限管理」。
- 點擊「添加權限」。
- 在 「系統策略」中輸入 OSS,然后勾選「AliyunOSSFullAccess」,點擊確定即可完成對 OSS 的訪問授權。
ASK 資源配置及代碼解析
ASK(Serverless Kubernetes) 運行應用程序用于接受來自 EventBridge 發過來的關于 OSS 的事件,所以您首先需要創建一個 ASK 集群,然后部署解壓服務。
1)創建 ASK 集群
- 打開容器服務控制臺 [2] 點擊右上角的創建集群
- 選擇 ASK 集群
填寫集群名稱,勾選最下面的《服務協議》,其他都使用默認配置然后就可以創建一個集群出來。
- 點擊右上角的創建,開始創建集群。
- 彈出確認創建,確認沒問題以后點擊「確定」 即可開始創建。
- 等幾分鐘后集群即可創建完成。
如果創建集群過程中遇到問題,可參考創建集群文檔 [3] 解決,也可以通過群號 31544226 加釘釘群找答疑解決。
2)部署解壓服務
- 集群部署成功以后點擊容器服務頁面 [4] 可以看到剛剛創建的集群,然后點擊集群名稱調轉到集群詳情頁面;
- 在集群詳情頁面點擊 「工作負載」中的「無狀態」可以通過提交解壓服務 YAML 的方式創建 Deployment 和 Service
- 點擊右上角的「使用 YAML 創建資源」
- 把下面的 YAML 內容提交上去,注意 OSS_ACCESSKEYID 和 OSS_ACCESSKEYSECRET 這兩個環境變量需要設置成你的 ak、sk,并且需要有從 OSS 下載、上傳文件的權限。然后點擊創建,即可完成服務的創建。
- 解壓服務源代碼可在 github [5] 獲取。
3)獲取到服務暴露 URL
- 服務部署好以后點擊「網絡」中的「服務」即可看到 eb-ask-demo 這個 Service,然后能看到 「外部端點」的地址。「外部端點」地址就是解壓服務的地址,全路徑是 ??http://121.43.97.107/unzip???
EB 資源配置
EB 總線分為云服務總線和自定義總線,云服務總線用于接受云服務事件 E.g. OSS ,自定義總線用于接受自定義事件 E.g. 解壓完成信息。
- 配置云服務總線
- 配置事件模式,事件模式即事件的篩選規則,需認真配置,否則會造成循環觸發。
更多事件模式說明 [6] 參考文末更多鏈接。
{"source": ["acs.oss"],"type": ["oss:ObjectCreated:PostObject","oss:ObjectCreated:UploadPart","oss:ObjectCreated:PutObject","oss:ObjectCreated:UploadPartCopy","oss:ObjectCreated:InitiateMultipartUpload","oss:ObjectCreated:AppendObject","oss:ObjectCreated:CompleteMultipartUpload"],"subject": [{"suffix": ".zip"}],"data": {"oss": {"bucket": {"name": ["eb-ask"]},"object": {"key": [{"prefix": "zip/"}]}}} }- 填寫 ASK 暴露的 URL 地址(http://121.43.97.107/unzip ),點擊完成即可完成總線配置。
效果驗證
服務已經準備好了,現在找一個 zip 文件上傳到 OSS 就能看到效果了。上傳一個 zip 文件到 zip 目錄以后應該能在 unzip 目錄中看到解壓后的文件。
- 準備 zip 文件
您可以創建一個文本文件,然后壓縮成 zip 格式。或者可以打開我們的示例程序Github 工程 [7] ,下載此工程源碼的 zip 文件,可以直接獲得一個 zip 文件。
- 上傳 zip 文件
打開 OSS 控制臺 [8] ,選擇配置好的 bucket,進入 zip 目錄。
- 點擊「上傳文件」。
- 點擊「掃描文件」,然后找到剛才下載的 zip 文件。
- 選擇剛才下載的 zip 文件。
- 點擊「上傳文件」。
- 文件很快就上傳成功。
- 現在打開 unzip 目錄能看到解壓后的文件已經上傳上來了。
- 現在打開 EventBridge 控制臺 [9] 查看事件軌跡。選擇查看最近 5 分鐘的事件。
- 點擊「事件軌跡」 能看到事件是通過 EventBridge 成功投遞到了 ASK 暴露的解壓服務上。
優勢及總結
-
基于該方案的事件驅動架構場景是高度松耦合且高度分布式的架構模型,事件的創建者(來源)只知道發生的事件,并不知道事件的處理方式,也不需要關心有多少相關方訂閱該事件。
-
ASK + EB 可解決業務層大部分容器事件驅動的場景,通過 EB 解耦并針對具體事件進行分發。通過松耦合架構快速且靈活的上線業務組件,為企業提供更敏捷高效的容器業務部署方案。
參考資料
[1] RAM 控制臺:
??https://ram.console.aliyun.com/users??
[2] 容器服務控制臺
??https://cs.console.aliyun.com/ ??
[3] 創建集群文檔
??https://help.aliyun.com/document_detail/86377.htm?spm=a2c4g.11186623.0.0.350f3e068qu6bW#task-e3c-311-ydb??
[4] 容器服務頁面
??https://cs.console.aliyun.com/#/k8s/cluster/list??
[5] github
??https://github.com/AliyunContainerService/serverless-k8s-examples/oss-unzip??
[6] 更多事件模式說明:
??https://help.aliyun.com/document_detail/181432.html??
[7] 示例程序 Github 工程
??https://github.com/AliyunContainerService/serverless-k8s-examples??
[8] OSS 控制臺
??https://oss.console.aliyun.com/ ???
[9] EventBridge 控制臺
??https://eventbridge.console.aliyun.com???
[10] zip 解壓源代碼
??https://github.com/AliyunContainerService/serverless-k8s-examples/tree/master/oss-unzip??
總結
以上是生活随笔為你收集整理的基于 ASK + EB 构建容器事件驱动服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在零停机的情况下迁移 Kuberne
- 下一篇: 以一致的体验交付和管理云原生多集群应用