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