01-初探MQ-MQ的三大使用场景:应用解耦、异步提速、削峰填谷

article/2025/9/15 21:32:01

初探MQ

什么是MQ

关于MQ的概念,想必都不陌生,MQ是 Message Queue(消息队列) 的缩写,所以他首先是一个队列,有先进先出的特性,其次是一个存放消息的队列。常用在分布式系统中进行通信。

为什么用MQ

每引入一个中间件,都会提高系统的开发和维护成本,当然为了保证其高可用购买服务器,也会提升成本。那么我们为什么要用MQ呢,他到底有什么好处呢,网上很多总结,大致有三点:应用解耦异步提速削峰填谷

应用解耦

假设12306系统是这样的,我们买票成功后,需要做以下几件事:调用库存系统扣减车票库存,调用短信系统给用户发送短信,调用邮件系统给用户发邮件,调用第三方客户端通知买票成功。那么如果这几个服务一直能正常服务,产品经理不在有新的需求变更,那也可称得上现世安稳,岁月静好。可是万一有一天出现这么两种情况可怎么办呢?

  1. 产品经理提需求,好多人关注了我们12306微信客户端,我们需要买票成功后在通知微信小程序。那么我们又需要修改订单系统的代码。一次还好,如果隔一段时间发生一件这样的事,那谁能忍受?
  2. 某一天,短信系统挂了,然后客户成功买到一张票,然后呢是短信也没收到,邮件也没收到,库存也没扣,这还得了。你短信系统坏了,我邮件系统好好的,凭什么影响我,让客户收不到邮件,这就不合理。

所以呢,还是各个系统之间的耦合太高了,我们应该解耦。不是有人说互联网的任何问题都可以通过一个中间件来解决吗,那么我们看MQ如何帮我们解决这件棘手的事情。

在这里插入图片描述

那么我们发现其实短信系统、邮件系统等都只依赖订单系统产生的一条数据那就是订单,因此我们在订单系统产生数据后,将订单这条数据发送给MQ,就返回成功,然后让短信、邮件等系统都订阅MQ,一旦发现MQ有消息,他们主动拉取消息,然后解析,进行业务处理。这样一来,就算你短信系统挂了,丝毫不会影响其他系统,而且如果后来想加一个新的系统,你也不用改订单系统的代码了,你只要订阅我们的MQ提供的消息就行了。

在这里插入图片描述

异步提速

还以上面12306为例,假设我们不用MQ,那么我们的代码必然耦合在一起,下单成功后,依次要通过RPC远程调用这几个系统,然后同步等到他们的响应才能返回给用户是否成功的结果。假设每个系统耗时200ms,那么就得花费600ms。

在这里插入图片描述

但是其实有时候我们发现,下单是个核心业务,可能压力本来就大,客户也着急知道下单是否成功,但是短信邮件等通知,可能大多数人根本不急或者压根不关心,那么我们为什么要让这些细枝末节的业务影响核心业务的效率呢,是不是有点舍本逐末。所以这个逻辑我们可以设计成异步的。我们可以当下单成功后,只需要将订单消息发给MQ,然后立即将结果返回通知客户。这才是正确的打开姿势。这样一来,我订单系统只需要告诉你MQ,我下单成功了,其他模块收到消息后,该发短信的发短信,发邮件的发邮件。因为本来MQ的性能就很好,所以这个效率一下就提升了。

在这里插入图片描述

削峰填谷

还是用12306为例,假设平时可能买票的人不多,所以订单系统的QPS也不是很高,每秒也就处理1000个请求,但是一到节假日、春运期间可能抢票的人就非常多,并发量远远大于平时,这个时候,订单系统明显扛不住了。怎么办呢,当然我们可以设计弹性伸缩的集群,进行机器扩容,保证高可用。但是我们依然可以采用MQ来解决这个问题。

在这里插入图片描述

MQ的吞吐能力还是还强大的,所以我们可以设计高可用的MQ,让所有的请求都打到MQ,缓存起来。这样一来高峰期的流量和数据都将积压在MQ中,流量高峰就被削弱了(削峰),然后我们的订单系统就避免了高并发的请求,它可以慢慢的从MQ中拉取自己能力范围内的消息就行处理。这样一来,高峰期积压的消息也终将被消费完,可以叫做填谷

