我是架构精进之路,点击上方“关注”,坚持天天为你分享技术干货,私信我回复“01”,送你一份程序员成长进阶大礼包。 程序员
事件驱动架构
事件驱动架构(Event Driven Architecture)是一个流行的分布式异步架构模式,能够用来设计规模很大的应用程序。基于这种架构模式应用可大可小。它由高度解耦的,单一目的的事件处理组件组成,能够异步地接收和处理事件。web
一个事件驱动系统典型地由事件消费者和事件产生者组成,事件消费者向事件管理器订阅事件,事件产生者向事件管理器发布事件。当事件管理器从事件产生者那接收到一个事件时,事件管理把这个事件转送给相应的事件消费者。若是这个事件消费者是不可用的,事件管理者将保留这个事件,一段间隔以后再次转送该事件消费者。设计模式
关键概念解释
事件:系统或组件的状态发生变化时,系统层发出的通知。微信
解耦方式:每一个对象都经过与中间件(Mediator or Broker)实现与外界的沟通,而不是相互依赖(迪米特法则)。架构
通信方式:以消息为载体、经过中间件传递通信。异步
拓扑结构分类
它包括两个主要的拓扑结构:mediator 和 broker。分布式
-
mediator拓扑结构性能
须要你在一个事件经过mediator时精心安排好几个步骤;学习
-
broker拓扑结构测试
无需mediator,而是由你串联起几个事件。
这两种拓扑架构的特征和实现有很大的不一样,因此你须要知道哪个适合你。
Mediator拓扑结构
Mediator拓扑结构适合有多个步骤的事件,须要安排处理层次。
采用Mediator模式的架构中,事件通常是复杂的(包含多个执行单元的合集),而Mediator的责任就是将该复合事件拆解为独立的子事件,而后发送到不一样类型的子事件处理系统中,由子系统完成独立子事件的分发和处理。
在结构上,Mediator的EDA架构包括4个组件:
-
event queues
用于原始事件(分类)存储,并转发给Event Mediator,通常是以MQ的形式存在。
-
event mediator
用于原始事件的拆解(成为多个独立子事件),并转发给相关的Channel;
-
event channels
通道(能够理解为细分的Event Queue),按照事件的类型不一样做以划分。它能够是一个消息队列,提供给特定的Processor查询,或是消息Topic,发送特定的广播。
-
event processors
事件处理器,监听特定的Channel,并在捕获事件后进行处理
Mediator的处理过程以下图所示:
-
客户端发送一个事件到事件队列(event queues)中,它用来将事件传送给event mediator;
-
Event mediator收到初始的事件后,会发送额外的一些异步事件给event channels来执行处理的每一个步骤;
-
Event channels 既能够是消息队列,也能够是消息topic,大部分是消息topic,这样能够由多个消息处理器(event processor)处理同一个消息。
-
Event processors监听event channels,接收事件并处理一些业务逻辑。
值得注意的是:
一、在事件驱动架构中有十几个甚至几百个事件队列都很正常。
二、模式自己没有限定事件队列的实现方式,它多是一个消息队列,一个web service或者其它;
三、消息处理器包含实际的业务逻辑。每一个消息处理器都是自包含的,独立的,高度解耦的,执行单一的任务。
Broker拓扑架构
Broker是一种更简洁的事件驱动架构,不一样于上面的结构,它没有中心的Mediator。
在结构上,Broker的EDA架构包括3个组件:
-
Event
事件消息;
-
Event Channel
消息队列或者是Topic,根据订阅推送(或是转发)消息;消息可能被转发到Event Processor,或是其余的Event Channel中。
-
Event Processor
得到消息后执行处理。它多是一个消息的处理终结点,也可能在处理过程当中继续下发消息,或生成新的事件,并被再次提交到Event Channel中,继续下一轮的转发和处理。
如图所示,它包含两个组件broker和 event processor。
-
broker中的event channel能够是消息队列,消息topic或者它们的复合形式。
-
每一个event processor负责处理事件,发布新的事件。
架构考量
事件驱动架构模式实现起来相对复杂,主要是因为它的异步和分布式特性。这可能会带来一些分布式的问题,好比远程处理的可用性,缺少响应,broker重连等问题。
一、分布式的异步架构
事件处理器之间高度解耦,软件的扩展性好,事件处理器能够独立地加载和卸载,容易部署,同时性能较好,由于事件的异步本质,软件不易产生堵塞。
二、对于单一的逻辑缺少原子事务
此模式须要将原子事务交给一个事件处理器执行,跨事件处理器的原子事务是很困难的,很难进行回滚操做。同时对于事件处理器的建立,维护和管理比较困难,事件一般有特殊的约定(数据值和格式)。
模式分析
结合上文分析,事件驱动架构设计模式总体分析以下:
-
整体灵活性: 高
-
发布易用性: 高
-
可测试性: 低
-
性能: 高
-
规模扩展性: 高
-
开发容易度: 低
- END -
做者:架构精进之路,专一软件架构研究,技术学习与我的成长,关注并私信我回复“01”,送你一份程序员成长进阶大礼包。
往期热文推荐:
「技术架构精进」专一架构研究,技术分享
Thanks for reading!
本文分享自微信公众号 - 架构精进之路(jiagou_jingjin)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。