什麼是事件導向架構?

企業越來越需要能立即回應各種觸發條件的系統,包括客戶互動和感應器讀數。傳統的請求/回應模型有其價值,但可能無法在這些動態環境中提供必要的靈活性或擴充性。事件導向架構 (EDA) 是建構反應靈敏、具韌性且可擴充應用程式的高效做法。這種軟體架構模式可提升事件產生、偵測、取用和回應的能力。

瞭解事件導向架構

事件導向架構的定義

事件導向架構是一種軟體應用程式設計模式,當中的服務以鬆耦合方式運作,並透過產生和取用事件進行通訊。「事件」是指發生有意義的狀況或系統狀態變更,例如顧客下單、感應器偵測到溫度變化、新檔案上傳至儲存空間,或是資料庫記錄更新。

在傳統的請求導向模型中,服務會明確呼叫另一個服務並等待回應,但 EDA 允許服務以非同步方式運作。產生事件的服務 (「產生者」或「發布者」) 只會單純宣布事件發生,其他對這類事件感興趣的服務 (「取用者」或「訂閱者」) 可以自行擇時予以回應。

EDA 的關鍵元件通常包括:

  • 事件產生者:產生事件的應用程式或服務
  • 事件取用者 (或訂閱者):接收及處理事件的應用程式或服務
  • 事件管道 (或事件匯流排、訊息代理程式、事件路由器):為中介基礎架構,可向產生者擷取事件並進行篩選,然後傳送給感興趣的取用者;這個元件是分離產生者與取用者的關鍵

事件導向架構的運作方式

事件導向架構的工作流程通常遵循一致的模式。

  • 事件發生與產生:服務或系統中發生重要動作,例如使用者在電子商務網站上點選「提交訂單」按鈕。負責處理這項初始動作的服務 (事件提供者) 會生成事件物件,當中包含訂單 ID、商品和顧客詳情等相關資訊。
  • 傳送事件:提供者將事件傳送至事件管道。這個管道是專門處理事件流的基礎架構,例如訊息佇列或發布/訂閱 (Pub/Sub) 系統。
  • 事件篩選和轉送 (透過事件管道):事件管道會接收事件,然後根據事件類型、內容或主題套用篩選規則,或轉送給對該事件感興趣且已訂閱的各種下游取用者。舉例來說,「order_placed」事件可能會轉送至庫存服務、通知服務和運送服務。
  • 事件取用與處理:感興趣的服務 (取用者) 會從管道接收事件,每個取用者都能以非同步方式獨立處理事件。接續上面提到的電子商務範例:
  • 庫存服務可能會減少訂購商品的庫存量
  • 通知服務可能會將訂單確認電子郵件傳送給顧客
  • 運送服務可能會啟動物流程序

事件導向架構的優點

採用事件導向架構可帶來許多優勢,這項做法尤其適用於複雜的分散式系統。

提升擴充性

EDA 中的服務採用鬆耦合設計,且可獨立擴充。如果「訂單處理」服務負載過重,您可以單獨擴充該服務,而不會影響「使用者通知」等其他服務。

提升韌性和容錯能力

事件導向架構可隔離服務故障情形,有效提升應用程式的穩定性。這種分離式架構可確保某項消費者服務發生故障時,不會擴散並導致整個系統故障。

提高靈活度和彈性

開發人員可以新增、修改或移除服務,且幾乎不會影響系統的其他部分。新服務可以訂閱現有的事件串流,在不變更原始事件產生器的情況下新增功能。

即時回應

事件導向架構能顯著加快系統回應事件的速度。這項功能特別適合講求迅速回應的應用程式,例如詐欺偵測、即時分析和營運監控。

簡化整合程序

EDA 可做為彈性骨幹並整合分散的系統,包括舊版應用程式、新型微服務和第三方服務。每個系統都能發布及取用事件,不必與其他系統直接點對點整合。

擴充性

新增功能或以新方式回應現有事件時,通常只要部署新的取用者服務來訂閱相關事件串流。

透過 Google Cloud 解決業務難題

新客戶可以獲得價值 $300 美元的免費抵免額,盡情試用各項 Google Cloud 功能。