在这里插入图片描述

总结

综上所述,MQ有他的优势,主要体现在三个方面

  1. 应用解耦:提高系统容错性和可维护性
  2. 异步提速:提升响应速度,优化用户体验
  3. 削峰填谷:高并发的时候,可以有效保证系统的稳定性

当然他也有弊端

  1. 复杂度提高,我们需要解决消息丢失、积压、幂等等各种情况
  2. 一旦MQ宕机,对业务有影响

常见MQ性能对比

这里从网上找的一张性能对比图,可以大概对比一下几大主流MQ的优缺点。ActiveMQ因为吞吐量低,也没有什么突出的优势,用的人也少了。RabbitMQ主要特点是消息延迟低,并发能力强,而且安全可靠,所以并发量不是很大的金融行业据说用的多,互联网公司可能用的少,因为他的开发语言是Erlang,可能懂得人不多,出问题不好定位。而RocketMQ是阿里开源的MQ,并发高,功能多,用的好像挺多。Kafka主要用在大数据领域。这些话呢,也主要是网上看的,并没有实际调研过,有确切的数据,不过理论上是可信的。

在这里插入图片描述


http://chatgpt.dhexx.cn/article/PxMQ5fVA.shtml

相关文章

设计一个秒杀系统之削峰填谷

为什么需要削峰? 如果你看过秒杀系统的流量监控图的话,你会发现它是一条直线,就在秒杀开始那一秒是一条很 直很直的线,这是因为秒杀请求在时间上高度集中于某一特定的时间点。这样一来,就会导致一 个特别高的流量峰值…

电力系统的削峰填谷

削峰填谷(Peak cut)是调整用电负荷的一种措施。根据不同用户的用电规律,合理地、有计划地安排和组织各类用户的用电时间。以降低负荷高峰,填补负荷低谷。减小电网负荷峰谷差,使发电、用电趋于平衡。 因电厂是全天候持续…

t分布概率密度函数的推导

推导过程整理自https://www.bilibili.com/video/BV1s54y1S7Ji。 文章目录 预备知识 Γ \Gamma Γ函数(伽马函数)标准正态分布卡方分布 推导目标引理:连续型随机变量商的分布推导过程先计算 W Y / n W\sqrt{Y/n} WY/n ​的概率密度函数 p W (…

求概率密度函数方法之单调性定理

