【Architecture】EDA事件驅動架構
轉自: http://www.jdon.com/eda.html
事件代表過去發生的事件,事件既是技術架構概念,也是業務概念。以事件為驅動的程式設計模型稱為事件驅動架構EDA。
EDA是一種以事件為媒介,實現元件或服務之間最大鬆耦合的方式。傳統面向介面程式設計是以介面為媒介,實現呼叫介面者和介面實現者之間的解耦,但是這種解耦程度不是很高,如果介面發生變化,雙方程式碼都需要變動,而事件驅動則是呼叫者和被呼叫者互相不知道對方,兩者只和中間訊息佇列耦合。
事件驅動有以下特徵:
- 生產者producer發生實時事件
- 推送通知
- 生產者發射即完成fire-and -orget
- 消費者consumer立即響應
- 事件與命令是有區別的
藉助訊息系統非同步模型的特點,事件驅動也有非同步特徵,傳統方法呼叫比如呼叫b.xxmethod()是一種同步模型,這時必須等待b的方法執行完才能繼續執行其他程式碼,RPC遠端方法呼叫也是一種同步模型,而對於非同步模型來說,事件生產者發出事件後,不必等待迴應,可以繼續執行下面的程式碼。
但是不代表使用了訊息系統的架構都是EDA,SOA面向服務驅動的架構中也使用訊息系統作為ESB,兩者使用方式不同,三種不同互動方式:
- 時間驅動:比如cron定時計劃執行
- 請求驅動:客戶端和伺服器端之間,常見SOA
- .事件驅動:以事件為特徵。實時。
請求驅動+訊息系統和事件驅動+訊息系統有本質區別,前者是由請求者作為訊息生產者,主要目的是為了得到響應,因此是一種請求響應
正是因為EDA這種和傳統SOA的本質區別,現在誕生一種領域EDA,其中包括CQRSEventSourcing 領域事件等等。同時,傳統的SOA將業務領域邏輯切分成不同系統,對外表現為服務,這種方式導致業務邏輯跨越多個系統,導致業務邏輯散落各處,尋找維護不方便,造成業務邏輯的汙染和膨脹。
使用EDA改造傳統SOA,比如,如果一個報表系統想知道交易系統的狀態,它不是傳送一個訊息給交易系統,拉取它當前的狀態,而是向事件匯流排訂閱,這樣當交易系統有狀態報告時,將發出事件通知報表系統:
EDA的可擴充套件性和吞吐量上要強於傳統SOA,EDA類似組裝生產線,下圖對於一個順序線性的處理過程,6個步驟分別是接受 確認 儲存 產生PDF 傳送Email 輸出展現,花去365ms:
而組裝線的EDA方式,總是詢問著6步中是否可以讓別人協同幫助完成?其中第4步和第5步是可以的,因此整個處理時間提升到115ms,提升了70%的響應時間:
詳細的組裝線如下,這實際也是一種SEDA,Staged EDA:
最終我們可以完成一個新的基於領域事件的D-EDA+SOA架構如下:
相關推薦
【Architecture】EDA事件驅動架構
轉自: 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、
【stm32f407】SPI實驗 驅動W25Q128
一.SPI介紹SPI是英語SerialPeripheral interface的縮寫,顧名思義就是序列外圍裝置介面。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI介面主要應用在EEPROM,FLASH,實時時鐘,AD轉換器,還有數字訊號處理器和數字訊號解碼
【Spark】Spark 訊息通訊架構
本篇結構: 前言 幾個重要概念 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
【Angular】JS事件--實現回車觸發的效果
前言 小編在接觸Angular的專案過程中,真得是邊除錯專案bug,邊探索邊成長著。下面小編將使用Angular js中的事件,實現回車觸發的效果。 一、第一種嘗試使用keydown 這種方
【RESTful】Yii2實現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事件:當手指從