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

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
应用实时监控服务-用户体验监控,每月100OCU免费额度
函数计算FC,每月15万CU 3个月
简介: 【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架构
的设计思想和这两者有一定程度的相似。

目录
相关文章
|
2天前
|
设计模式 监控 Java
分布式系统架构4:容错设计模式
这是小卷对分布式系统架构学习的第4篇文章,重点介绍了三种常见的容错设计模式:断路器模式、舱壁隔离模式和重试模式。断路器模式防止服务故障蔓延,舱壁隔离模式通过资源隔离避免全局影响,重试模式提升短期故障下的调用成功率。文章还对比了这些模式的优缺点及适用场景,并解释了服务熔断与服务降级的区别。尽管技术文章阅读量不高,但小卷坚持每日更新以促进个人成长。
22 11
|
4天前
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
33 11
|
13天前
|
存储 算法 安全
分布式系统架构1:共识算法Paxos
本文介绍了分布式系统中实现数据一致性的重要算法——Paxos及其改进版Multi Paxos。Paxos算法由Leslie Lamport提出,旨在解决分布式环境下的共识问题,通过提案节点、决策节点和记录节点的协作,确保数据在多台机器间的一致性和可用性。Multi Paxos通过引入主节点选举机制,优化了基本Paxos的效率,减少了网络通信次数,提高了系统的性能和可靠性。文中还简要讨论了数据复制的安全性和一致性保障措施。
31 1
|
26天前
|
人工智能 运维 算法
引领企业未来数字基础架构浪潮,中国铁塔探索超大规模分布式算力
引领企业未来数字基础架构浪潮,中国铁塔探索超大规模分布式算力
|
21天前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
39 8
|
28天前
|
Kubernetes Cloud Native Docker
云原生之旅:从传统架构到容器化服务的演变
随着技术的快速发展,云计算已经从简单的虚拟化服务演进到了更加灵活和高效的云原生时代。本文将带你了解云原生的概念、优势以及如何通过容器化技术实现应用的快速部署和扩展。我们将以一个简单的Python Web应用为例,展示如何利用Docker容器进行打包和部署,进而探索Kubernetes如何管理这些容器,确保服务的高可用性和弹性伸缩。
|
2月前
|
存储 消息中间件 人工智能
ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用
本文整理自2024年云栖大会阿里云智能集团高级技术专家金吉祥的演讲《ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用》。
|
2月前
|
消息中间件 Kafka 数据库
微服务架构中,如何确保服务之间的数据一致性?
微服务架构中,如何确保服务之间的数据一致性?
|
2月前
|
消息中间件 关系型数据库 Java
‘分布式事务‘ 圣经:从入门到精通,架构师尼恩最新、最全详解 (50+图文4万字全面总结 )
本文 是 基于尼恩之前写的一篇 分布式事务的文章 升级而来 , 尼恩之前写的 分布式事务的文章, 在全网阅读量 100万次以上 , 被很多培训机构 作为 顶级教程。 此文修改了 老版本的 一个大bug , 大家不要再看老版本啦。
|
2月前
|
存储 安全 API
单元化架构,分布式系统的新王!
【10月更文挑战第9天】
171 0
单元化架构,分布式系统的新王!
下一篇
DataWorks