消息队列理解

news2024/10/1 21:26:44

为什么使用消息队列

使⽤消息队列主要是为了:

  1. 减少响应所需时间和削峰。
  2. 降低系统耦合性(解耦/提升系统可扩展性)。

    当我们不使⽤消息队列的时候,所有的⽤户的请求会直接落到服务器,然后通过数据库或者
    缓存响应。假如在⾼并发的场景下,如果没有缓存或者数据库承受不了这么⼤的压⼒的话,
    就会造成响应速度缓慢,甚⾄造成数据库宕机。但是,在使⽤消息队列之后,⽤户的请求数
    据发送给了消息队列之后就可以⽴即返回,再由消息队列的消费者进程从消息队列中获取数
    据,异步写⼊数据库,不过要确保消息不被重复消费还要考虑到消息丢失问题。由于消息队
    列服务器处理速度快于数据库,因此响应速度得到⼤幅改善。

通过以上分析我们可以得出消息队列具有很好的削峰作⽤的功能——即通过异步处理,将短
时间⾼并发产⽣的事务消息存储在消息队列中,从⽽削平⾼峰期的并发事务。 举例:在电
⼦商务⼀些秒杀、促销活动中,合理使⽤消息队列可以有效抵御促销活动刚开始⼤量订单涌
⼊对系统的冲击。如下图所示:

使⽤消息队列还可以降低系统耦合性。我们知道如果模块之间不存在直接调⽤,那么新增模
块或者修改模块就对其他模块影响᫾⼩,这样系统的可扩展性⽆疑更好⼀些。

缺点:

  1. 系统可⽤性降低: 系统可⽤性在某种程度上降低,为什么这样说呢?在加⼊ MQ 之
    前,你不⽤考虑消息丢失或者说 MQ 挂掉等等的情况,但是,引⼊ MQ 之后你就需要
    去考虑了!
  2. 系统复杂性提⾼: 加⼊ MQ 之后,你需要保证消息没有被重复消费、处理消息丢失的
    情况、保证消息传递的顺序性等等问题!
  3. ⼀致性问题: 我上⾯讲了消息队列可以实现异步,消息队列带来的异步确实可以提⾼
    系统响应速度。但是,万⼀消息的真正消费者并没有正确消费消息怎么办?这样就会导
    致数据不⼀致的情况了!
    消息队列都有哪些使用场景,然后你项目里具体是什么场景,在这个场景里用消息队列是什么?
  • 消息队列常见的使用场景有很多,比较核心的有三个:解耦、异步、削峰

解耦

  • A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?A 系统负责人几乎崩溃…
    在这里插入图片描述
    在这里插入图片描述

异步

  • A 系统接收一个请求,需要在自己本地写库,还需要在 BCD 三个系统写库,自己本地写库要 3ms,BCD 三个系统分别写库要 300ms、450ms、200ms。最终请求总延时是 3+ 300 + 450 + 200 = 953ms,接近 1s,用户感觉搞个什么东西,慢死了慢死了。用户通过浏览器发起请求,等待个 1s,这几乎是不可接受的。
  • 在这里插入图片描述
  • 一般互联网类的企业,对于用户直接的操作,一般要求是每个请求都必须在 200 ms 以内完成,对用户几乎是无感知的。如果使用 MQ,那么 A 系统连续发送 3 条消息到 MQ 队列中,假如耗时 5ms,A 系统从接受一个请求到返回响应给用户,总时长是 3 + 5 = 8ms,对于用户而言,其实感觉上就是点个按钮,8ms 以后就直接返回了,爽!网站做得真好,真快!
    在这里插入图片描述

