事件驱动作为分布式异步服务架构

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
云原生网关 MSE Higress,422元/月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 【6月更文挑战第25天】本文介绍事件驱动架构(EDA)是异步分布式设计的关键模式,适用于高扩展性需求。EDA提升服务韧性,支持CQRS、数据通知、开放式接口和事件流处理。然而,其脆弱性包括组件控制、数据交换、逻辑关系复杂性、潜在死循环和高并发挑战。EDA在云原生环境,如Serverless,中尤其适用。

1 简介

事件驱动架构模式是一种主流的异步分发事件架构模式,常用于设计高度可拓展的应用。当然了,它有很高的适应性,使得它在小型应用、大型应用、复杂应用中都能表现得很好。

该模式具有高度适应性的分布式异步体系结构,此模式最适合具有高可伸缩性的小型到大型应用程序。

由于事件处理器组件在此模式中彼此隔离,因此可以在不影响其他组件性能的情况下对组件进行更改。

此模式有两个主要结构: 中介和代理结构.

事件(Event)是状态发生变化时软件发出的通知,结构图可以直接查看本文末尾。

2 事件中介模式 Mediator结构

事件驱动架构(Event-driven Architecture)是通过事件进行通信的软件架构,它分成四个部分

事件队列 Event Queue  接收事件的入口
事件分发器 Event Mediator 将不同的事件分发到不同的业务逻辑单元
事件通道   Event Channel  分发器和处理器的联系通道
事件处理器 Event Processor  实现业务逻辑,处理完后发出事件触发下一步

当事件具有多个步骤需要通过中央处理器进行某种程度协调时,将使用中介器。
当用户将初始事件发送到事件队列时,初始事件将定向到事件中介器。

事件驱动包含两种结构:

   Mediator 用于多步骤事件需协调,由事件队列、分发器、通道和处理器组成;
   Broker 则直接代理事件,无中间分发。

接收初始事件将提示事件中介器发布处理事件并将其发送到事件通信,告诉它们开始执行每个步骤。
从事件通道接收处理事件的事件处理器包括执行处理初始事件所需的全部步骤的业务逻辑组件。

image.png

通常事件处理器组件只执行单个业务任务,不依赖其他事件处理器,这是由于已设置事件处理器与其他处理器同步运行。

对于简单的项目,事件队列、分发器和事件通道可以合为一体,整个软件就分成事件代理
和事件处理器两部分。

3 事件代理结构 Broker结构

代理模式用于事件不需要中介分发或协调事件的流程。代理结构有两个主要组件:

代理人
事件处理器

代理组件包含此事件流的所有事件通道。这些事件通道可以是消息队列、消息主题或两者的组合。

在代理拓扑中,事件处理器组件直接接收事件,并负责处理和发布新事件以指示事件已处理。

事件连续流经处理器组件链,直到不再为初始事件发布事件。

这种进程分布允许事件驱动的体系结构以最小的资源消耗运行大量并发连接。

image.png

4 优点

事件驱动架构(EDA,Event DrivenArchitecture)本质上是一种应用/组件间的集成架构模式。

事件和传统的消息不同,事件具有schema,所以可以校验event的有效性,同时EDA具备QoS保障机制,也能够对事件处理失败进行响应。事件驱动架构不仅用于(微)服务解耦,还
可应用于下面的场景中。

(1)增强服务韧性 

由于服务间是异步集成的,也就是下游的任何处理失败甚至宕机都不会被上游感知,自然也就不会对上游带来影响。

(2)CQRS(Command Query Responsibility Segregation):把对服务状态有影响的命令用事件来发起。而对服务状态没有影响的查询才使用同步调用的API接口;

结合EDA中的EventSourcing机制可以用于维护数据变更的一致性,当需要重新构建服务状态时,把EDA中的事件重新“播放”一遍即可。

(3)数据变化通知 

在服务架构下,往往一个服务中的数据发生变化,另外的服务会感兴趣,比如用户订单完成后,积分服务、信用服务等都需要得到事件通知并更新用户积分和信用等级。

(4)构建开放式接口

在EDA下,事件的提供者并不用关心有哪些订阅者,不像服务调用的场景——数据的产生者需要知道数据的消费者在哪里并调用它,因此保持了接口的开放性。

(5)事件流处理

应用于大量事件流(而非离散事件)的数据分析场景,典型应用是基于Kafka的日志处理。

基于事件触发的响应:在IoT时代大量传感器产生的数据,不会像人机交互一样需要等待处理结果的返回,天然适合用EDA来构建数据处理应用。

5 弱点

事件驱动架构的脆弱性主要表现在:

(1)组件的脆弱性。组件削弱了自身对系统的控制能力,一个组件触发事件,并不能确定
响应该事件的其他组件及各组建的执行顺序。

