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

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

我们今天来看下事件驱动架构,这个架构主要包括两种拓扑,调度者(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)将会在下一篇来说明。

目录
相关文章
|
1月前
|
消息中间件 监控 测试技术
事件驱动架构是一种编程范式
【10月更文挑战第7天】事件驱动架构是一种编程范式
107 65
|
1月前
|
消息中间件 运维 数据库
架构设计之解析CQRS架构模式!
架构设计之解析CQRS架构模式!
架构设计之解析CQRS架构模式!
|
1月前
|
存储 消息中间件 人工智能
ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用
本文整理自2024年云栖大会阿里云智能集团高级技术专家金吉祥的演讲《ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用》。
|
1月前
|
存储 设计模式 监控
事件驱动架构的实现方式?
【10月更文挑战第7天】事件驱动架构的实现方式?
42 7
|
14天前
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
23 0
|
1月前
|
前端开发 Java 测试技术
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
21 2
|
2月前
|
设计模式 开发框架 前端开发
在开发框架中实现事件驱动架构
【9月更文挑战第2天】事件驱动架构(EDA)通过事件机制让组件间解耦交互,适用于动态扩展和高响应性的系统。本文提供一个基于Beego框架实现事件驱动的示例,通过事件管理器注册和触发事件,实现用户注册和登录时的不同处理逻辑,展示了其在Web应用中的灵活性和高效性。
82 5
|
6天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
4天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
5天前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
16 1
服务架构的演进:从单体到微服务的探索之旅