削峰

  • 每天 0:00 到 12:00,A 系统风平浪静,每秒并发请求数量就 50 个。结果每次一到 12:00 ~ 13:00
    ,每秒并发请求数量突然会暴增到 5k+ 条。但是系统是直接基于 MySQL 的,大量的请求涌入
    MySQL,每秒钟对 MySQL 执行约 5k 条 SQL。一般的 MySQL,扛到每秒 2k 个请求就差不多了,如果每秒请求到 5k 的话,可能就直接把MySQL 给打死了,导致系统崩溃,用户也就没法再使用系统了。但是高峰期一过,到了下午的时候,就成了低峰期,可能也就 1w 的用户同时在网站上操作,每秒中的请求数量可能也就 50 个请求,对整个系统几乎没有任何的压力。
    在这里插入图片描述
  • 如果使用 MQ,每秒 5k 个请求写入 MQ,A 系统每秒钟最多处理 2k 个请求,因为 MySQL 每秒钟
    最多处理 2k 个。A 系统从 MQ 中慢慢拉取请求,每秒钟就拉取 2k 个请求,不要超过自己每秒
    能处理的最大请求数量就 ok,这样下来,哪怕是高峰期的时候,A 系统也绝对不会挂掉。而
    MQ 每秒钟 5k 个请求进来,就 2k 个请求出去,结果就导致在中午高峰期(1 个小时),可能有
    几十万甚至几百万的请求积压在 MQ 中。
    在这里插入图片描述
  • 这个短暂的高峰期积压是 ok 的,因为高峰期过了之后,每秒钟就 50 个请求进 MQ,但是 A 系
    统依然会按照每秒 2k 个请求的速度在处理。所以说,只要高峰期一过,A 系统就会快速将积压
    的消息给解决掉。

Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优缺点?

在这里插入图片描述

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

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

相关文章

GPU是什么

近期ChatGPT十分火爆,随之而来的是M国开始禁售高端GPU显卡。M国想通过禁售GPU显卡的方式阻挡中国在AI领域的发展。 GPU是什么?GPU(英语:Graphics Processing Unit,缩写:GPU)是显卡的“大脑”&am…

给比特币“雕花” 增值还是累赘?

比特币网络也能发NFT了,大玩家快速入场。3月6日,Yuga Labs开启了TwelveFold拍卖会,该项目是Yuga Labs在比特币区块链网络上发行的首个NFT合集,内含300个艺术品。 在没有智能合约的比特币网络造NFT,没那么友好。但Web3…

Jmeter+Ant+Jenkins自动化搭建之报告优化

平台简介一个完整的接口自动化测试平台需要支持接口的自动执行,自动生成测试报告,以及持续集成。Jmeter支持接口的测试,Ant支持自动构建,而Jenkins支持持续集成,所以三者组合在一起可以构成一个功能完善的接口自动化测…

概率论与数理统计相关知识

本博客为《概率论与数理统计--茆诗松(第二版)》阅读笔记,目的是查漏补缺前置知识数学符号连乘符号:;总和符号:;“任意”符号:∀;“存在”符号&…

IDEA项目中配置Maven镜像源(下载源)

目录前言一、IDEA中Maven的位置二、修改Maven的配置文件2.1 配置文件2.2 修改镜像源三、在IDEA中使配置文件生效四、配置文件和本地仓库迁移前言 在使用IDEA搭建项目的过程中,我们发现框架的jar包下载非常缓慢,这是因为国内访问Maven仓库速度较低&#…

构建GRE隧道打通不同云商的云主机内网

文章目录1. 环境介绍2 GRE隧道搭建2.1 华为云 GRE 隧道安装2.2 阿里云 GRE 隧道安装3. 设置安全组4. 验证GRE隧道4.1 在华为云上 ping 阿里云云主机内网IP4.2 在阿里云上 ping 华为云云主机内网IP5. 总结1. 环境介绍 华为云上有三台云主机,内网 CIDR 是 192.168.0.0…

TensoRT8.4_cuda11.6 sampleOnnxMNIST运行生成

