以事件為核心的架構

透過非同步事件轉送功能分離微服務,即可建構分散式系統,獨立回應狀態變更。事件產生器會發布不可變更的通知,事件路由器 (或代理程式) 則會篩選訊息並傳送給下游事件消費者 (或接收器),而非依賴直接的服務對服務呼叫。這種區隔方式可讓您獨立部署、擴充及更新元件,而不會破壞依附服務。

如要管理事件傳遞,您可以在使用 Eventarc Advanced 時定義註冊,或在使用 Eventarc Standard 時定義觸發條件。

架構總覽

事件導向架構是一種軟體設計模式,微服務會對狀態變更 (稱為「事件」) 做出反應。事件可以包含狀態 (例如商品價格或寄送地址),也可以是 ID (例如收到或出貨訂單的通知)。事件會觸發微服務,這些微服務會共同合作達成共同目標,但除了事件格式之外,不需要知道彼此的任何資訊。雖然各項微服務會共同運作,但每項微服務都可以套用不同的商業邏輯,並發出自己的輸出事件。

事件具有下列特性:

  • 記錄已發生的事件。
  • 它會擷取無法變更或刪除的不可變事實。
  • 無論服務是否在取用時套用任何邏輯,都會發生這種情況。
  • 可無限期、大規模保存,並視需要多次使用。

核心元件

在事件導向系統中,事件產生器、事件路由器和事件消費者這三個元件會彼此分離,可獨立部署、更新及擴充:

事件代理和訂閱者

事件路由器會連結不同的服務,並做為傳送及接收訊息的媒介。它會執行對事件產生器產生的原始事件的回應,並將此回應向下游傳送給適當的消費者。事件會以非同步方式處理,其結果取決於服務對事件的反應或受事件影響的方式,如下圖所示,這是一個非常簡化的事件流程:

事件導向架構

事件導向架構的使用時機

設計系統時,請考量下列用途。

  • 監控並接收快訊:監控儲存空間 bucket、資料庫資料表、虛擬機器或其他資源,並在發生異常或變更時接收快訊。
  • 將單一事件展開至多個消費者。事件路由器會將事件推送至所有適當的消費者,您不必編寫自訂程式碼。每項服務都能以不同方式平行處理事件。
  • 在不同技術堆疊之間提供互通性,同時維持各堆疊的獨立性。
  • 協調系統和團隊,在不同區域和帳戶中運作及部署。您可以重新整理微服務的擁有權。跨團隊依附關係較少,且您能更快速地因應變更,否則資料存取障礙會阻礙變更。

事件導向架構的優點

以上是建構事件導向架構的部分優點。

鬆耦合,提升開發人員靈活度

事件產生器與事件消費者在邏輯上是分開的。事件產生和取用作業之間的這種分離,意味著服務可以互通,但可以彼此獨立地擴充、更新和部署。

鬆耦合可減少依附元件,並讓您以不同的語言和架構實作服務。您可以新增或移除事件產生器和接收器,不必變更任何服務的邏輯。您不必編寫自訂程式碼來輪詢、篩選及轉送事件。

非同步事件和復原力

在事件導向系統中,事件是以非同步方式產生,且可在發生時發出,不需等待回應。鬆耦合元件代表某項服務失敗時,其他服務不會受到影響。如有需要,您可以記錄事件,讓接收服務從失敗點繼續執行,或重播過去的事件。

推送式訊息、即時事件串流,以及降低成本

事件導向系統允許推送式訊息,用戶端不需持續輪詢遠端服務來取得狀態變更,即可接收更新。這些推送的訊息可用於即時資料處理、轉換和分析。此外,輪詢次數減少,網路 I/O 也會降低,進而減少成本。

簡化稽核和事件溯源

事件路由器集中管理,可簡化稽核作業,並讓您控管哪些使用者可與路由器互動,以及哪些使用者和資源可存取資料。您也可以加密傳輸中和靜態資料。

此外,您也可以使用事件溯源,這是一種架構模式,可按照原本套用的順序,記錄對應用程式狀態所做的所有變更。事件溯源會提供不可變更的事件記錄,可保留用於稽核、重新建立歷來狀態,或做為解釋業務導向決策的標準敘述。

架構考量

事件導向架構可能需要您以新方式設計應用程式。雖然這項服務非常適合使用微服務或去耦元件的應用程式,但您也應考量下列事項:

  • 如果需要處理每個事件,事件來源是否能保證傳送?

    應為耐用且可靠的事件來源。

  • 您的應用程式是否能處理多個非同步要求?

    系統效能不應依賴全域範圍或不具彈性的資料庫。

  • 您想如何追蹤事件流程?

    事件導向架構支援使用監控服務進行動態追蹤,但不支援使用程式碼分析進行靜態追蹤。

  • 您是否要使用事件來源中的資料重建狀態?

    您應思考如何確保資料已簡化並排序。

後續步驟