EDA 事件驅動架構與 EventBridge 二三事

當下比較成功的企業已然認識到,要想最大限度提升運營效率和客戶體驗,務必將業務和技術兩方面的舉措緊密結合起來。運營事件或業務形勢的變化是時下衆多企業關注的焦點,這些變化能夠爲企業領導者帶來切實有用的信息,而架構設計的主旨恰恰是從客戶聯繫人、交易、運營等方面的信息中獲取洞見,兩者相輔相成。傳統技術歷來對企業從事件中獲取洞見的速度有着諸多限制,比如用於記錄、收集和處理此類事件的批處理 ETL(提取、轉換、加載)。

事件驅動型架構 (EDA) 方興未艾,作爲一種 Serverless 化的應用概念對雲原生架構具有着深遠影響。當我們討論到一個具體架構時,首當其衝的是它的發展是否具有技術先進性。這裏從我們熟悉的 MVC 架構,SOA 架構談起,聊一聊關於消息事件領域的歷史與發展趨勢。

消息事件領域的發展趨勢

早在 2018 年,Gartner 評估報告將 Event-Driven Model 列爲 10 大戰略技術趨勢之一,事件驅動架構(EDA)將成爲未來微服務的主流,並做出以下斷言:

George Santayana 在《 The Life of Reason》曾提到, Those who fail to learn History are doomed to repeat it.(不懂歷史的人註定會重蹈覆轍)。我們以史爲鑑,來看看爲什麼會架構會演進到事件驅動。

架構本身沒有優劣之分,它本身就是一組技術決策,決定後續項目的所有功能開發(框架,編碼規範,文檔,流程….),這裏聊聊爲什麼會引入某些框架,這個框架解決了軟件開發中的什麼問題。

什麼是 EDA 架構

我們聊完之前全部的架構趨勢後,再回過頭看看什麼是 EDA 架構。

EDA 事件驅動架構 (Event-Driven Architecture) 是一種系統架構模型,它的核心能力在於能夠發現系統“事件” 或重要的業務時刻(例如交易節點、站點訪問等)並實時或接近實時地對相應的事件採取必要行動。這種模式取代了傳統的 “ request/response ” 模型,在這種傳統架構中,服務必須等待回覆才能進入下一個任務。事件驅動架構的流程是由事件提供運行的。

上圖其實很好的解釋了 EDA 架構的模型,但是其實還不夠明確。所以,這裏我們和單體架構一起對比看看他們之間差異。

在如上對比圖中,我們其實可以較爲清楚看到它與傳統架構的區別。在一般傳統架構中,創建訂單操作發生後,一系列的操作其實都是通過一個系統完成的。而事件驅動的概念則是將全部操作都轉換爲 “事件” 概念,下游通過捕獲某個 “事件” 來決定調用什麼系統完成什麼樣的操作。

總結來看,事件驅動其實是將比較重要的業務時刻封裝成 “事件”,並通過某個 EventBus 將事件路由給下游系統。

我們瞭解了 EDA 架構的整個處理過程,但是還沒解決這個所謂的 “EventBUS” 到底是啥樣。

上圖就是事件驅動的核心邏輯架構。是不是非常像某個傳統 MQ?彆着急,下面我會講到這個架構的複雜部分。講完 EventBus,我們回過頭來看 “事件”,剛剛介紹中比較重要部分其實是將操作轉換爲某類事件進行分發。那這的事件我們怎麼定義呢?

簡單來看,其實事件就是狀態的顯著變化,當用戶採取特定行動時觸發。以 4S 店售賣汽車爲例:

每個事件都可能觸發一個或多個選項作爲響應。

關於事件其實雲原生 CNCF 基金會在 2018 年託管了開源 CloudEvents 項目,該項目旨在用統一和規範的格式來描述事件,來加強不同的服務、平臺以及系統之間的互操作性。在該項目定義下,通用的事件規範是這樣的:

