透過非同步事件轉送功能分離微服務,即可建構分散式系統,獨立回應狀態變更。事件產生器會發布不可變更的通知,事件路由器 (或代理程式) 則會篩選訊息並傳送給下游事件消費者 (或接收器),而非依賴直接的服務對服務呼叫。這種區隔方式可讓您獨立部署、擴充及更新元件,而不會破壞依附服務。
如要管理事件傳遞,您可以在使用 Eventarc Advanced 時定義註冊,或在使用 Eventarc Standard 時定義觸發條件。
架構總覽
事件導向架構是一種軟體設計模式,微服務會對狀態變更 (稱為「事件」) 做出反應。事件可以包含狀態 (例如商品價格或寄送地址),也可以是 ID (例如收到或出貨訂單的通知)。事件會觸發微服務,這些微服務會共同合作達成共同目標,但除了事件格式之外,不需要知道彼此的任何資訊。雖然各項微服務會共同運作,但每項微服務都可以套用不同的商業邏輯,並發出自己的輸出事件。
事件具有下列特性:
- 記錄已發生的事件。
- 它會擷取無法變更或刪除的不可變事實。
- 無論服務是否在取用時套用任何邏輯,都會發生這種情況。
- 可無限期、大規模保存,並視需要多次使用。
核心元件
在事件導向系統中,事件產生器、事件路由器和事件消費者這三個元件會彼此分離,可獨立部署、更新及擴充:
事件路由器會連結不同的服務,並做為傳送及接收訊息的媒介。它會執行對事件產生器產生的原始事件的回應,並將此回應向下游傳送給適當的消費者。事件會以非同步方式處理,其結果取決於服務對事件的反應或受事件影響的方式,如下圖所示,這是一個非常簡化的事件流程:
事件導向架構的使用時機
設計系統時,請考量下列用途。
- 監控並接收快訊:監控儲存空間 bucket、資料庫資料表、虛擬機器或其他資源,並在發生異常或變更時接收快訊。
- 將單一事件展開至多個消費者。事件路由器會將事件推送至所有適當的消費者,您不必編寫自訂程式碼。每項服務都能以不同方式平行處理事件。
- 在不同技術堆疊之間提供互通性,同時維持各堆疊的獨立性。
- 協調系統和團隊,在不同區域和帳戶中運作及部署。您可以重新整理微服務的擁有權。跨團隊依附關係較少,且您能更快速地因應變更,否則資料存取障礙會阻礙變更。
事件導向架構的優點
以上是建構事件導向架構的部分優點。
鬆耦合,提升開發人員靈活度
事件產生器與事件消費者在邏輯上是分開的。事件產生和取用作業之間的這種分離,意味著服務可以互通,但可以彼此獨立地擴充、更新和部署。
鬆耦合可減少依附元件,並讓您以不同的語言和架構實作服務。您可以新增或移除事件產生器和接收器,不必變更任何服務的邏輯。您不必編寫自訂程式碼來輪詢、篩選及轉送事件。
非同步事件和復原力
在事件導向系統中,事件是以非同步方式產生,且可在發生時發出,不需等待回應。鬆耦合元件代表某項服務失敗時,其他服務不會受到影響。如有需要,您可以記錄事件,讓接收服務從失敗點繼續執行,或重播過去的事件。
推送式訊息、即時事件串流,以及降低成本
事件導向系統允許推送式訊息,用戶端不需持續輪詢遠端服務來取得狀態變更,即可接收更新。這些推送的訊息可用於即時資料處理、轉換和分析。此外,輪詢次數減少,網路 I/O 也會降低,進而減少成本。
簡化稽核和事件溯源
事件路由器集中管理,可簡化稽核作業,並讓您控管哪些使用者可與路由器互動,以及哪些使用者和資源可存取資料。您也可以加密傳輸中和靜態資料。
此外,您也可以使用事件溯源,這是一種架構模式,可按照原本套用的順序,記錄對應用程式狀態所做的所有變更。事件溯源會提供不可變更的事件記錄,可保留用於稽核、重新建立歷來狀態,或做為解釋業務導向決策的標準敘述。
架構考量
事件導向架構可能需要您以新方式設計應用程式。雖然這項服務非常適合使用微服務或去耦元件的應用程式,但您也應考量下列事項:
如果需要處理每個事件,事件來源是否能保證傳送?
應為耐用且可靠的事件來源。
您的應用程式是否能處理多個非同步要求?
系統效能不應依賴全域範圍或不具彈性的資料庫。
您想如何追蹤事件流程?
事件導向架構支援使用監控服務進行動態追蹤,但不支援使用程式碼分析進行靜態追蹤。
您是否要使用事件來源中的資料重建狀態?
您應思考如何確保資料已簡化並排序。
後續步驟
- 如要瞭解 Eventarc Advanced 如何處理事件,請參閱「Eventarc Advanced 總覽」。
- 如要瞭解 Eventarc Standard 如何處理事件,請參閱「Eventarc Standard 總覽」。