1. 程式人生 > >【Architecture】EDA事件驅動架構

【Architecture】EDA事件驅動架構

轉自: http://www.jdon.com/eda.html

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

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

eda

  事件驅動有以下特徵:

  1. 生產者producer發生實時事件
  2. 推送通知
  3. 生產者發射即完成fire-and -orget
  4. 消費者consumer立即響應
  5. 事件與命令是有區別的

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

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

  1. 時間驅動:比如cron定時計劃執行
  2. 請求驅動:客戶端和伺服器端之間,常見SOA
  3. .事件驅動:以事件為特徵。實時。

  請求驅動+訊息系統和事件驅動+訊息系統有本質區別,前者是由請求者作為訊息生產者,主要目的是為了得到響應,因此是一種請求響應

模型;而後者重點是在訊息消費者,不是在訊息生產者,業務邏輯站在消費者角度完成,業務邏輯的完成靠事件驅動來執行,而前者業務邏輯是在訊息生產者完成,當業務邏輯中需要什麼依賴或資源,依靠傳送訊息來拉取完成。這兩種區別本質是拉Poll和推Push的區別。

  正是因為EDA這種和傳統SOA的本質區別,現在誕生一種領域EDA,其中包括CQRSEventSourcing 領域事件等等。同時,傳統的SOA將業務領域邏輯切分成不同系統,對外表現為服務,這種方式導致業務邏輯跨越多個系統,導致業務邏輯散落各處,尋找維護不方便,造成業務邏輯的汙染和膨脹。

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

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

而組裝線的EDA方式,總是詢問著6步中是否可以讓別人協同幫助完成?其中第4步和第5步是可以的,因此整個處理時間提升到115ms,提升了70%的響應時間:

詳細的組裝線如下,這實際也是一種SEDA,Staged EDA:

seda

  最終我們可以完成一個新的基於領域事件的D-EDA+SOA架構如下:

eda+soa


相關推薦

ArchitectureEDA事件驅動架構

轉自: http://www.jdon.com/eda.html 事件代表過去發生的事件,事件既是技術架構概念,也是業務概念。以事件為驅動的程式設計模型稱為事件驅動架構EDA。   EDA是一種以事件為媒介,實現元件或服務之間最大鬆耦合的方式。傳統面向介面程式設計是

JavaScript事件驅動到資料驅動

批處理   在多年以前,計算機程式通常是以批處理的模式執行。所謂批處理,就是開發者事先寫好一些程式碼,再將這些程式碼一次執行。這種處理方式有點類似於通過HTML程式碼直接編寫的網頁。瀏覽器只是將HTM

事件驅動架構模式其他模式