(2)组件间交换数据的脆弱性。组件不能很好地解决数据交换问题,事件触发时,一个
组件有可能需要将参数传递给另一个组件,而数据量很大的时候,如何有效传递是一个脆弱性
问题。

(3)组件间逻辑关系的脆弱性。事件架构使系统中各组件的逻辑关系变得更加复杂。

(4)事件驱动容易进入死循环,这是由编程逻辑决定的。

(5)高并发的脆弱性。虽然事件驱动可实现有效利用CPU资源,但是存在高并发事件处理
造成的系统响应问题,而且,高并发容易导致系统数据不正确、丢失数据等现象。

(6)固定流程的脆弱性。因为事件驱动的可响应流程基本都是固定的,如果操作不当,容
易引发安全问题,

6 小结

事件驱动架构是一种流行的分布式异步架构,是一种适合高扩展工程的、较流行的分布式
异构架构模式,有较高柔性,它由高度解耦、单一目的异步接收的事件处理组件和处理事件组
成。

事件驱动架构通常有两种拓扑结构:Mediator结构和Broker结构,

Mediator结构通常适用于事件的多个步骤需要通过中间角色来指挥和协调的情形。

Broker结构适用于事件是链式关系而不需要中间角色的情形。

云原生应用Serverless非常适合于事件驱动的数据计算任务、计算时间短的请求/响应应用、没有复杂相互调用的长周期任务。

云原生Lambda架构的诞生离不开很多现有设计思想和架构的铺垫,如事件溯源(Event Sourcing)
架构和命令查询分离(Command Query Responsibility Segregation,CQRS)架构,Lambda架构
的设计思想和这两者有一定程度的相似。

目录
相关文章
|
1月前
|
Cloud Native Java API
聊聊从单体到微服务架构服务演化过程
本文介绍了从单体应用到微服务再到云原生架构的演进过程。单体应用虽易于搭建和部署,但难以局部更新;面向服务架构(SOA)通过模块化和服务总线提升了组件复用性和分布式部署能力;微服务则进一步实现了服务的独立开发与部署,提高了灵活性;云原生架构则利用容器化、微服务和自动化工具,实现了应用在动态环境中的弹性扩展与高效管理。这一演进体现了软件架构向着更灵活、更高效的方向发展。
|
2月前
|
存储 Linux KVM
Proxmox VE (PVE) 主要架构和重要服务介绍
Proxmox VE (PVE) 是一款开源的虚拟化平台,它基于 KVM (Kernel-based Virtual Machine) 和 LXC (Linux Containers) 技术,支持虚拟机和容器的运行。PVE 还提供高可用集群管理、软件定义存储、备份和恢复以及网络管理等企业级功能。
1073 7
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
1月前
|
消息中间件 监控 测试技术
事件驱动架构是一种编程范式
【10月更文挑战第7天】事件驱动架构是一种编程范式
108 65
|
28天前
|
运维 供应链 安全
SD-WAN分布式组网:构建高效、灵活的企业网络架构
本文介绍了SD-WAN(软件定义广域网)在企业分布式组网中的应用,强调其智能化流量管理、简化的网络部署、弹性扩展能力和增强的安全性等核心优势,以及在跨国企业、多云环境、零售连锁和制造业中的典型应用场景。通过合理设计网络架构、选择合适的网络连接类型、优化应用流量优先级和定期评估网络性能等最佳实践,SD-WAN助力企业实现高效、稳定的业务连接,加速数字化转型。
SD-WAN分布式组网:构建高效、灵活的企业网络架构
|
1月前
|
存储 消息中间件 人工智能
ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用
本文整理自2024年云栖大会阿里云智能集团高级技术专家金吉祥的演讲《ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用》。
|
1月前
|
消息中间件 Kafka 数据库
微服务架构中,如何确保服务之间的数据一致性?
微服务架构中,如何确保服务之间的数据一致性?
|
1月前
|
消息中间件 关系型数据库 Java
‘分布式事务‘ 圣经:从入门到精通,架构师尼恩最新、最全详解 (50+图文4万字全面总结 )
本文 是 基于尼恩之前写的一篇 分布式事务的文章 升级而来 , 尼恩之前写的 分布式事务的文章, 在全网阅读量 100万次以上 , 被很多培训机构 作为 顶级教程。 此文修改了 老版本的 一个大bug , 大家不要再看老版本啦。
|
1月前
|
存储 设计模式 监控
事件驱动架构的实现方式?
【10月更文挑战第7天】事件驱动架构的实现方式?
45 7
|
1月前
|
存储 安全 API
单元化架构,分布式系统的新王!
【10月更文挑战第9天】
117 0
单元化架构,分布式系统的新王!
下一篇
无影云桌面