事件導向架構是什麼?

事件導向架構 (EDA) 是讓機構能夠檢測「事件」或重要的業務時刻(例如交易、造訪網站、放棄購物車等),然後即時或近乎即時地為此採取行動的一種軟體設計模式。這種模式取代了傳統的「請求/回應」架構,在傳統架構中,服務必須等待回應後才能執行下一個任務。事件導向架構的流程則是以各個事件為主體,旨在回應這些事件或執行某些行動來回應事件。

事件導向架構圖

事件導向架構通常被稱為「非同步」通訊,這表示發送方和接收方不必等待對方回應,即可進行他們的下一個任務,各系統的運作並不取決於單一訊息。打電話就是一個同步通訊的例子,當有人致電給您和叫您做某事時,那位請求者必須等待您這位回應者完成任務,之後雙方才掛斷電話,這被認為是同步通訊或比較接近傳統的「請求/回應」架構。而文字簡訊則可當做非同步的例子,例如您發送一條簡訊,在某些情況下,您甚至不知道發送給誰或是否有人在聽,但您不必等待任何回應。

事件導向架構白皮書
在 Kafka,Pulsar 和其他消息傳遞技術之間進行選擇
如何選擇適合您業務的消息傳遞技術?請閱讀我們最新的白皮書以了解更多訊息。

事件驅動架構的演變

在過去幾年中,出現了從關注靜態數據(服務導向架構)到關注事件(事件導向架構)的轉變。我們正在從積累數據和資料湖,轉向關注動態數據,並在數據從一個地方移至另一個地方時,對這些數據進行追蹤。傳統上,大多數系統都是以您視之為以數據為中心的模型來運行,其中數據是事實的來源。朝向事件導向架構的轉變是指從以數據為中心的模型轉變為以事件為中心。在事件驅動模型中,數據仍然很重要,但事件才是最重要的元素。而在服務導向模型中,最高優先是確保您不會丟失任何數據。但對於事件導向架構,首要任務是確保您在事件發生時做出回應。因為當涉及到事件時,會出現一個報酬遞減法則,事件越老,它們的價值就越小。然而今天,服務導向架構和事件導向架構經常會一起搭配使用。

事件導向架構經常使用日誌類比來追蹤事物,分析師將事件視為已發生且不可改變的事情,如果您想弄清楚過去發生了什麼事,只要返回重播日誌即可。而在以數據為中心的模型中,您主要關注的是數據的當前狀態,然後分析師會使用最後一次類比,來描述以數據為中心和以事件為中心的架構之間有何差別,也就是他們經常在資訊儲存庫以及在企業內傳遞訊息的神經系統之間進行比較。

使用事件導向架構時,會有事件製作人產生和發送事件通知,一個事件可能有一或多個消費者,當他們收到事件之後就會發起邏輯處理。例如,Netflix 剛剛上傳一部新電影,可能有多個應用程式正在監聽或等待上傳通知,然後觸發他們自己的內部系統,向他們的用戶發布他們自己針對該事件的相關資訊。這與傳統「要求-應答」的訊息傳遞方式不同,因為即使應用程式可能正在監聽該事件,但在等待回答的同時並不是癱瘓不動,而是仍在運行中。而且,應用程式也能在發佈消息時同步做出回應,因此可以平行執行多項服務。

事件是什麼?

事件被定義為某些關鍵業務系統的狀態變化,例如某人購買一樣產品、另一人正在辦理登機手續、公共汽車較晚抵達某個地方等等事實。請仔細想想,事件無處不在,而且無論那個產業,都會不斷發生各種事件。它們存在於任何業務之中,包括因為生產、發佈、檢測或消費而建立訊息的任何情況都被視為事件。事件與訊息是分開的,因為事件是指發生的事,流通的通知則是傳達該事件的訊息。在事件導向架構中,事件可能會觸發一或多個動作或程序做為回應。事件的例子可能包括:

  • 請求重設密碼
  • 運送的包裹已送達目的地
  • 雜貨倉庫更新了庫存
  • 拒絕未經授權的存取嘗試

這些事件中的每一項都可能觸發一或多個動作或程序做為回應,回應可能只是簡單地記錄事件以供監測,也可能是:

  • 向客戶發送一封重設密碼的電子郵件
  • 關閉銷售訂單
  • 訂購更多生菜(或任何存量不足的食材)
  • 鎖定帳戶並通知安全人員

如果使用事件導向架構,則當發送事件通知時,系統會擷取已發生的事件內容,例如狀態改變,然後等待將回覆訊息發送給任何請求者,而不論請求者將在何時提出請求。已收到該訊息的應用程式可以直接回應,或直到它所等待的狀態出現變化為止再回應。

以事件導向架構建立的應用程式會更加敏捷、易擴充、呼應前後脈絡、更能對數位業務應用程式做出適當回應。

透過處理事件前後脈絡而能即時採取有效行動
透過處理事件前後脈絡而能即時採取有效行動
在我們最新的解決方案簡介中,了解 5 種事件處理方法,以及如何做出更好、更快、更明智的決策。

事件導向架構如何運作?

事件導向架構的組成包括三部分:生產者、消費者和中介者。中介者可有可無,特別是當您有單一生產者和單一消費者時,他們可以直接互相通訊,並且生產者只會將事件發送給該消費者。例如,生產者只發送訊息到資料庫或資料倉儲,以便收集和儲存事件內容以供分析。在企業中最常見的情況是,您有多個會發送所有類型事件的來源,並有一或多個消費者對於部份或全部的事件感興趣。

讓我們看一個例子。如果您是零售商,您可能會收集全球所有商店發生的所有購買事件。您將它們輸入到事件導向架構之中,此架構正在監視詐欺活動,若有發現便會將詐欺事件發送給信用卡處理商,或接著採取任何必要的行動。對於製造商而言,您可以從設備中獲取各種數據,這些數據會告訴您溫度和壓力等事實現況,因此您可以即時監控這些事件,並根據數據告訴您的內容,採取諸如預測故障點或安排維護之類的行動。