当前位置: 首页 > news >正文

事件驱动架构入门

主要参考资料:
软件架构-事件驱动架构: https://blog.csdn.net/liuxinghao/article/details/113923639

目录

  • 简介
  • 事件队列
  • 事件日志
  • 事件收集器
  • 响应队列
  • 读事件 vs. 写事件

简介

事件驱动架构是一种系统或组件之间通过发送事件和响应事件彼此交互的架构风格。当某个事件发生时,组件A不直接调用组件B,而只是发出一个事件。组件A不知道哪些组件监听并处理这些事件。事件驱动架构可以在进程内和进程间使用。比如,GUI框架中会大量使用事件驱动。

事件队列

在事件驱动架构中,你会有一个或多个集中的事件队列,所有的事件被处理前,会先保存在集中的事件队列中。下面给出一个简单示例:
事件插入队列时是有序的,这样就可以顺序处理这些事件。
在这里插入图片描述

事件日志

写入事件队列时,消息可能写入到事件日志(通常是磁盘存储)中。如果发生系统崩溃,系统只需要重放事件日志即可恢复到崩溃前的状态。下面是一个事件驱动架构的示例,其中包括一个用于持久化事件的事件日志:
我们还可以通过备份事件日志,来备份系统状态。在将新版本的系统部署在生产环境之前,可以使用这个备份数据对其性能进行测试。或者,通过重放事件日志的备份,来重现某些错误。
在这里插入图片描述

事件收集器

请求都是通过网络传输,比如HTTP或者其他协议。为了保持一致,可以通过事件采集器接收来自不同来源的事件。下面是一个添加了事件收集器的事件驱动架构示例:
在这里插入图片描述

响应队列

有时,我们还需要向请求(即事件)返回响应,所以,很多事件驱动架构除了包含事件队列,还会有一个响应队列。下面是包含事件队列(入队队列)和响应队列(出队队列)的事件驱动架构示例:
如你所见,响应队列必须路由到正确的事件收集器。比如,如果HTTP收集器(本质上是web服务器)通过HTTP接收的请求发送到事件队列中,则该事件生成的响应可能也需要通过HTTP收集器发回客户端。

通常,响应队列不会持久化,也就意味着它不会写入事件日志,只有输入的事件才会持久化到事件日志中。
在这里插入图片描述

读事件 vs. 写事件

如果将所有传入的请求都认为是事件,就需要将这些事件都推送到事件队列中。如果事件队列是实现了持久化(持久化到事件日志中),就意味着所有事件都需要持久化。通常持久化都比较慢,如果我们能够过滤掉一些不需要持久化的事件,我们就能够提升队列的性能。

我们将事件持久化到事件日志的原因是,我们可以重放事件日志,并重建因为事件引起的系统状态变化。为了支持这个特性,实际上只需要持久化更改系统状态的事件。换句话说,我们只需要将事件分为读事件和写事件。读事件只读取系统数据,不会更改,写事件会更改系统数据。

通过根据读和写划分事件,我们只需要持久化写事件的消息即可。这将提升事件队列的性能,提升比例大小,取决于读写事件之间的比例。

为了将事件划分为读写事件,需要在事件到达事件队列之前,也就是事件收集器中进行区分。否则,事件队列无法知道到达的事件是否需要持久化。

还可以将事件队列拆分为两个,一个用于存储读事件的事件队列,一个用于存储写事件的事件队列。这样读事件就不会慢于写事件,事件队列也不需要检查每条事件是否需要持久化。读事件队列不需要进行持久化,写事件队列始终持久化事件。

下面是一个事件驱动架构的示例,其中事件队列分为读和写事件队列:
在这里插入图片描述

上图示例中箭头比较乱,但实际上创建3个队列并在它们之间分发消息简单很多。

相关文章:

  • PHP学习笔记(十一)
  • pikachu通关教程-CSRF XSS
  • 工厂方法模式(Factory Method)深度解析:从原理到实战优化
  • 智能教育个性化学习路径规划系统实战指南
  • mongodb集群之分片集群
  • vscode中让文件夹一直保持展开不折叠
  • 1. pytorch手写数字预测
  • 数据结构与算法之Josephu(约瑟夫环问题)
  • 预处理深入详解:预定义符号、宏、命名约定、命令行定义、条件编译、头文件的包含
  • JavaScript 性能优化实战研讨
  • 吴恩达MCP课程(1):chat_bot
  • 【仿生机器人】仿生机器人系统架构设计2.0——具备可执行性
  • 【仿生机器人系统设计】涉及到的伦理与安全问题
  • 京东热点缓存探测系统JDhotkey架构剖析
  • Python的Web框架
  • Linux分区与文件系统选择:EXT4与XFS深度解析
  • MCU STM32搭配存储SD NAND(贴片式T卡)于智能皮电手环(Galvanic Skin Response, GSR 手环)的全方位评测
  • SPL做量化----SRMI(动量修正指标)
  • Selenium操作指南(全)
  • 鸿蒙OSUniApp自定义手势识别与操作控制实践#三方框架 #Uniapp
  • 山东网站seo公司/网站百度百科
  • 御花园网站建设公司/线上培训课程
  • 凡科网建网站付费链接怎么做/厦门关键词seo排名网站
  • 网站开发岗位思维导图/东莞网站设计公司排名
  • 电子商务网站建设的心得/怎么进入百度推广账户
  • 资讯网站 怎么做/网游推广