例题: 适用条件:随机变量Y关于X是单调的,也就是说随机变量Y与X存在一一映射的关系。 解法好处:计算量小,步骤简单(1,将变量替换,然后带入原式。2,改变积分对象&#xf…

概率密度估计方法-核密度估计和高斯混合分布

1、概率密度估计方法 概率密度估计方法用于估计一组数据集的概率密度分布,分为参数估计方法和非参数估计方法。 参数估计方法 假定样本集符合某一概率分布,然后根据样本集拟合该分布中的参数,例如:似然估计,混合高斯等…

概率密度函数及其在信号方面的简单理解(上)概率密度函数

概率密度函数及其在信号方面的简单理解(上)概率密度函数 上篇 概率密度函数 1 离散随机变量与连续型随机变量2 离散随机变量的分布函数 2.1 概率函数2.2 概率分布2.3 概率分布函数(累积分布函数!) 3 连续型随机变量的概…

概率密度函数估计

概率密度函数估计 前导知识:【非参数估计—直方图法、Kn近邻估计法、Parzen窗法】 1. 最大似然估计 导包: import numpy as np from numpy.linalg import cholesky import matplotlib.pyplot as plt import random # 用于随机抽样设置随机样本数&…

python实现概率密度匹配法

Python实现系列: Python实现贝叶斯优化算法 python实现t-SNE降维 Python实现12种降维算法 Python实现11 种特征选择策略 Python实现10种聚类算法 Python实现8种相似度度量 python实现反距离权重插值(IDW) Python实现12种概率分布 python实现快速傅里叶变换 python实…

威布尔概率密度分布

目录 相同的平均风速,如果概率密度分布不同,风机的发电量也会完全不同。 威布尔分布是泊松三类分布的特殊形式。概率密度函数 f ( v ) f(v) f(v)为风速 v ( v ≥ 0 ) v(v≥0) v(v≥0)出现的概率,形式如下: f ( v ) k a ( v a ) …

java正态分布的概率密度函数_正态分布概率密度函数

http://www.360doc.com/content/17/0306/13/32342759_634411464.shtml什么是正态分布 正态概率分布是连续型随机变量概率分布中最重要的形式,它在实践中有着广泛的应用。在生活中有许多现象的分布都服从正态分布,如人的身高、体重、智商分数;某种产品的尺寸和质量;降雨量;…

绘制概率密度图

1、内容简介 略 443可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 clc close all clear miu 0.5; delta 0.5; r 0.1:0.1:10; p1 1/sqrt(2*pi)/miu./r.*exp(-(log(r)-miu).^2/2/delta^2); delta 1; p2 1/sqrt(2*pi)/miu./r.*exp(-(log(r)-miu).^2/2/delta^2); fig…

概率密度函数曲线及绘制

目录 前言概率密度函数曲线几类经典的概率密度函数两种绘制密度曲线的方法参考文献 前言 很多数据科学家在做回归模型评估的时候,不仅会去计算模型拟合优度R2,平均绝对误差还会去看测试集的每个样本偏差的分布情况,这个时候就需要用到概率密…

概率密度图

1、 导入库 import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns2、 概率密度图–kdeplot的应用 第一个参数:要绘制的图像数据 第二个参数:shade 是否填充颜色# 获得数据 dataSet pd.read_c…

MATLAB 中RMSE和MAPE的计算方法

RMSE:均方根误差 matlab计算方法: rmse sqrt(mean((YPred-Obverval).^2)); MAPE:平均百分比误差 matlab计算方法: meap mean(abs((observed - predicted)./observed))*100;

均方根误差RMSE(Root Mean Square Error)

MSE(Mean Square Error)均方误差 是真实值与预测值的插值的平方然后求和平均。 RMSE(Root Mean Square Error)均方根误差 均方根误差是预测值与真实值偏差的平方与观测次数n比值的平方根。 衡量的是预测值与真实值之间的偏差&a…

Google Earth Engine(GEE)——计算RMSE

要在 的属性中聚合数据FeatureCollection,请使用 featureCollection.reduceColumns(). 例如,要检查 watersheds 中的区域属性FeatureCollection,此代码计算相对于地球引擎计算区域的均方根误差 (RMSE): 代码: 难点是很多同学不知道如何进行RMSE的函数计算,首先就是求差…

MAE vs RMSE 如何通俗的比较两个度量

平均绝对误差MAE(mean absolute error) 和均方根误差 RMSE(root mean squared error)是衡量变量精度的两个最常用的指标,同时也是机器学习中评价模型的两把重要标尺。那两者之间的差异在哪里?它对我们的生活有什么启示…

RMSE 和 STD 的区别

文章目录 一、概念理解二、公式推导三、总结 一、概念理解 首先看一下两个的概念: RMSE: root mean square error 均方根误差,测绘学科中常称作中误差。它是指一组观测值与真值差的平方和与观测次数比值的平方根,它反映的是观测…

2022-10-31-基于用户的协同过滤推荐算法实现+MAE+RMSE的求解+项目代码+运行结果图

目录 推荐算法学习笔记项目代码运行结果图 推荐算法学习笔记 协同过滤推荐算法测评指标RMSE均方根误差 推荐系统笔记: 一、为什么需要推荐系统 为了解决互联网时代下的信息超载问题。 二、搜索引擎和推荐系统的区别 分类目录,是将著名网站分门别类&…

LPC图像拼接-代码-RMSE问题

LPC的RMSE代码 2021年cvpr-Leveraging Line-point Consistence to Preserve Structures for Wide Parallax Image Stitching(LPC)这篇论文作者给的评价指标代码。 function [ rmse ] RMSE( img, C1, C2, pts1, pts2, mesh_X, mesh_Y, off )X_col lin…