事件驅動架構應該說是一種非常流行的分布式架構模式,他的經常會被用在構建乙個可伸縮性的應用上,當然小型系統也同樣適用。
node用來表示乙個節點,每個節點負責處理業務邏輯,event表示這個節點處理完後產生的訊息,通過通過訊息中介軟體傳遞給另外乙個node。他不同於傳統的soa架構,rpc呼叫的方式,他是乙個pub-sub的模式,節點與節點間不需要知道對方的存在,每個節點只關心自己要處理的訊息,這個從耦合性上來說對比rpc呼叫是否非常低的,節點和節點之間不存在任何的依賴,通過mq進行訊息的中轉。這樣設計有哪些好處呢?大家有沒考慮過。
舉乙個例子來說,之前我們專案做的乙個送貨機械人他的業務流程是-使用者下單-》通知機械人前往貨櫃取貨-》貨櫃放貨-》取貨完成,通知機械人送貨-》下發驗證碼給使用者-》通知使用者取貨-》取貨完成,通知機械人前往充電。最早版本機械人、貨櫃、訂單排程系統直接走的是tcp私有協議rpc呼叫,整個業務流程訊息未走mq,直接通過rpc呼叫的方式進行互動。不知道大家有沒想過這裡面隱藏著很多的問題我們沒有去處理,我們是不同的系統走的tcp模式,在網路情況不穩定的時候,經常斷線,業務發起方經常要負責業務重試,由於沒有mq,需要去編碼訊息儲存,訊息重試這一塊的業務邏輯,工作量非常的大,效果還不好 。後邊我們採取了eda這種設計模式,在rpc後加入了mq的形式一下就解決了這個頭疼的問題。主要採取了以下的策略:1.訊息的傳送者在沒有收到對方的ack時會不斷的重試,直到對方返回ack結束。2.訊息接收者在收到訊息時,建訊息存入mq,成功後返回ack給訊息傳送者。3.訊息接收者從mq消費訊息,進行業務處理,產生新的訊息通過tcp rpc呼叫訊息處理者,如果出錯,不斷重試,直到消費者返回ack後,對mq的訊息進行ack,業務冪等處理。 這以上3點就是我在送貨機械人訂單排程模型的核心原則。
總結以上:
1.他保證了最終一致性(訊息鏈路斷開,不斷重試),mq保證訊息不丟失。
2.每乙個node節點都必須保證自己完成後才傳送ack給mq
3.node處理的訊息都能夠保證冪等性。
仔細思考,你會發現他其實就是eda事件驅動的架構模式。整個架構具有mq帶來的所有優點:非同步解耦、削峰、降低業務複雜度
EDA事件驅動架構
事件代表過去發生的事件,事件既是技術架構概念,也是業務概念。以事件為驅動的程式設計模型稱為事件驅動架構eda。eda是一種以事件為媒介,實現元件或服務之間最大松耦合的方式。傳統面向介面程式設計是以介面為媒介,實現呼叫介面者和介面實現者之間的解耦,但是這種解耦程度不是很高,如果介面發生變化,雙方 都需...
事件驅動eda
事件代表過去發生的事件,事件既是技術架構概念,也是業務概念。以事件為驅動的程式設計模型稱為事件驅動架構eda。eda是一種以事件為媒介,實現元件或服務之間最大松耦合的方式。傳統面向介面程式設計是以介面為媒介,實現呼叫介面者和介面實現者之間的解耦,但是這種解耦程度不是很高,如果介面發生變化,雙方 都需...
軟體架構 事件驅動架構
事件 event 就是狀態的顯著變化,比如說前面提到的客戶下單被執行。從 來分,事件可以分為系統內部事件和外部事件。從型別來分,可以分為業務事件和系統事件。事件驅動架構 event driven architecture,eda 乙個事件驅動框架 eda 定義了乙個設計和實現乙個應用系統的方法學,在...