事件代表過去發生的事件,事件既是技術架構概念,也是業務概念。以事件為驅動的程式設計模型稱為事件驅動架構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事件驅動架構
事件代表過去發生的事件,事件既是技術架構概念,也是業務概念。以事件為驅動的程式設計模型稱為事件驅動架構eda。eda是一種以事件為媒介,實現元件或服務之間最大松耦合的方式。傳統面向介面程式設計是以介面為媒介,實現呼叫介面者和介面實現者之間的解耦,但是這種解耦程度不是很高,如果介面發生變化,雙方 都需...
EDA事件驅動架構
事件驅動架構應該說是一種非常流行的分布式架構模式,他的經常會被用在構建乙個可伸縮性的應用上,當然小型系統也同樣適用。node用來表示乙個節點,每個節點負責處理業務邏輯,event表示這個節點處理完後產生的訊息,通過通過訊息中介軟體傳遞給另外乙個node。他不同於傳統的soa架構,rpc呼叫的方式,他...
驅動python python實現事件驅動
eventmanager事件管理類實現,大概就百來行 左右。encoding utf 8 系統模組 from queue import queue,empty from threading import class eventmanager def init self 初始化事件管理器 事件物件列表...