1、版本信息 win10电脑环境: TensorRT:8.4.1.5CUDA: 11.6VS: 2019 环境安装成功后,使用sampleOnnxMNIST测试 2、VS2019环境配置 用vs打开sampleOnnxMNIST项目,位置在 D:\TensorRT-8.4.1.5\samples\sampleOnnxMNIST (1&#xf…

创建SpringBoot工程详细步骤

new新建一个项目选择Spring Initializr, 然后配置一下地址, 可以如下图使用阿里云的,(因为国外的Spring官网可能不稳定) 下面这三个地址(选一个)能用的用上就行 https://start.spring.io(默认) https://start.springboot.io https://start.aliyun.com 然后 然后点击Finish…

HarmonyOS/OpenHarmony应用开发-dataUriUtils的使用

模块导入接口详情 dataUriUtils.getId getId(uri: string): number 获取附加到给定uri的路径组件末尾的ID。 参数: 名称 类型 必填 描述 uri string 是 指示要从中获取ID的uri对象。 dataUriUtils.attachId attachId(uri: string, id: number): string …

上班三年,薪资还赶不上应届程序员的一半奖金?

工资的鸿沟,始于社会分工的出现和细化。打工人行走职场,你是否也经历过:卷也卷不赢,躺也躺不平的45人生!不同打工人分工提升了社会生产的效率,也加速了社会财富的积累,更提高了人们的收入水平。…

Zookeeper特性和节点数据类型详解

什么是ZK? zk,分布式应用协调框架,Apache Hadoop的一个子项目,解决分布式应用中遇到的数据管理问题。 可以理解为存储少量数据基于内存的数据库。两大核心:文件系统存储结构 和 监听通知机制。 文件系统存储结构 文件目录以 / …

Pytorch深度学习与入门实战

Pytorch深度学习入门与实战Pytorch简介Pytorch特点PyTorch安装环境要求PyTorch兼容的Python版本搭建开发环境下载Miniconda![下载miniconda](https://img-blog.csdnimg.cn/adace1a2f7ae476aa883b53203477c92.pnPytorch官网地址GPU版本安装检查显卡驱动依赖库安装机器学习基础与…

【备战面试】TCP的三次握手与四次挥手

本篇总结的是计算机网络知识相关的面试题,后续也会更新其他相关内容 文章目录1、TCP头部结构2、三次握手3、四次挥手4、为什么TCP连接的时候是三次?两次是否可以?5、为什么TCP连接的时候是三次,关闭的时候却是四次?6、…

【工具使用】STM32CubeMX-CRC配置

一、概述 无论是新手还是大佬,基于STM32单片机的开发,使用STM32CubeMX都是可以极大提升开发效率的,并且其界面化的开发,也大大降低了新手对STM32单片机的开发门槛。     本文主要讲述STM32芯片的CRC外设配置及CRC校验的一些基…

【018】筛选数据(模糊筛选)_#VBA

模糊筛选1. 原因2. 参考3. VBA指令3.1 将 * 添加在 C 的两侧即可筛选所有包含 C 的值3.2 将 * 添加在 C 的前面即可筛选所有最后一个字符包含 C 的值3.3 将 * 添加在 C 的后面即可筛选所有第一个字符包含 C 的值1. 原因 此前写筛选方式,都是高级筛选或者按条件筛选…

可移植操作系统接口--POSIX

什么是POSIX POSIX(Portable Operating System Interface,可移植操作系统接口)是一个标准,它定义了操作系统接口的一系列规范。POSIX标准最初由IEEE制定,现在由Open Group维护。 POSIX标准的主要目的是为了保证不同操…

python带你成功复刻热门手机游戏——飞翔的小鸟

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 飞翔的小鸟(游戏英文名:Flappy Bird) 一款由越南独立开发者开发的手机游戏,是之前非常流行的一款手机游戏 小游戏目标:让小鸟穿过管子,不要碰到任何物体…

大数据是什么?发展前景怎么样

关于大数据的解释,比较官方的定义是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。简单来说,大数据就是结构化…

CAD崩溃后自动保存的文件在哪里?

CAD崩溃后自动保存的文件在哪里?相信这个问题很多设计师小伙伴在CAD绘图过程中都曾遇到过,这也是CAD常见问题之一。本节内容小编就以浩辰CAD软件为例来给大家介绍一下软件崩溃后CAD自动保存的文件在哪里以及打开方式。 CAD崩溃后自动保存文件位置&#…

GWAS全基因组关联分析工具GAPIT最新版的安装教程与报错解决方案

GWAS工具GAPIT最新版 本篇笔记主要内容是GWAS分析软件GAPIT最新版的安装和使用教程,包括常见的报错以及解决方案,主要出错位置在LDheatmap、stringi、nloptr、lme4等,测试安装的环境是东方天意的ECS云服务器(Linux centos7&#x…