架构模式-事件驱动架构-调度者拓扑

简介: 架构模式 事件驱动架构 调度者拓扑

我们今天来看下事件驱动架构,这个架构主要包括两种拓扑,调度者(Mediator)和代理(Broker)。我们今天主要看一下调度者拓扑。

 

事件驱动架构模式是一个非常流行的分布式异步架构模式,用来构建高度可扩展性高的应用程序。它也具有高度的适应性,并且可以用来构建小型应用和复杂的大型应用。事件驱动架构是由高度解耦,单一目的的事件处理组件组成,可以异步接收和处理事件。

 

 事件驱动架构模式主要有两个主要的拓扑组成,调度者和代理者。调度者拓扑通常当你需要中心化的调度者通过一个事件协调完成多个步骤的操作时使用,而代理者拓扑则当你想要完成事件链,但是不想要中心化的调度者时使用。由于这两种拓扑的架构特性和实现策略不同,所以对这两种拓扑的深入了解能够使你在具体的场景中能够更好的做出选择。

 

调度者拓扑

 

 当事件由多个步骤组成,且需要协调执行事件时,就是调度者拓扑的使用场景。例如:股票交易:一个股票交易事件可能需要:

  • 验证交易
  • 验证股票交易的各种规则
  • 将交易分配给代理人,并计算佣金
  • 最后再将交易放给代理人

这些步骤需要一定程度的协调以确定哪些步骤是顺序或并行执行。

 

 调度者拓扑有四个主要的架构组件:事件队列,事件调度者,事件通道,事件处理器。整个事件流以客户端发送一个事件到事件队列为起点,将事件传输到事件调度者。事件调度者接收到初始化事件后,通过发送额外的异步事件到事件通道来执行每一步的处理。事件处理器监听事件通道,接收来自事件调度者的事件,并执行事件的具体业务逻辑。下图展示了事件驱动架构中一般的调度者拓扑:

 3.jpg


 

 架构可能有上百个事件队列。事件驱动架构模式并指定执行事件队列组件的具体实现;事件对应可能是一个消息队列,WebService,或者两者的混合体。

 

 调度者拓扑有两种类型的事件:初始化事件和处理事件。初始化事件是调度者接收到的事件,处理事件是由调度者生成的,并由事件处理组件接收。

 

 事件调度者组件负责协调初始化事件涉及的所有子步骤。在初始化事件阶段,事件调度者发送具体的处理事件到事件通道,事件处理器接收到事件并处理它。注意:事件调度者并不执行业务逻辑去处理初始化事件,而是将初始化事件分解为多个子步骤/事件。

 

事件通道是用于事件调度者异步传递多个具体的处理事件到事件处理器。事件通道既可以是消息队列,也可以是消息主题,尽管消息主题被广泛用于调度者拓扑以满足处理事件能够被多个事件处理器处理(基于接收到的事件来执行不同的任务)。

 

 事件处理器组件包含处理事件所需要的应用业务逻辑。事件处理器是自我界定的,独立的,高度解耦的架构组件,在应用程序或系统中执行具体的任务(业务逻辑)。每个事件处理器可以有不同的业务粒度,细粒度(例如:计算订单的销售税),粗粒度(处理保险索赔)。重要:一个事件处理器应该处理单一的业务逻辑,并且不要依赖其他事件处理的来完成它的业务。

 

 事件调度者的实现可以有多种方式。作为架构师,你应该深入理解每个实现方式,以确保你选择的事件调度者能够满足你的业务需求。

 

 最简单和通用的事件调度者是使用开源组件,例如:Spring Integeration,Apache Camel 或者Mule ESB。在这些开源组件中,通过Java代码或者DSL实现了事件流。对于更复杂的调度和编排,你可以使用BPEL(业务流程执行语言)和BPEL引擎(如:开源Apche ODE)来完成。BPEL是类似于标准XML语言,来描述数据和初始化事件的处理步骤。对于大型应用如果需要更复杂的编排(包括人机交互的步骤),你可以使用业务流程管理来实现调度者,例如jBPM。

 

使用调度者拓扑的关键是理解你的需求并使用正确的调度者实现。使用开源组件来实现非常复杂的业务流程管理编排是一种错误的做法,就像使用BPM解决方案来执行简单的路由逻辑一样。

 


