基於 EventBridge 構建 SaaS 應用整合方案

阿里巴巴雲原生發表於2022-03-15

引言

事件驅動架構(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.full_name","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/doc...

[2] Grafana 官方文件
https://grafana.com/docs/

相關文章