基于 EventBridge 构建 SaaS 应用集成方案
引言
事件驅動架構(EDA)是一種以事件為紐帶,將不同系統進行解耦的異步架構設計模型。在 EDA 中,事件驅動的運行流程天然地劃分了各個系統的業務語義,用戶可以根據需求對事件與針對此事件做出的響應靈活定制,這使得基于 EDA 架構可以方便地構建出高伸縮性的應用。據 Daitan Group 的調研報告,早在 2017 年,例如 UBER、Deliveroo、Monzo 等公司就已經采用了 EDA 去設計他們的系統。
為了便于用戶更加輕松地開發以 EDA 為架構的應用,在 2020 年云棲大會上,阿里云正式推出了 EventBridge。EventBridge 是一款無服務器事件總線服務,能夠以標準化的 CloudEvents 1.0 協議在應用之間路由事件。目前,EventBridge 已經集成了眾多成熟的阿里云產品,用戶可以低代碼甚至零代碼完成各個阿里云產品和應用之間的打通,輕松高效地構建分布式事件驅動架構。
事件源是事件驅動的基石,如何獲取更多事件源也是 EventBridge 一直在探索和嘗試的方向。針對市場上其他云廠商和垂直領域的 Saas 服務,EventBridge 發布了 HTTP Source 能力,提供簡單且易于集成的三方事件推送 ,幫助客戶更加高效、便捷地實現業務上云。
HTTP Source 概述
接入 EventBridge 應用有多種情況:用戶自定義應用、阿里云服務、其他云廠商服務或者其他 SaaS 產品。
? 對于用戶自定義應用,用戶可以使用 EventBridge 官方的 API 接口、多語言客戶端以及 CloudEvents 社區的開源客戶端來完成接入。
? 對于阿里云的云產品,EventBridge 原生支持,用戶可以在默認事件總線中選擇對應的云產品與其相關的觸發事件。
? 而對于其他云廠商、SaaS 產品,EventBridge 同樣也提供便捷的接入方式便于用戶進行集成,HTTP Source 事件源便是一種典型的接入方式。
具體而言,HTTP Source 事件源是 EventBridge 支持的事件源的一種,它以 Webhook 形式暴露了發布事件的 HTTP 請求地址,用戶可以在有 URL 回調的場景配置 HTTP Source 事件源,或者直接使用最簡單的 HTTP 客戶端來完成事件的發布。HTTP Source 事件源提供了支持 HTTP 與 HTTPS,公網與阿里云 VPC 等不同請求方式、不同網絡環境的 Webhook URL,便于用戶將其集成到各類應用中。接入時無需使用客戶端,僅需保證應用可以訪問到對應 Webhook URL 即可,這使得接入過程變得簡單而高效。
在將 HTTP 請求轉換為 CloudEvent 的時候,EventBridge 會將請求的頭部和消息體部分置于 CloudEvent 字段中,其余字段會依據用戶 EventBridge 資源屬性以及系統默認規則進行填充。用戶可以在事件規則中,對所需的內容進行過濾、提取,最終按照模板拼裝成所需的消息內容投遞給事件目標。
HTTP Source 事件源目前支持 3 種類型的安全設置,分別是請求方法、源 IP 以及請求來源域名。
? 請求方法:用戶可以配置當前請求此事件源時合法的 HTTP 請求方法,如果方法類型不滿足配置規則,請求將被過濾,不會投遞到事件總線。
? 源 IP:用戶可以設置允許訪問此事件源時合法的源 IP(支持 IP 段和 IP),當請求源 IP 不在設置的范圍內時,請求將被過濾,不會投遞到事件總線。
? 請求來源域名:即 HTTP 請求的 referer 字段,當請求的 referer 與用戶配置不相符時,請求被過濾,不會投遞到事件總線。
拋磚引玉,下面就介紹如何使用 HTTP Source 來構建 SaaS 應用集成的最佳實踐,幫助大家快速上手 SaaS 集成方案。
SaaS 集成最佳實踐
釘釘監控 GitHub 代碼推送事件
GitHub 提供了 Webhook 功能,代碼倉庫在發生某些特定操作(push、fork等)時,可以通過回調來幫助用戶完成特定功能。針對多人開發的項目,將 GitHub 事件推送到特定釘釘群可以幫助成員有效關注代碼變更,提高協同效率。
本節我們展示如何通過釘釘監控 GitHub 代碼推送事件的最佳實踐,主要包含以下幾個步驟:
? 創建一個釘釘機器人;
? 創建 EventBridge 相關資源:事件總線、事件源(HTTP Source 類型)、事件規則、事件目標(釘釘);
? 創建自定義事件總線;
? 選擇 GitHub 代碼倉庫創建 Webhook;
? 向 GitHub 代碼倉庫推送代碼變更;
? 釘釘群接收此次代碼推送相關信息。
1)創建釘釘機器人
參考釘釘官方文檔[1],創建一個群機器人。創建群機器人時,安全設置請勾選“加簽”并妥善保管密鑰和稍后生成的機器人 Webhook 地址。
2)創建 EventBridge 相關資源
創建 EventBus 事件總線
創建事件源。事件源配置完成之后,點擊跳過,我們接下來會專門配置事件規則與目標。
創建完成后,進入事件源詳情頁,保存剛剛生成的 Webhook URL。
在 EventBridge 控制臺頁面點擊進入剛剛創建的 EventBus 詳情頁,在左側一欄中“事件規則”選擇“創建規則”。
創建時間目標。選擇釘釘,并將釘釘機器人的 Webhook 地址和密鑰填入,推送內容側可以按照需求設計。
我們填寫模板變量為:
{“repo”:".data.body.repository.fullname","branch":".data.body.repository.full_name","branch":".data.body.repository.fulln?ame","branch":".data.body.ref",“pusher”:"$.data.body.pusher.name"}
模板為:
{“msgtype”: “text”,“text”: {“content”: “Github push event is triggered. repository: ${repo}, git reference: ${branch}, pusher: ${pusher}.” } }
3)在 GitHub 代碼倉庫創建 Webhook
登陸 GitHub,在 GitHub 代碼倉庫“setting”中選擇左側“Webhooks”,選擇新建 Webhook。
在創建 Webhook 的配置項中填入 HTTP Source 事件源的 Webhook 地址,Content type 部分選擇“application/json”,下方觸發事件類型選擇“Just the push event.”,隨后點擊“Add Webhook”,創建完成。
4)向 GitHub 代碼倉庫推送代碼變更
本地倉庫做一定變更,commit 后推送 GitHub。
5)釘釘群接收此次代碼推送相關信息
異步消費監控報警信息
業務上存在異步消費報警信息的場景,例如報警內容備份,根據報警頻率自適應調整報警閾值等。而且對于多云業務的用戶,如何將跨云服務的報警信息整合起來也是一個麻煩的問題。依托 HTTP Source,用戶可以將不同云廠商(騰訊云、華為云等)、不同監控產品(Grafana、Zabbix、Nagios等)統一集成到 EventBridge 平臺,以便于實現對報警信息的異步消費。
本節我們介紹如何使用 EventBridge 集成 Grafana,實現異步消費監控報警信息。Grafana 是一款開源數據可視化工具,也同時具有監控報警功能,具體使用可以參閱Grafana 官方文檔[2]。本節主要包含以下步驟:
? 創建 MNS 隊列;
? 創建 EventBridge 相關資源;
? Grafana 上配置 Webhook;
? 測試接收結果。
創建 MNS 隊列
在 MNS 控制臺,選擇“隊列列表-創建隊列”。
創建 EventBridge 相關資源
同上文所述,這里僅示例創建事件目標時相關配置。
Grafana 上配置 Webhook
點擊 Grafana 控制臺左側“Alerting-Notification channels”,選擇“Add channel”。
在“type”一欄中選擇“Webhook”,url 填寫 HTTP Source 事件源的 Webhook 地址,點擊下方“Test”。
測試接收結果
登陸 MNS 控制臺,進入隊列詳情頁,點擊頁面右上角“收發消息”,可以看到 MNS 已經接收到剛剛 Grafana 發送的消息。
點擊對應消息詳情可以看到消息內容,說明消息已經被成功消費。
更多集成
HTTP Source 支持的三方集成包括 Prometheus,Zabbix,Skywalking,Grafana,Open-Falcon,Cacti,Nagios,Dynatrace,Salesforce,Shopify,Gitee 等 SaaS 應用。通過簡單配置 Webhook 無需開發既可實現事件接收能力。
總結
本文重點介紹 EventBridge 的新特性:HTTP Source 事件源。作為一款無服務器事件總線服務,EventBridge 已經將阿里云云產品管控鏈路數據、消息產品業務數據整和到事件源生態中,提高了上云用戶業務集成的便捷性,Open API 與多語言 sdk 的支持,為客戶自身業務接入 EventBridge 提供了便利。
在此基礎之上,HTTP Source 事件源更進一步,以 Webhook 形式開放了針對了其他云廠商、SaaS 應用的集成能力,無需代碼改動,僅需要簡單配置即可完成 EventBridge 集成操作。
相關鏈接
[1] 釘釘官方文檔
https://open.dingtalk.com/document/group/custom-robot-access
[2] Grafana 官方文檔
https://grafana.com/docs/
總結
以上是生活随笔為你收集整理的基于 EventBridge 构建 SaaS 应用集成方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无缝融入 Kubernetes 生态 |
- 下一篇: 一眼定位问题,函数计算发布日志关键词秒检