驱动架构

事件驱动架构

概述

事件驱动架构(Event-Driven Architecture,EDA)是一种软件架构模式,其中系统通过事件的生成、传递和处理来进行通信和工作。事件是系统中发生的动作或变化,可以是用户操作、传感器数据、系统状态改变等。

架构图:

image-20240526114838747

优点:

  1. 解耦合:生产者和消费者通过事件代理进行通信,彼此不直接依赖。
  2. 扩展性:易于扩展,可以轻松添加新的事件生产者和消费者。

缺点:

  1. 复杂性:事件流和处理逻辑较复杂,需要仔细设计和管理。
  2. 一致性:处理异步事件时,需要额外考虑数据一致性和幂等性。
  3. 事件顺序性:需要额外的机制去保证事件的顺序性。
  4. 调试困难:由于系统是异步的,跟踪和调试问题可能更加困难。

组成部分

  1. 事件生产者(Event Producers):生成事件的实体,如用户操作、传感器、服务等。
  2. 事件代理(Event Brokers):负责接收、存储和分发事件的中间件,如Kafka、RabbitMQ等。
  3. 事件消费者(Event Consumers):处理和响应事件的实体,如服务、函数、微服务等。
  4. 事件流(Event Streams):事件在系统中流动的路径。

工作机制

  1. 事件生产:生产者生成事件并发送给事件代理。
  2. 事件分发:事件代理接收到事件后,根据订阅规则将事件分发给相应的消费者。
  3. 事件处理:消费者接收到事件后进行处理,并可能生成新的事件。

工作模式

  1. 生产者消费者模式:image-20240526115537491
  2. 异步回调模式:image-20240526115624366
  3. 发布订阅模式:image-20240526115652092

事件总线

事件驱动架构的核心是事件总线,在CloudEvents(事件通讯协议) 中,事件的生产者称为事件源,传输和存储事件的介质称为事件总线事件的消费者称为事件目标。事件由事件规则转换、匹配、聚合,并路由到事件目标,事件总线为了配合mq完成这一切而提出。

image-20240526120059633

具体工作模式:

  1. 调停者模式:

    在调停者模式中,事件总线充当调停者,负责接收和分发事件。它管理所有事件的路由逻辑,确定哪些事件应发送给哪些订阅者。调停者模式的关键在于中央调度逻辑,这种模式下的事件总线通常具有复杂的事件路由和管理能力。

    image-20240526120620942
  2. 管道模式:在管道模式中,事件总线充当消息的传递管道,负责事件的传输和简单的路由。不同于调停者模式,管道模式通常实现较为简单,事件生产者直接将事件发送到事件总线,而事件总线则将事件广播给所有订阅者。

    image-20240526120729022

请求驱动架构

请求驱动架构(Request-Driven Architecture)是一种软件架构模式,其中系统通过同步请求和响应的方式进行通信。请求是客户端向服务器发出的操作或查询。

架构图:

image-20240526114729037

优点:

  1. 简单性:请求-响应模型较为直观,容易理解和实现。
  2. 同步处理:请求和响应是同步的,易于管理和调试。
  3. 数据一致性:通常是同步处理,数据一致性较容易保证。

缺点:

  1. 耦合度高:客户端和服务器直接通信,耦合度较高。
  2. 扩展性差:系统扩展性有限,特别是高并发情况下,并且需要保持同语言。

组成部分

  1. 客户端(Clients):发出请求的实体,如用户界面、移动应用、其他服务等。
  2. 服务器(Servers):接收请求并处理的实体,如Web服务器、应用服务器、数据库等。
  3. 网络(Network):客户端和服务器之间的通信介质。

工作机制

  1. 请求发出:客户端向服务器发送请求。
  2. 请求处理:服务器接收到请求后进行处理。
  3. 响应返回:服务器处理完成后返回响应给客户端。

总结

特性 事件驱动架构 请求驱动架构
通信方式 异步 同步
解耦合
扩展性 一般
数据一致性 需要额外处理 容易保证
实现复杂度
调试难度