EDA事件驅動架構

2021-06-23 05:31:27 字數 1627 閱讀 7547

事件代表過去發生的事件,事件既是技術架構概念,也是業務概念。以事件為驅動的程式設計模型稱為事件驅動架構eda。

eda是一種以事件為媒介,實現元件或服務之間最大松耦合的方式。傳統面向介面程式設計是以介面為媒介,實現呼叫介面者和介面實現者之間的解耦,但是這種解耦程度不是很高,如果介面發生變化,雙方**都需要變動,而事件驅動則是呼叫者和被呼叫者互相不知道對方,兩者只和中間訊息佇列耦合。

事件驅動有以下特徵:

生產者producer發生實時事件

推送通知

生產者發射即完成fire-and -orget

消費者consumer立即響應

事件與命令是有區別的

借助訊息系統非同步模型的特點,事件驅動也有非同步特徵,傳統方法呼叫比如呼叫b.xxmethod()是一種同步模型,這時必須等待b的方法執行完才能繼續執行其他**,rpc遠端方法呼叫也是一種同步模型,而對於非同步模型來說,事件生產者發出事件後,不必等待回應,可以繼續執行下面的**。

但是不代表使用了訊息系統的架構都是eda,soa面向服務驅動的架構中也使用訊息系統作為esb,兩者使用方式不同,三種不同互動方式:

時間驅動:比如cron定時計畫執行

請求驅動:客戶端和伺服器端之間,常見soa

.事件驅動:以事件為特徵。實時。

請求驅動+訊息系統和事件驅動+訊息系統有本質區別,前者是由請求者作為訊息生產者,主要目的是為了得到響應,因此是一種請求響應模型;而後者重點是在訊息消費者,不是在訊息生產者,業務邏輯站在消費者角度完成,業務邏輯的完成靠事件驅動來執行,而前者業務邏輯是在訊息生產者完成,當業務邏輯中需要什麼依賴或資源,依靠傳送訊息來拉取完成。這兩種區別本質是拉poll和推push的區別。

正是因為eda這種和傳統soa的本質區別,現在誕生一種領域eda,其中包括cqrs

eventsourcing

領域事件等等。同時,傳統的soa將業務領域邏輯切分成不同系統,對外表現為服務,這種方式導致業務邏輯跨越多個系統,導致業務邏輯散落各處,尋找維護不方便,造成業務邏輯的汙染和膨脹。

使用eda改造傳統soa,比如,如果乙個報表系統想知道交易系統的狀態,它不是傳送乙個訊息給交易系統,拉取它當前的狀態,而是向事件匯流排訂閱,這樣當交易系統有狀態報告時,將發出事件通知報表系統:

eda的可擴充套件性和吞吐量上要強於傳統soa,eda類似組裝生產線,下圖對於乙個順序線性的處理過程,6個步驟分別是接受 確認 儲存 產生pdf 傳送email 輸出展現,花去365ms:

詳細的組裝線如下,這實際也是一種seda,staged eda:

最終我們可以完成乙個新的基於領域事件的d-eda+soa架構如下:

EDA事件驅動架構

事件驅動架構應該說是一種非常流行的分布式架構模式,他的經常會被用在構建乙個可伸縮性的應用上,當然小型系統也同樣適用。node用來表示乙個節點,每個節點負責處理業務邏輯,event表示這個節點處理完後產生的訊息,通過通過訊息中介軟體傳遞給另外乙個node。他不同於傳統的soa架構,rpc呼叫的方式,他...

事件驅動eda

事件代表過去發生的事件,事件既是技術架構概念,也是業務概念。以事件為驅動的程式設計模型稱為事件驅動架構eda。eda是一種以事件為媒介,實現元件或服務之間最大松耦合的方式。傳統面向介面程式設計是以介面為媒介,實現呼叫介面者和介面實現者之間的解耦,但是這種解耦程度不是很高,如果介面發生變化,雙方 都需...

軟體架構 事件驅動架構

事件 event 就是狀態的顯著變化,比如說前面提到的客戶下單被執行。從 來分,事件可以分為系統內部事件和外部事件。從型別來分,可以分為業務事件和系統事件。事件驅動架構 event driven architecture,eda 乙個事件驅動框架 eda 定義了乙個設計和實現乙個應用系統的方法學,在...