消息中间件主要作用

news2025/1/18 20:10:02

946b743311d7464aab337ff96452fead.gif

 

 

首先我们想一下,两个公司之间如果有互相调用接口的业务需求,如果没有引入中间件技术,是怎么实现的呢?

 

 

 

用户发起请求给系统A,系统A接到请求直接调用系统B,系统B返回结果后,系统A才能返回结果给用户,这种模式就是同步调用。

 

 

 

所谓同步调用就是各个系统之间互相依赖,一个系统发送请求,其他系统也会跟着依次进行处理,只有所有系统处理完成后对于用户来讲才算完成了一次请求。只要其他系统出现故障,就会报错给用户。

 

 

 

那么引入中间件后,是如何做到异步调用的呢?

 

 

 

用户发起请求给系统A,此时系统A发送消息给MQ,然后就返回结果给用户,不去管系统B了。然后系统B根据自己的情况,去MQ中获取消息,获取到消息的时候可能已经过了1分钟甚至1小时,再根据消息的指示执行相应的操作。

 

那么想一想,系统A和系统B互相之间是否有通信?这种调用方式是同步调用吗?

 

系统A发送消息给中间件后,自己的工作已经完成了,不用再去管系统B什么时候完成操作。而系统B拉去消息后,执行自己的操作也不用告诉系统A执行结果,所以整个的通信过程是异步调用的。

 

 

 

说到这里,我们可以做个总结,消息中间件到底是什么呢?

 

其实消息中间件就是一个独立部署的系统。可以实现各个系统之间的异步调用。当然它的作用可不止这些,通过它可以解决大量的技术痛点,我们接下来会进行介绍。

 

 

 

消息中间件,总结起来作用有三个:异步化提升性能、降低耦合度、流量削峰。

 

 

 

异步化提升性能

 

先来说说异步化提升性能,上边我们介绍中间件的时候已经解释了引入中间件后,是如何实现异步化的,但没有解释具体性能是怎么提升的,我们来看一下下边的图。

 

 

 

 

 

 没有引入中间件的时候,用户发起请求到系统A,系统A耗时20ms,接下来系统A调用系统B,系统B耗时200ms,带给用户的体验就是,一个操作全部结束一共耗时220ms。

 

如果引入中间件之后呢?看下边的图。

 

 

 

 

 

 用户发起请求到系统A,系统A耗时20ms,发送消息到MQ耗时5ms,返回结果一共用了25ms,用户体验一个操作只用了25ms,而不用管系统B什么时候去获取消息执行对应操作,这样比较下来,性能自然大大提高

 

 

 

降低耦合度

 

再来聊聊解耦的场景,看下图。

 

 

 

 

 

如果没有引入中间件,那么系统A调用系统B的时候,系统B出现故障,导致调用失败,那么系统A就会接到异常信息,接到异常信息后肯定要再处理一下,返回给用户失败请稍后再试,这时候就得等待系统B的工程师解决问题,一切都解决好后再告知用户可以了,再重新操作一次吧。

 

这样的架构,两个系统耦合再一起,用户体验极差。

 

那么我们引入中间件后是什么样的场景呢,看下面的流程:

 

 

 

 对于系统A,发送消息后直接返回结果,不再管系统B后边怎么操作。而系统B故障恢复后重新到MQ中拉取消息,重新执行未完成的操作,这样一个流程,系统之间没有影响,也就实现了解耦。

 

 

 

流量削峰

 

下面我们再聊聊最后一个场景,流量削峰

 

 

 

 

 

假如我们的系统A是一个集群,不连接数据库,这个集群本身可以抗下1万QPS

 

系统B操作的是数据库,这个数据库只能抗下6000QPS,这就导致无论系统B如何扩容集群,都只能抗下6000QPS,它的瓶颈在于数据库。

 

假如突然系统QPS达到1万,就会直接导致数据库崩溃,那么引入MQ后是怎么解决的呢,见下图:

 

 

 

 

 

 引入MQ后,对于系统A没有什么影响,给MQ发送消息可以直接发送1万QPS。

 

此时对于系统B,可以自己控制获取消息的速度,保持在6000QPS一下,以一个数据库能够承受的速度执行操作。这样就可以保证数据库不会被压垮。

 

当然,这种情况MQ中可能会积压大量消息。但对于MQ来说,是允许消息积压的,等到系统A峰值过去,恢复成1000QPS时,系统B还是在以6000QPS的速度去拉取消息,自然MQ中的消息就慢慢被释放掉了。

 

这就是流量削峰的过程。在电商秒杀、抢票等等具有流量峰值的场景下可以使用这么一套架构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/896085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv5、YOLOv8改进:S2注意力机制

目录 1.简介 2.YOLOv5改进 2.1增加以下S2-MLPv2.yaml文件 2.2common.py配置 2.3yolo.py配置 1.简介 S2-MLPv2注意力机制 最近,出现了基于 MLP 的视觉主干。与 CNN 和视觉Transformer相比,基于 MLP 的视觉架构具有较少的归纳偏差,在图像识…

线代强化第四章

下面正式开始公式的证明: B改变了矩阵的秩,所以他是不满秩的。 就是说一个矩阵如果左边乘上一个列满秩的,它的秩不会改变 一个矩阵如果右边乘上一个行满秩的,它的秩不会改变 PROVE: 等于主对角线或副对角线上分块阵的秩的和 当两…

Three.js 实现模型材质局部辉光效果和解决辉光影响场景背景图显示的问题

