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:

  最终我们可以完成一个新的基于领域事件的D-EDA+SOA架构如下:

时间: 2024-11-09 09:01:59

EDA事件驱动架构的相关文章

SOA EDA 事件驱动架构 (Event-Driven Architecture,EDA) 简介

事件驱动架构 (Event-Driven Architecture,EDA) 简介 可以从两个方面来理解 EDA: EDA 是一种侧重于以生成/消费为基础的异步通信的架构模式.这主要对照于传统的基于线程的同步系统. EDA 是一种以事件 (event)为核心,提供事件产生,路由,消费已经结果回调等机制的架构模式. 简单地说, 面向服务架构 (Service-Oriented Architecture, SOA) 是一种 IT 架构策略,其基于面向服务的概念之上.自从 2002 开始为大家熟知以来

[转] EDA事件驱动架构

事件代表过去发生的事件,事件既是技术架构概念,也是业务概念.以事件为驱动的编程模型称为事件驱动架构EDA. EDA是一种以事件为媒介,实现组件或服务之间最大松耦合的方式.传统面向接口编程是以接口为媒介,实现调用接口者和接口实现者之间的解耦,但是这种解耦程度不是很高,如果接口发生变化,双方代码都需要变动,而事件驱动则是调用者和被调用者互相不知道对方,两者只和中间消息队列耦合. 事件驱动有以下特征: 生产者producer发生实时事件 推送通知 生产者发射即完成fire-and -orget 消费者

CQRS(命令查询职责分离)和 EDA(事件驱动架构)

转载CQRS(命令查询职责分离)和 EDA(事件驱动架构) 上一篇:<IDDD 实现领域驱动设计-SOA.REST 和六边形架构> 阅读目录: CQRS-命令查询职责分离 EDA-事件驱动架构 Domin Event-领域事件 Long-Running Process(Saga)-长时处理过程 Event Sourcing-事件溯源 CQRS Journey-微软示例项目 ENode-netfocus 实践项目 存在即是理由,每一种架构的产生都会有一种特定的场景,或者解决某一种实际应用问题,经

EDA: Event-Driven Architecture事件驱动架构

EDA: Event-Driven Architecture事件驱动架构 2009-09-24 17:28 5 赞  异步编程      软件架构      EDA事件驱动 SOA的核心是:暴露然后处理 expose and handle,SOA使事件Event跨系统流动 EDA是以事件为核心:什么时候触发 然后做什么.EDA是更加松散耦合,有极强的巨大事务处理能力 ESP—Event Stream Processing:监视事件数据流,分析这些事件.CEP—Complex Event Proc

后端开发实践系列之三——事件驱动架构(EDA)编码实践

在本系列的前两篇文章中,笔者分别讲到了后端项目的代码模板和DDD编码实践,在本文中,我将继续以编码实践的方式分享如何落地事件驱动架构. 单纯地讲事件驱动架构(Event Driven Architecture, EDA),那是几十年前就出现了的话题:单纯地讲领域事件,那也是这些年被大量提及并讨论得快熟透了的软件用语.然而,就笔者的观察看,事件驱动架构远没有想象中那样普遍地被开发团队所接受.即便搞微服务的人都知道除了同步的HTTP还有异步的消息机制,即便搞DDD的人都知道领域事件是其中的一等公民,

事件驱动架构(1)——《面向SOA的事件驱动架构设计与实现》阅读笔记

事件驱动架构基础元素: 1. 事件生产者(Event Producer) 2. 事件监听者(Event Listener) 3. 事件(Event):状态(State)变换产生事件. 4. 事件处理器(Event Processor) 5.事件反应器(Event Reaction) 6. 消息传递骨干(Messaging backbone) 7.消息流(Message Flow) 事件驱动架构类型: 1. 显式事件驱动.监听器登记在事件生产者端(类似监听模式).有存在耦合的缺点). 2. 隐式事

软件架构设计学习总结(22):软件架构——分层架构、事件驱动架构、微内核架构、微服务架构、基于空间的架构

分层架构 (Layered Architecture) 分层架构是最常见的架构,也被称为n层架构.多年以来,许多企业和公司都在他们的项目中使用这种架构,它已经几乎成为事实标准,因此被大多数架构师.开发者和软件设计者所熟知.比如MVC. 分层架构的一个特性就是 关注分离(separation of concerns) .在层中的组件只负责本层的逻辑.组件的划分很容易让它们实现自己的角色和职责,也比较容易地开发,测试管理和维护. 我们需要这样的冗余,即使业务层没有处理业务规则,也要通过业务层来调用数

事件驱动架构模式【其他模式】

事件驱动架构模式 public class EventDriven { /** * 事件驱动架构模式: * Send and notify state changes of your objects to other applications * using an Event-driven Architecture. * 使用事件驱动的架构来发送通知[此对象状态的变更]给应用程序中的其他组件,解耦了事件源和事件处理器. */ @Test public void all() { final Eve

事件驱动架构

事件驱动架构的几个要素 一,事件源 二,事件收集器 三,事件队列 四,事件转发器 五,事件处理器 事件驱动流程: 首先,各种不同的事件处理器都注册到事件转发器中 然后,事件源触发(比如一个秒杀请求进来)===> 事件收集器收集事件(将请求封装为秒杀事件),将事件扔到事件队列中===>单独的线程从事件队列中取出事件,事件转发器根据事件类型转发事件到对应的事件处理器,由事件处理器处理事件 事件驱动架构示意图 原文地址:https://www.cnblogs.com/moris5013/p/1223