驱动架构
驱动架构
事件驱动架构
概述
事件驱动架构(Event-Driven Architecture,EDA)是一种软件架构模式,其中系统通过事件的生成、传递和处理来进行通信和工作。事件是系统中发生的动作或变化,可以是用户操作、传感器数据、系统状态改变等。
架构图:
优点:
- 解耦合:生产者和消费者通过事件代理进行通信,彼此不直接依赖。
- 扩展性:易于扩展,可以轻松添加新的事件生产者和消费者。
缺点:
- 复杂性:事件流和处理逻辑较复杂,需要仔细设计和管理。
- 一致性:处理异步事件时,需要额外考虑数据一致性和幂等性。
- 事件顺序性:需要额外的机制去保证事件的顺序性。
- 调试困难:由于系统是异步的,跟踪和调试问题可能更加困难。
组成部分
- 事件生产者(Event Producers):生成事件的实体,如用户操作、传感器、服务等。
- 事件代理(Event Brokers):负责接收、存储和分发事件的中间件,如Kafka、RabbitMQ等。
- 事件消费者(Event Consumers):处理和响应事件的实体,如服务、函数、微服务等。
- 事件流(Event Streams):事件在系统中流动的路径。
工作机制
- 事件生产:生产者生成事件并发送给事件代理。
- 事件分发:事件代理接收到事件后,根据订阅规则将事件分发给相应的消费者。
- 事件处理:消费者接收到事件后进行处理,并可能生成新的事件。
工作模式
- 生产者消费者模式:
- 异步回调模式:
- 发布订阅模式:
事件总线
事件驱动架构的核心是事件总线,在CloudEvents(事件通讯协议) 中,事件的生产者称为事件源,传输和存储事件的介质称为事件总线事件的消费者称为事件目标。事件由事件规则转换、匹配、聚合,并路由到事件目标,事件总线为了配合mq完成这一切而提出。
具体工作模式:
调停者模式:
在调停者模式中,事件总线充当调停者,负责接收和分发事件。它管理所有事件的路由逻辑,确定哪些事件应发送给哪些订阅者。调停者模式的关键在于中央调度逻辑,这种模式下的事件总线通常具有复杂的事件路由和管理能力。
管道模式:在管道模式中,事件总线充当消息的传递管道,负责事件的传输和简单的路由。不同于调停者模式,管道模式通常实现较为简单,事件生产者直接将事件发送到事件总线,而事件总线则将事件广播给所有订阅者。
请求驱动架构
请求驱动架构(Request-Driven Architecture)是一种软件架构模式,其中系统通过同步请求和响应的方式进行通信。请求是客户端向服务器发出的操作或查询。
架构图:
优点:
- 简单性:请求-响应模型较为直观,容易理解和实现。
- 同步处理:请求和响应是同步的,易于管理和调试。
- 数据一致性:通常是同步处理,数据一致性较容易保证。
缺点:
- 耦合度高:客户端和服务器直接通信,耦合度较高。
- 扩展性差:系统扩展性有限,特别是高并发情况下,并且需要保持同语言。
组成部分
- 客户端(Clients):发出请求的实体,如用户界面、移动应用、其他服务等。
- 服务器(Servers):接收请求并处理的实体,如Web服务器、应用服务器、数据库等。
- 网络(Network):客户端和服务器之间的通信介质。
工作机制
- 请求发出:客户端向服务器发送请求。
- 请求处理:服务器接收到请求后进行处理。
- 响应返回:服务器处理完成后返回响应给客户端。
总结
特性 | 事件驱动架构 | 请求驱动架构 |
---|---|---|
通信方式 | 异步 | 同步 |
解耦合 | 高 | 低 |
扩展性 | 好 | 一般 |
数据一致性 | 需要额外处理 | 容易保证 |
实现复杂度 | 高 | 低 |
调试难度 | 高 | 低 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 goMars的学习随记!
评论