事件導向架構的應用實例

EDA 的特性非常契合各行各業的多種應用。

EDA 是在微服務之間實現通訊和資料流通的常見做法。微服務可發布狀態變更事件,讓其他已訂閱該事件的微服務據此採取行動,而非直接同步呼叫 API,避免發生系統緊耦合。

對於需要高速處理資料串流的應用程式 (如 IoT 感應器資料、應用程式記錄、社群媒體動態消息或金融市場資料),EDA 可即時處理、分析及回應這些資訊。您可以透過 EDA 打造完善的資訊主頁、建立警告系統,或自動制定決策。

EDA 可協助管理線上零售業特有的非同步複雜工作流程,包括根據銷售情況管理庫存量、處理訂單的各個階段 (付款、出貨、運送) 和通知顧客等。即使付款處理服務速度緩慢,其他服務 (例如庫存保留) 仍可擷取並處理訂單事件。

許多業務程序本質上就是事件導向。舉例來說,保險理賠申請 (事件) 會觸發一系列後續活動:詐欺檢查、評估、客戶溝通,最後是付款處理。EDA 能有效建立這些工作流程的模型並自動化。

當多個系統或資料儲存庫的資料必須維持同步時,即可使用 EDA。當您發布資料庫變更 (事件) 後,其他資料庫或快取就能訂閱這些變更事件並更新自身的資料。

無伺服器函式 (如 Cloud Run functions) 通常屬於事件導向,會因應各種事件觸發條件執行,例如物件上傳至雲端儲存空間、訊息抵達佇列,或是收到 HTTP 要求。EDA 非常適合使用無伺服器元件建構應用程式。

即時詐欺偵測、股市監控和交易處理是重要的金融應用功能,可受惠於 EDA 的低延遲和高處理量特性。

Google Cloud 如何運用事件導向架構?

Google Cloud 提供一套強大的服務,可協助客戶建構及部署功能強大的事件導向應用程式。平台本身採用事件導向原則,有助於提供可擴充且具韌性的服務。對於建構事件導向解決方案的客戶,Google Cloud 提供多項重要的代管服務:

  • Pub/Sub:這項服務廣布全球,可擴充且穩定可靠,能即時傳送訊息,在 EDA 中做為事件匯流排或訊息代理程式。Pub/Sub 可協助服務發布事件,並讓其他服務非同步訂閱這些事件。Pub/Sub 會分離發布者與訂閱者,並支援「至少一次」的傳送、推送和提取訂閱項目,以及訊息篩選等功能。
  • Eventarc:Eventarc 可將事件來源 (如 Cloud Storage bucket 變更、BigQuery 工作完成或自訂應用程式事件) 連接至事件取用者,以標準化方式管理事件流程。開發人員可輕鬆觸發 Cloud Run 服務、Cloud Run functions 或 Workflows 來回應事件。
  • Cloud Run:這個全代管運算平台可讓您執行無狀態容器,並透過 HTTP 要求或 Pub/Sub 事件 (通常透過 Eventarc) 叫用。使用 Cloud Run functions 後,您可以透過部署單一用途的小型程式碼片段 (函式) 來回應各種事件,完全不必管理伺服器或執行階段環境。在事件導向架構中,Cloud Run 服務可做為事件取用者,有效處理由這些事件觸發的工作負載。
  • Workflows:代管的自動化調度管理平台,可讓您定義、部署及管理無伺服器工作流程。Workflows 可由事件 (透過 Eventarc 或 Pub/Sub) 觸發,並協調對各種 Google Cloud 服務和 HTTP 型 API 的呼叫,因此適合用來自動調度管理複雜的事件導向業務程序。
  • Dataflow:如要進行複雜事件處理 (CEP) 和串流分析,Dataflow 可提供整合的串流和批次資料處理平台。Dataflow 可擷取 Pub/Sub 的事件串流,執行精密的轉換、彙整和分析作業,然後將結果輸出至其他系統或觸發後續動作。

展開下一步行動

運用價值 $300 美元的免費抵免額和超過 20 項一律免費的產品,開始在 Google Cloud 中建構產品與服務。