事件驅動架構
事件驅動架構(Event Driven Architecture)是一個流行的分散式非同步架構模式,可以用來設計規模很大的應用程式。基於這種架構模式應用可大可小。它由高度解耦的,單一目的的事件處理元件組成,可以非同步地接收和處理事件。
一個事件驅動系統典型地由事件消費者和事件產生者組成,事件消費者向事件管理器訂閱事件,事件產生者向事件管理器釋出事件。當事件管理器從事件產生者那接收到一個事件時,事件管理把這個事件轉送給相應的事件消費者。如果這個事件消費者是不可用的,事件管理者將保留這個事件,一段間隔之後再次轉送該事件消費者。
關鍵概念解釋事件:系統或元件的狀態發生變化時,系統層發出的通知。
解耦方式:每個物件都透過與中介軟體(Mediator or Broker)實現與外界的溝通,而不是相互依賴(迪米特法則)。
通訊方式:以訊息為載體、透過中介軟體傳遞通訊。
拓撲結構分類它包括兩個主要的拓撲結構:mediator 和 broker。
mediator拓撲結構broker拓撲結構這兩種拓撲架構的特徵和實現有很大的不同,所以你需要知道哪一個適合你。
Mediator拓撲結構Mediator拓撲結構適合有多個步驟的事件,需要安排處理層次。
採用Mediator模式的架構中,事件一般是複雜的(包含多個執行單元的合集),而Mediator的責任就是將該複合事件拆解為獨立的子事件,然後傳送到不同型別的子事件處理系統中,由子系統完成獨立子事件的分發和處理。
在結構上,Mediator的EDA架構包括4個元件:
event channels通道(可以理解為細分的Event Queue),按照事件的型別不同作以劃分。它可以是一個訊息佇列,提供給特定的Processor查詢,或是訊息Topic,傳送特定的廣播。
event processors事件處理器,監聽特定的Channel,並在捕獲事件後進行處理
Mediator的處理過程如下圖所示:
客戶端傳送一個事件到事件佇列(event queues)中,它用來將事件傳送給event mediator;Event mediator收到初始的事件後,會發送額外的一些非同步事件給event channels來執行處理的每個步驟;Event channels 既可以是訊息佇列,也可以是訊息topic,大部分是訊息topic,這樣可以由多個訊息處理器(event processor)處理同一個訊息。Event processors監聽event channels,接收事件並處理一些業務邏輯。值得注意的是:
1、在事件驅動架構中有十幾個甚至幾百個事件佇列都很正常。
2、模式本身沒有限定事件佇列的實現方式,它可能是一個訊息佇列,一個web service或者其它;
3、訊息處理器包含實際的業務邏輯。每個訊息處理器都是自包含的,獨立的,高度解耦的,執行單一的任務。
Broker拓撲架構Broker是一種更簡潔的事件驅動架構,不同於上面的結構,它沒有中心的Mediator。
在結構上,Broker的EDA架構包括3個元件:
EventEvent ChannelEvent Processor如圖所示,它包含兩個元件broker和 event processor。
broker中的event channel可以是訊息佇列,訊息topic或者它們的複合形式。每個event processor負責處理事件,釋出新的事件。架構考量事件驅動架構模式實現起來相對複雜,主要是由於它的非同步和分散式特性。這可能會帶來一些分散式的問題,比如遠端處理的可用性,缺乏響應,broker重連等問題。
1、分散式的非同步架構
事件處理器之間高度解耦,軟體的擴充套件性好,事件處理器可以獨立地載入和解除安裝,容易部署,同時效能較好,因為事件的非同步本質,軟體不易產生堵塞。
2、對於單一的邏輯缺乏原子事務
此模式需要將原子事務交給一個事件處理器執行,跨事件處理器的原子事務是很困難的,很難進行回滾操作。同時對於事件處理器的建立,維護和管理比較困難,事件通常有特殊的約定(資料值和格式)。
模式分析結合上文分析,事件驅動架構設計模式整體分析如下:
總體靈活性: 高發布易用性: 高可測試性: 低效能: 高規模擴充套件性: 高開發容易度: 低- END -
Thanks for reading!