为了说明调度者拓扑是如何工作的,假设你通过保险公司投保,然后你需要搬家。在这种情况下,初始化事件可以称为搬家事件。调度者处理一个搬家事件的步骤可能包括下图内容:

4.jpg


在初始化事件步骤,事件调度者创建一个处理事件(例如:改变地址,重新计算价格等),发送处理事件到事件通道,并等待事件处理器将事件处理完成(例如:用户处理器,价格处理器等)。这些流程会一直持续直到初始化事件处理完成。每一个箭头代表这个这些步骤可以同步进行(比如:Recalc Quote和UpdateClaims)。

 

 以上内容即事件驱动架构的调度者拓扑,代理拓扑(Broker topology)将会在下一篇来说明。

目录
相关文章
|
18天前
|
设计模式 开发框架 前端开发
在开发框架中实现事件驱动架构
【9月更文挑战第2天】事件驱动架构(EDA)通过事件机制让组件间解耦交互,适用于动态扩展和高响应性的系统。本文提供一个基于Beego框架实现事件驱动的示例,通过事件管理器注册和触发事件,实现用户注册和登录时的不同处理逻辑,展示了其在Web应用中的灵活性和高效性。
50 5
|
25天前
|
消息中间件 存储 监控
Django后端架构开发:Celery异步调优,任务队列和调度
Django后端架构开发:Celery异步调优,任务队列和调度
38 1
|
1月前
|
弹性计算 监控 数据挖掘
事件驱动架构的优势与应用:深度解析与实战应用
【8月更文挑战第17天】事件驱动架构以其松耦合、可扩展性、异步处理、实时性和高可靠性等优势,在实时数据处理、复杂业务流程、弹性伸缩和实时通信等多个领域展现出巨大的应用潜力。通过合理应用事件驱动架构,可以构建灵活、可扩展和可维护的系统架构,满足不断变化的业务需求和技术挑战。对于开发者而言,深入理解事件驱动架构的核心概念和优势,将有助于更好地设计和实现高质量的软件系统。
|
1月前
|
运维 安全 SDN
网络拓扑设计与优化:构建高效稳定的网络架构
【8月更文挑战第17天】网络拓扑设计与优化是一个复杂而重要的过程,需要综合考虑多方面因素。通过合理的拓扑设计,可以构建出高效稳定的网络架构,为业务的顺利开展提供坚实的支撑。同时,随着技术的不断进步和业务需求的不断变化,网络拓扑也需要不断优化和调整,以适应新的挑战和机遇。
|
20天前
|
消息中间件 Kafka Java
Spring 框架与 Kafka 联姻,竟引发软件世界的革命风暴!事件驱动架构震撼登场!
【8月更文挑战第31天】《Spring 框架与 Kafka 集成:实现事件驱动架构》介绍如何利用 Spring 框架的强大功能与 Kafka 分布式流平台结合,构建灵活且可扩展的事件驱动系统。通过添加 Spring Kafka 依赖并配置 Kafka 连接信息,可以轻松实现消息的生产和消费。文中详细展示了如何设置 `KafkaTemplate`、`ProducerFactory` 和 `ConsumerFactory`,并通过示例代码说明了生产者发送消息及消费者接收消息的具体实现。这一组合为构建高效可靠的分布式应用程序提供了有力支持。
57 0
|
1月前
|
消息中间件 缓存 Kafka
混合云中的事件驱动架构
混合云中的事件驱动架构
31 4
|
2月前
|
消息中间件 监控 Java
在Java项目中实现事件驱动架构
在Java项目中实现事件驱动架构
|
2月前
|
消息中间件 缓存 架构师
对抗软件复杂度问题之降低代码的复杂度,如何解决
对抗软件复杂度问题之降低代码的复杂度,如何解决
|
23天前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器到微服务的架构演变
【8月更文挑战第29天】在数字化时代的浪潮下,云原生技术以其灵活性、可扩展性和弹性管理成为企业数字化转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者了解云原生的基本概念,探索容器化技术的奥秘,并深入微服务架构的世界。我们将一起见证代码如何转化为现实中的服务,实现快速迭代和高效部署。无论你是初学者还是有经验的开发者,这篇文章都会为你打开一扇通往云原生世界的大门。
|
7天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
18 3

热门文章

最新文章