首页 > 其他分享 >事件驱动系统设计之将事件检索与事件处理解耦

事件驱动系统设计之将事件检索与事件处理解耦

时间:2024-08-12 23:05:27浏览次数:11  
标签:检索 事件处理 事件驱动 响应 API 线程 事件

0 前言

part1讨论了集成过程中遇到的挑战以及幂等事件处理的作用。解决集成问题之后,我们需要反思事件检索的问题。我们的经验教训表明,将事件检索与事件处理解耦至关重要。

1 事件处理与请求/响应 API 紧耦合

part1讨论了将请求/响应 API 集成到事件驱动微服务中时,由于基于请求/响应的通信,导致紧耦合。单个事件的处理速度取决于请求/响应 API 及其响应时间,因为事件处理会阻塞直到收到响应。

像我们在part1中使用的简单事件循环实现或 AWS SQS Java Messaging Library 中的工作示例,会顺序处理事件。

不推荐这种方法,因为整体处理时间是所有单个处理时间的总和。

2 并发处理事件

幸运的是,像 Spring Cloud AWS 这种库提供支持并发处理事件的更高效实现。属性 ALWAYS_POLL_MAX_MESSAGES 的行为在下图概述:并发事件处理

检索到一批事件后,每个事件在一个单独的线程中并发处理。当所有线程完成处理后,将检索下一批事件。由于基于请求/响应的通信导致的紧耦合,可能使事件处理速度不同。较快的线程会在较慢的线程处理事件时处于等待状态。因此,一批事件的处理时间对应于处理最慢的事件的时间。

当事件顺序不重要时,并发处理可以是一个合理的默认设置。但根据经验,某些情况下,事件处理可进一步优化。当单个事件的处理时间差异较大时,线程可能长时间处于等待状态。

如集成了一个性能波动较大的请求/响应 API。平均而言,该 API 在 0.5s 后响应。但第 95 百分位和第 99 百分位值经常分别为 1.5s 和超过 10s。在这种并发事件处理方式中,由于响应缓慢的 API,线程经常会等待几s,然后才能处理新事件。

3 将事件检索与事件处理解耦

即可进一步优化事件处理。这样,处理时间较长的单个事件不会减慢其他事件的处理速度。Spring Cloud AWS 提供了 FIXED_HIGH_THROUGHPUT 属性,展示了这种解耦可能的实现方式。

具体描述如下。详细信息可在文档中找到。

解耦的事件处理策略:

为此,定义一个额外属性,用于在两次事件检索之间的最大等待时间。当所有事件已处理完毕或等待时间已过期时,将检索新事件。若在等待时间过期后,如一个事件仍未处理完毕,则会提前接收九个新事件,并可以开始处理。这意味着这九个线程不会等到最后一个事件处理完毕后才开始工作。

根据经验,如果等待时间和其他参数配置得当,解耦可提高单个线程的利用率。一个可能缺点,由于事件往往以更频繁但较小批次的方式被检索,因此可能增加成本。因此,了解 API 性能特征,对于在并发和解耦事件处理之间做出选择至关重要。

4 结论

当你将事件驱动微服务与请求/响应 API 集成时,会引入紧耦合。请求/响应 API 的性能特征很重要,因为它们有助于你在并发和解耦事件处理之间做出选择。

本文重点讨论了请求/响应 API 的请求时间性能及其如何影响事件驱动微服务的性能。

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
  • LLM Agent应用开发
  • 区块链应用开发
  • 大数据开发挖掘经验
  • 推荐系统项目

目前主攻市级软件项目设计、构建服务全社会的应用系统。

参考:

本文由博客一文多发平台 OpenWrite 发布!

标签:检索,事件处理,事件驱动,响应,API,线程,事件
From: https://www.cnblogs.com/JavaEdge/p/18355900