事件主要由 Json 體構成,通過不同字段描述發生的事件。

EDA 架構的落地實踐思考

在開始介紹落地實踐時,我們先來看一個經典的 EDA 架構模型:

這是一個非常經典 EDA 訂單架構,該架構主要使用了 EventBridge 和 FC 函數計算(如果不太熟悉 FaaS 的同學可以把 FC 節點當作 ECS 或 K8s 的某個 POD 節點),通過事件驅動各個業務進行協作。

所以這塊的中心節點(EventBridge)其實有三個比較重要的能力:

  1. For Event Capturing(事件收集):具備採集事件的能力

  2. For Routing(事件路由):通過事件內容將事件路由分發至於下游的能力的

  3. For Event Processing(事件過濾 / 替換):對事件進行脫敏或初步過濾 & 篩選的能力

通常情況下,要實現這三個能力是比較困難的,比如:Event Capturing 可能需要熟悉 Dell Boomi, Snaplogic, MuleSoft, Dataflow, Apache Apex 等,Routing 部分可能通過 RocketMQ,RabbitMQ, ActiveMQ, Apache Kafka ,Event Processing 需要了解 Apache Storm, Apache Flink 。所以之前講的邏輯架構其實非常理想,要想實現完成的 EDA 事件驅動還需要包括這些核心能力。

其實,從剛剛的架構中我們也能窺探到一些信息,EDA 架構其實看起來沒有那麼簡單,那它有何優劣呢?下面我就簡單羅列下 EDA 架構在實踐中的優勢:

當然,劣勢也很明顯:

阿里雲 EventBridge 如何解決 EDA 場景下的困境

針對 EDA 場景下面臨的這些問題,阿里雲推出了 EventBridge,一款無服務器事件總線服務,其使命是作爲雲事件的樞紐,以標準化的 CloudEvents 1.0 協議連接雲產品和應用,應用和應用,提供中心化的事件治理和驅動能力,幫助用戶輕鬆構建松耦合、分佈式的事件驅動架構;另外,在阿里雲之外的雲市場上有海量垂直領域的 SaaS 服務,EventBridge 將以出色的跨產品、跨組織以及跨雲的集成與被集成能力,助力客戶打造一個完整的、事件驅動的、高效可控的上雲體驗。並針對 EDA 困境提供了針對性的解決方案。

架構複雜:提供業內通用的  Source ,Buses,Rules,Targets  模塊管理能力,同時支持 EventBus 和 EventStream 兩種模式。大幅度降低事件驅動架構難度。

路由分發:EventBridge 通過事件規則驅動,支持 8 大事件模式,4 重轉換器,滿足路由分發的全部訴求。

無法追蹤:獨家提供事件追蹤能力,事件分析 / 查詢能力。爲用戶完善整體事件鏈路。

可靠性差:支持 DLQ/ 重試機制,大幅度保證由於用戶下游系統導致的事件故障與延遲。

同時,在此基礎上 EventBridge 支持 82 種阿里雲產品,847 種事件類型。

阿里雲 EventBridge 更多場景介紹

  1. 經典 EDA 事件驅動:事件總線(EventBridge)最重要的能力是通過連接應用程序,雲服務和 Serverless 服務構建 EDA(Event-driven Architectures) 事件驅動架構,驅動應用與應用,應用與雲的連接。

  1. 流式ETL 場景:EventBridge 另一個核心能力是爲流式的數據管道的責任,提供基礎的過濾和轉換的能力,在不同的數據倉庫之間、數據處理程序之間、數據分析和處理系統之間進行數據同步 / 跨地域備份等場景,連接不同的系統與不同服務。

  1. 統一事件通知服務:EventBridge 提供豐富的雲產品事件源與事件的全生命週期管理工具,您可以通過總線直接監聽雲產品產生的數據,並上報至監控,通知等下游服務。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/jOCpP8n6HGBVOxgf-ktvKw