1.Three.js 实现模型材质局部辉光效果 2.解决辉光效果影响场景背景图显示的问题 相关API的使用: 1. EffectComposer(渲染后处理的通用框架,用于将多个渲染通道(pass)组合在一起创建特定的视觉效果) 2. …

【100天精通python】Day36:GUI界面编程_Tkinter高级功能操作和示例

目录 专栏导读 一、GUI 高级功能 1 自定义主题和样式 2 实现拖放功能 3 多线程和异步编程 二、实战项目 1. 待办事项应用 2. 图像查看器 3. 文本编辑器 4 添加动画和过渡效果 5 多界面和多线程示例 专栏导读 专栏订阅地址:https://blog.csdn.net/qq_358…

前端-初始化Vue3+TypeScript

如果使用如下命令初始化项目,项目很干净,很适合了解项目的各个结构。 npm init vitelatest如果使用如下命令初始化项目,是可以选择你需要的组件 npm init vuelatest

Docker 容器数据卷

Docker挂载主机目录访问如果出现cannot open directory .: Permission denied 解决办法:在挂载目录后多加一个--privilegedtrue参数即可 如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行…

你家的wifi安全么?

在移动互联网已经相当普及的今天,家用Wifi已经成为居家必备设备了,但你有没有考虑过这样一个问题,“我家的Wifi安全么,有没有可能被别人蹭网,或者被黑客登录进来,窃取数据?”下面就结合目前主流…

Bryntum Scheduler Pro 5.5.1 Crack

BRYNTUM 调度程序专业版,专业的日程安排小部件 Bryntum Scheduler Pro 5.5.1 一个专业有大脑的调度UI组件。Scheduler Pro 可帮助您安排任务,同时考虑资源和任务的可用性。 连接您的任务 让 Scheduler Pro 处理剩下的事情。它将根据您定义的链接安排您的任务并遵守任…

3D echarts在vue中的使用

注意:高度问题要如此设置即可解决 参考1 参考2

由于找不到d3dx9_43.dll无法继续执行代码怎么解决

我们在安装PS,吃鸡等软件跟游戏的时候,有可能安装完之后出现以下问题(特别是win7或者win8系统) 错误: 打开PS或者吃鸡等游戏的时候出现这个错误:无法启动此程序,因为计算机中丢失d3dx9_43.dll。…

如何让多线程步调一致?

前几天老板突然匆匆忙忙的过来说对账系统最近越来越慢了,能不能快速优化一下?我了解了对账系统的业务后,发现还是挺简单的,用户通过在线商城下单,会生成电子订单,保存在订单库。之后物流会生成派送单给用户…

免费写真软件让你畅享写真之旅

佳媛: 嗨,妙纯,听说你喜欢拍摄写真照,那你有什么简单的写真照制作方式推荐吗? 妙纯:当然,现在有很多古装写真软件,你可以利用这些软件来制作写真照片哦。 佳媛: 哦?那拍古装写真软…

Apache JMeter

下载 Apache JMeter 并安装 java链接 打开 apache-jmeter-5.4.1\bin 找到jmeter.bat 双击打开 或者 ApacheJMeter.jar 双击打开 设置中文 找到 options 》choose Language 》chinese 新建 计划 创建线程组 添加Http请求 配置元件添加请求头参数(content-type&…

LVS - DR

LVS-DR 数据流向 客户端发送请求到 Director Server(负载均衡器),请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP)到达内核空间。Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传…

miniconda克隆arcpy

arcpy环境克隆 前言尝试思考到此结束 前言 最近遇到了一些问题,需要用到arcpy来处理一些东西,但众所周知,arcgis的arcpy是python 2.0的,我不是很喜欢;所以我安装了arcgis pro 2.8,我发现这也是个坑&#x…

Redis高可用:主从复制详解

目录 1.什么是主从复制? 2.优势 3.主从复制的原理 4.全量复制和增量复制 4.1 全量复制 4.2 增量复制 5.相关问题总结 5.1 当主服务器不进行持久化时复制的安全性 5.2 为什么主从全量复制使用RDB而不使用AOF? 5.3 为什么还有无磁盘复制模式&#xff…

【学习FreeRTOS】第10章——FreeRTOS时间片调度

1.时间片调度简介(同第2章1.3) 同等优先级任务轮流地享有相同的 CPU 时间(可设置), 叫时间片,在FreeRTOS中,一个时间片就等于SysTick 中断周期 首先Task1运行完一个时间片后,切换至Task2运行Task2运行完…

从SaaS到RPA,没有真正“完美”的解决方案!

众所周知,SaaS行业越来越卷,利润也越来越“薄”,这是传统软件厂商的悲哀,也是未来数字化行业不得不面对的冷峻现状之一。 随着基于aPaaS、低代码的解决方案之流行,SaaS行业变得越来越没有技术门槛,IT人员的…

Vue3.X 创建简单项目

一、环境安装与检查 首先,我们要确保我们安装了构建vue框架的环境,不会安装的请自行百度,有很多安装教程。检查环境 node -v # 如果没有安装nodejs请安装,安装教程自行百度 vue -V# 没有安装,请执行npm install -g v…

数据挖掘 | 零代码采集房源数据,支持自动翻页、数据排重等

1 前言 城市规划、商业选址等应用场景中经常会对地区房价、地域价值进行数据分析,其中地区楼盘房价是分析数据中重要的信息参考点,一些互联网网站上汇聚了大量房源信息,通过收集此类数据,能够对地区房价的分析提供参考依据。 如何…