相关文章

  • 事件驱动架构在云时代为什么会再次流行呢?
    事件驱动架构在云时代为什么会再次流行呢?什么是事件驱动架构(EDA)事件驱动架构与消息再度流行的事件驱动架构作为一个经典架构模式,在全行业数字化转型的时代,事件驱动架构(EDA)应用范围扩大,成为Gartner年度十大技术趋势。在新型的数字化商业解决方案里,会有60%采纳EDA......
  • Java中的异步编程模型与事件处理框架:从CompletableFuture到Reactive Streams
    Java中的异步编程模型与事件处理框架:从CompletableFuture到ReactiveStreams大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代软件开发中,异步编程和事件驱动架构变得越来越重要。它们能有效提高应用程序的性能和响应速度,特别是在处理高并发和I......
  • 008.Vue3入门,最基础的事件处理,点击按钮增加次数,支持传参
    1、代码如下:<template><h3>内联事件处理群</h3><button@click="addCount1">Add</button><p>{{count1}}</p><button@click="addCount2('hello')">按钮</button><p>{{coun......
  • 【ACM出版,见刊检索快速稳定】第四届物联网与机器学习国际学术会议(IoTML 2024,8月23-25)
    2024年第四届物联网与机器学习国际学术会议(IoTML2024)将于2024年8月23-25日在中国南昌召开。会议将围绕着物联网和机器学习开展,探讨本领域发展所面临的关键性挑战问题和研究方向,以期推动该领域理论、技术在高校和企业的发展和应用,为专注于该研究领域的创新学者、工程师和......
  • 1.14 - 信息检索:TF-IDF/BM25,原理+代码
    1.TF-IDF1.1原理1.1.1名词解释 TF:词频,某token在文档中出现的次数越多,则这个token的特征越能代表这篇文档自身的独特特征。计算:token出现次数/文档总token数IDF:逆文档频率,如果某个token在所有文档中都出现,那么这个token对于区分这些文档的特征最没有帮助。计算:1......
  • LLM大模型:LLaVa多模态图片检索原理
    训练安全垂直领域的LLM,会用到很多著名安全论坛(52pojie\kanxue\xianzhi\freebuf等)、博客的数据,这些数据100%都有很多图片(文不如图嘛,图片比文字更直观,更容易表达业务意义),之前微调LLM只能使用文字,图片只能丢弃,非常可惜,需要利用多模态的技术充分提取图片信息! 1、以前做传......
  • 【ACM出版,高录用,快检索!】第二届物联网与云计算技术国际学术会议 (IoTCCT 2024,9月27-29
    第二届物联网与云计算技术国际学术会议(IoTCCT2024)将围绕“物联网与云计算技术”领域,为来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、工程师等提供一个分享专业经验,扩大专业网络,面对面交流新思想以及展示研究成果的国际平台,探讨本领域发展所面临的关......
  • 使用LlamaIndex和GPT-4V进行多模态图像检索
    在本文中,我们将演示如何使用LlamaIndex结合GPT-4V和CLIP来实现图像到图像的检索。该过程包括从维基百科下载图像和文本,构建多模态索引,利用GPT-4V进行图像相关性推理,并展示检索结果。步骤1.安装所需的库%pipinstallllama-index-multi-modal-llms-openai%pipinstalll......
  • 【ACM独立出版 | EI&Scopus检索稳定 | 高录用】2024年数字经济,区块链与人工智能国际学
    2024年数字经济,区块链与人工智能国际学术会议(DEBAI2024)为第五届大数据与社会科学国际学术会议(ICBDSS2024)的分会,将于2024年8月23-25日在中国-广州隆重举行。为了让更多的学者有机会参与会议分享交流经验。本次会议主要围绕“数字经济,区块链与人工智能等研究领域展开讨论......
  • 构建基于检索但具有对话元素的聊天机器人
    我正在寻求用Python创建一个基于足球统计的非常小的聊天机器人。就个人经验而言,我在银行业担任开发人员并拥有IT背景,但是我对Python相对较新,所以还在学习语法。我了解OOP语言的概念,所以它对我来说并不陌生。我正在寻找与我的聊天机器人类似的对话流程:“莱昂......