什麼是事件驅動型架構?
事件驅動型架構將事件用來觸發解耦服務,並在解耦服務之間進行通訊,這在以微型服務建置的現代應用程式中很常見。事件是狀態的變更或更新,就好像電子商務網站上放置在購物車中的商品。事件可以帶有狀態 (購買的商品、商品價格和送貨地址),也可以是識別碼 (訂單已發貨的通知)。
事件驅動型架構具有三個關鍵元件:事件生產者、事件路由器和事件取用者。 生產者將事件發佈到路由器,路由器對事件進行篩選並將其推送給使用者。生產者服務和使用者服務是解耦的,這使它們可以獨立擴展、更新和部署。
如需深入了解,請查看我們的 AWS 線上技術講座系列,了解如何使用 Amazon EventBridge 建置解耦的事件驅動型架構。了解事件驅動型架構的基礎知識,並開始使用 Amazon EventBridge,包括建立事件匯流排、設定 SaaS 事件來源及其他內容。
事件驅動型架構的優勢
獨立擴展和失敗
將服務解耦之後,這些服務便僅能察覺事件路由器,不知道彼此的存在。這表示您的服務能互相操作,但若一項服務有故障,其餘仍能繼續運作。事件路由器可作為彈性緩衝區,容納暴增的工作負載。
敏捷開發
您再也不必為了事件的輪詢、篩選和路由編寫自訂程式碼,事件路由器可自動篩選事件,並向使用者推送。路由器還能免除生產者與使用者服務之間大量協調的需要,加快您的開發流程。
輕鬆稽核
事件路由器可作為集中位置,供您稽核應用程式,訂定原則。這些原則能限制誰能發佈和訂閱路由器,以及控制哪些使用者和資源具有權限,可存取您的資料。您也能為傳輸中和靜態的事件加密。
降低成本
事件驅動型架構是以推送為基礎,因此事件出現在路由器中時,一切皆隨需執行。如此一來,您就不必為了持續輪詢以檢查有無事件,而付出相關成本。因此,可使網路頻寬耗用量降低、CPU 利用率減少,閒置機群容量縮小,SSL/TLS 訊號交換也更少。
運作方式:架構範例
以下舉電子商務網站的事件驅動型架構為例。此架構讓該網站能在尖峰需求時刻因應出自各種來源的變化,不致損毀應用程式,亦未過度佈建資源。
利用此架構的時機
跨帳戶、跨區域的資料複製
您可使用事件驅動型架構,為團隊操作的系統、以及部署在各區域和帳戶之間的系統進行協調。藉由以事件路由器在系統之間傳輸資料,您可獨立於其他團隊,開發、擴展和部署服務。
資源狀態的監控和提醒
與其持續檢查資源,您可使用事件驅動型架構監控任何異常、變更和更新,並接收提醒。這些資源可以包含儲存貯體、資料庫表格、無伺服器函數、運算節點及其他項目。
散發和平行處理
如您有大量系統需要因應事件而操作,可使用事件驅動型架構散發事件,無需為了推送至各使用者而編寫自訂程式碼。路由器會將事件推送至系統,各自為不同的用途平行處理事件。
異質系統的整合
如您有在不同堆疊上執行的系統,可使用事件驅動型架構在之間共用資訊,無需耦合。事件路由器能在系統之間形成間接性與相互操作性,因此能夠交換訊息和資料,同時維持不相關。
您該採用事件驅動型架構嗎?
事件驅動型架構是提升敏捷性,迅速移動的理想選擇。在使用微型服務的現代應用程式,或有解耦元件的任何應用程式中經常存在。採用事件驅動型架構時,您可能需要重新思考對於應用程式設計的觀點。為奠定成功的基礎,請考慮以下事項:
• 事件來源的持久性。如您需要處理每一個事件,事件來源應當可靠,並且保證遞送。
• 您的效能控制需求。您的應用程式應當能夠應付事件路由器的非同步性。
• 您的事件流程追蹤。事件驅動型架構引入的間接性使得能夠經由監控服務而進行動態式追蹤,但無法經由程式碼分析進行靜態追蹤。
• 事件來源中的資料。如您需要重建狀態,應將事件來源刪除重複並且排序。
從哪裡開始
事件驅動型架構中使用的路由器主要有兩種:事件匯流排和事件主題。在 AWS,我們提供 Amazon EventBridge 以建立事件匯流排,並提供 Amazon Simple Notification Service (SNS) 以建立事件主題。
如果您要建立應用程式來回應 SaaS 應用程式、AWS 服務或自訂應用程式傳出的事件,建議您使用 Amazon EventBridge。EventBridge 為事件使用預先定義的結構描述,可讓您建立規則,套用至整個事件主體,在向使用者推送之前先行篩選。
如果您要建置應用程式來回應其他應用程式、微型服務或 AWS 服務所發佈的高輸送量與低延遲事件,或是需要極高散發量 (數千個或數百萬個端點) 的應用程式,則建議您使用 Amazon SNS。SNS 主題與流經的事件結構描述無關。