urn ase 程序 chan 應用 pat eof sta sin 事件驅動架構模式 public class EventDriven { /** * 事件驅動架構模式: * Send and notify state changes of y

到底什麼是事件驅動架構EDA?這篇文章講得比較清楚。

原文地址:https://www.jdon.com/49113 通過事件進行應用程式的設計是自20世紀80年代後期以來的一種實踐。我們可以在前端或後端的任何地方使用事件。當按下按鈕時,某些資料發生更改或執行某個後端動作。   但是事件究竟是什麼呢?我們什麼時候應該用它呢?缺點是

JavaScript事件支持先發布後訂閱

class 問題 想要 png trigger 很快 9.png area ++ 之前寫過一個的事件管理器,就是普通的先訂閱後發布模式。但實際場景中我們需要做到後訂閱的也能收到發布的消息。比如我們關註微信公眾號,還是能看到歷史消息的。類似於qq離線消息,我先發給你,你登錄了

總結遊戲框架與架構設計(Unity為例)

單機 業務 github 事件 概念 lec 集合 架構模式 wid 使用框架開發遊戲 優點:耦合性低,重用性高,部署快,可維護性高,方便管理。提高開發效率,降低開發難度 缺點:增加了系統結構和實現的復雜性,需要額外花費精力維護,不適合小型程序,易影響運行效率 常見

JS.JS事件處理函數中return的作用

檢測 也會 post 繼續 .cn add AR 當前 進行 1、js事件處理函數中return的作用 - AnswerCard - 博客園.html(https://www.cnblogs.com/answercard/p/5255230.html) 2、網頁內容保存:

Java加載驅動方法

set jdbc mysql manage setprop serve ros body java 1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 2. DriverManager.re

多研究些架構,少談些框架( 3 ):事件驅動架構

object 邏輯 查詢 同時 最新 order ring 手機 enc 接上篇,我們采用了領域驅動的開發方式,使用了充血模型,享受了他的好處,但是也不得不面對他帶來的弊端。這個弊端在分布式的微服務架構下面又被放大。 事務一致性 事務一致性的問題在Monolithic下面不

前端關於事件的程式碼片段

關於一些事件的程式碼片段: var button = document.getElementById('button') button.addEventListener('click', buttonClick); function buttonClick(e) { consol

程式STM32F407VE微控制器驅動Marvell 88W8801 WiFi模組的程式(20181010版)

本程式所用的微控制器型號為:STM32F407VE PD14埠為復位引腳(PDN),請務必連線! 晶振用的是8MHz,請注意檢查自己的開發板,看看晶振是不是8MHz。如果是25MHz,請修改system_stm32f4xx.c檔案! 程式支援連線無密碼的熱點以及WEP、

stm32f407SPI實驗 驅動W25Q128

                一.SPI介紹SPI是英語SerialPeripheral interface的縮寫,顧名思義就是序列外圍裝置介面。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI介面主要應用在EEPROM,FLASH,實時時鐘,AD轉換器,還有數字訊號處理器和數字訊號解碼

SparkSpark 訊息通訊架構

本篇結構: 前言 幾個重要概念 Spark RpcEnv Spark RpcEndpoint Spark RpcEndpointRef RpcEnv 和 RpcEndpoint 關係類圖 Dispatcher 和 Inbox Outbox 時序圖 一、前言

JavaScript未來事件的處理

author:咔咔 wechat:fangkangfk   對於後端來說,這個知識點估計有點生   像我們後端最常使用的就是列表進行分頁,然後進行js組裝資料,在這個時候最容易發生的事就是點選事件失效。這就是因為元素都是js動態生成的,所有需要使用未來事件

轉載資料中心網路架構淺談

資料中心網路架構淺談(一) - 肖巨集輝的文章 - 知乎 https://zhuanlan.zhihu.com/p/29881248 資料中心網路架構淺談(二) - 肖巨集輝的文章 - 知乎 https://zhuanlan.zhihu.com/p/29975418 資料中心網路架構淺談(三

福利百度Hadoop架構師教你學習大資料技術

近期很多人都在說想學習hadoop大資料,馬雲也說了:“未來最大的資源就是資料,不參與大資料十年後一定會後悔!” 目前騰訊的社交資料,百度的搜尋資料以及阿里的交易資料每天都是PB級別,都是公司最重要的資產。 鑑於此,推薦一位非常牛逼的Hadoop技術牛人:百度hadoop核心架構師,大資料團隊Lea

AngularJS事件--實現回車觸發的效果

前言  小編在接觸Angular的專案過程中,真得是邊除錯專案bug,邊探索邊成長著。下面小編將使用Angular js中的事件,實現回車觸發的效果。 一、第一種嘗試使用keydown    這種方

RESTfulYii2實現RESTful架構配置最佳實踐

Yii2實現RESTful架構配置最佳實踐 為什麼要用RESTful API 在伺服器端,應用程式狀態和功能可以分為各種資源。資源是一個有趣的概念實體,它向客戶端公開。資源的例子有:應用程式物件、資料庫記錄、演算法等等。每個資源都使用 URI (U

C#簡單三層架構(MVC)實現學生資訊管理

一個簡單的demo,程式碼不多,適合初學者。 三層架構分別是:表示層(UI)、業務邏輯層(NLL)、資料訪問層(DAL). 視訊講解教程: 微課7-1三層架構的搭建-----https://2d.hep.com.cn/47486/98 微課7-2顯示學生資訊--------htt

HTML5觸控事件(touchstart、touchmove和touchend)

touchstart事件:當手指觸控式螢幕幕時候觸發,即使已經有一個手指放在螢幕上也會觸發。 touchmove事件:當手指在螢幕上滑動的時候連續地觸發。在這個事件發生期間,呼叫preventDefault()事件可以阻止滾動。 touchend事件:當手指從