一、介绍
1、事件驱动架构(Event Driven Architecture,EDA)
事件代表过去发生的事件,事件既是技术架构概念,也是业务概念。以事件为驱动的编程模型称为事件驱动架构EDA。
EDA是一种以事件为媒介,实现组件或服务之间最大松耦合的方式。传统面向接口编程是以接口为媒介,实现调用接口者和接口实现者之间的解耦,但是这种解耦程度不是很高,如果接口发生变化,双方代码都需要变动,而事件驱动则是调用者和被调用者互相不知道对方,两者只和中间消息队列耦合
2、 但是不代表使用了消息系统的架构都是EDA,SOA面向服务驱动的架构中也使用消息系统作为ESB
两者比较 三种不同的交互方式
时间驱动:比如cron定时计划执行
请求驱动:客户端和服务器端之间,常见SOA
事件驱动:以事件为特征。实时。
3、一个事件驱动框架(EDA)定义了一个设计和实现一个应用系统的方法学,在这个系统里事件可传输于松散耦合的组件和服务之间。
4、一个事件驱动系统典型地由事件消费者和事件产生者组成。事件消费者向事件管理器订阅事件,事件产生者向事件管理器发布事件。
5、当事件管理器从事件产生者那接收到一个事件时,事件管理把这个事件转送给相应的事件消费者。如果这个事件消费者是不可用的,事件管理者将保留这个事件,一段间隔之后再次转送该事件消费者。这种事件传送方法在基于消息的系统里就是:储存(store)和转送(forward)。
二、事件驱动的特点
1、构建一个包含事件驱动构架的应用程序和系统,会使这些应用程序和系统响应更灵敏,因为事件驱动的系统更适合应用在不可预知的和异步的环境里。
2、事件驱动架构在具体实现中是指由一系列相关组件构成的应用,而组件之间通过事件机制完成一定的业务功能。由于在一个EDA系统中各个组件都只专注于处理输入的消息与发布输出的消息,因而EDA系统能够更有加效地对管道化(pipelined)的、由多软件模块链接而成的并发事件流(concurrent processing of events)进行处理。
- 并发执行
- 事件触发/数据触发/时间规则触发
- 实时/增量响应
- 分布式事件系统处理
3、例子
- 生产者producer发生实时事件
- 推送通知
- 生产者发射即完成fire-and -orget
- 消费者consumer立即响应
- 事件与命令是有区别的
三、事件驱动架构优势
1、事件驱动设计和开发所提供的优势
1、EDA提高了对不断变化的业务需求的响应,最大限度地减少了对现有业务应用的影响,也常消除了对新打包应用的需要。如果采用特有的粗颗粒服务模型可以基于业务目标快速确定可控的业务变更,并直接、迅速、有效地实施变更以达到业务敏捷性和完整性。
2、可以更容易开发和维护大规模分布式应用程序和不可预知的服务或异步服务;
3、 可以很容易,低成本地集成、再集成、再配置新的和已存在的应用程序和服务。
4、 促进远程组件和服务的再使用,拥有一个更灵敏、没有Bug的开发环境。
2、从时间维度来看EDA的优势:
1、短期利益:更容易定制,因为设计对动态处理有更好的响应;
2、 长期利益:系统和组织的状态变得更精准,对实时变化的响应接近于同步。
四 A(请求驱动+消息系统)与B(事件驱动+消息系统)区别
1、A是由请求者作为消息生产者,主要目的是为了得到响应,因此是一种请求响应模型;
2、而B重点是在消息消费者,不是在消息生产者,业务逻辑站在消费者角度完成,业务逻辑的完成靠事件驱动来执行,而前者业务逻辑是在消息生产者完成,当业务逻辑中需要什么依赖或资源,依靠发送消息来拉取完成。
3、这两种区别本质是拉Poll和推Push的区别。
五、传统SOA 缺点和EDA 的优点
1、传统的SOA将业务领域逻辑切分成不同系统,对外表现为服务,这种方式导致业务逻辑跨越多个系统,导致业务逻辑散落各处,寻找维护不方便,造成业务逻辑的污染和膨胀。
2、使用EDA改造传统SOA,比如,如果一个报表系统想知道交易系统的状态,它不是发送一个消息给交易系统,拉取它当前的状态,而是向事件总线订阅,这样当交易系统有状态报告时,将发出事件通知报表系统。
3、EDA的可扩展性和吞吐量上要强于传统SOA