初识MQ——学习MQ之前需要了解的知识点

news2025/2/25 11:14:06

目录

前言

1. 同步和异步通讯

1.1 同步通讯

1.2 异步通讯

2. MQ技术对比


前言

在现在的大数据时代,高并发的情况越来越普遍,系统一个不注意,就可能崩溃无法访问了。这是开发最不想看到的情况,如果是上班还好,可以分析定位。要是下班的时候,那就完了,可能美好的休息时光就没了。最惨的就比如微博奔溃,程序员结婚当天加班了。为了避免这种悲催的情况,就需要用到中间件——MQ。

1. 同步和异步通讯

在学习MQ之前,我们首先要弄清楚,服务之间的通讯情况。微服务间的通讯分为同步通讯和异步通讯两种:

  • 同步通讯:就像打电话,需要实时响应。
  • 异步通讯:就像微信、QQ发消息,不需要马上回复。

这两种方式各有优势,打电话可以立即得到响应,但是你却不能跟多人同时通话。发送微信可以同时跟多人聊天,但是往往响应会有延迟。

1.1 同步通讯

像微服务常用的Feign调用就属于同步方式,虽然调用可以实时得到结果,但是存在一些问题。以下图为例,说明一下:

我们团队开发了一个购物的系统,用户下单之后,支付服务去调用订单服务修改订单状态,修改完成之后返回给支付服务,之后支付服务又去调用了仓储服务去减少库存,然后再返回给支付服务,支付服务就返回给用户表示支付成功。到这里,系统的流程就算走完了。

1)耦合度高

这时候来了一个神奇的物种——产品经理,他看了这个项目之后说,我觉得我们可以给系统升个级,用户支付完了之后,可以给用户来个短信提醒。他这短短几句话说的简单,你是不是要好几天在支付服务里面去改代码,添加一个短信的业务。然后这产品经理继续说,想再加个优惠券功能,你是不是还要继续在支付系统中改代码?要是产品经理每隔十天半个月给你来一次系统升级,这改来改去的谁受的了啊。所以这就是耦合度高带来的很严重的问题。

2)性能下降

我们再来假设一下。除了支付服务外,我们的每个服务业务处理都需要150ms的时间。因为它是同步调用,所以支付服务在调用其他服务的时候需要等待,假设支付服务处理自身业务逻辑的时间是50ms,那么整个系统的耗时加起来是不是就是500ms。这时候如果出现高并发,你的系统能抗住吗?请求一多,系统容易造成阻塞,这时候系统的性能和吞吐量是不是都下降了。

3)浪费资源

而且,支付服务在调用订单服务的时候,是不是都是干等着它的响应结果。CPU占着,内存也占着,但是它什么也没做。等订单服务返回之后,再来调用仓储服务。然后继续干等着。现在才是三个服务,以后变成十个,一百个服务,支付服务会浪费多少资源啊。

4)级联失败

假设,支付服务在访问仓储服务的时候,仓储服务挂了,支付服务还在等着仓储服务的响应结果。它也不会释放资源,后面进来的请求越来越多,等到资源耗尽的时候,服务崩溃。用户不得骂街吗?你这什么垃圾系统,我就访问一下,系统就挂了。

缺点图片如下:

最后总结一下同步通讯的特点:
同步调用的优点:

  • 时效性比较强,可以立即得到结果 

同步调用的问题:

  • 耦合度高
  • 性能和吞吐能力下降
  • 有额外的资源消耗
  • 有级联失败问题 

1.2 异步通讯

 异步调用则可以避免上述问题。异步调用常见实现就是事件驱动模式。那么什么是事件驱动?我们继续以上面的例子来说明一下:

我们不再是支付服务直接调用其他的服务,而是引入了一个新的东西就是Broker(事件代理)。支付服务支付成功之后,直接返回给用户支付成功的信息。并且把支付成功当作一个事件交给Broker来管理。而订单服务、仓储服务、短信服务在Broker订阅事件之后,一旦发生支付成功的事件,Broker就会通知三个服务订单已经支付,三个服务就会继续各自的处理逻辑。这样的好处就是:

1)服务解耦

后续系统升级,想要添加或者去除某些服务的时候,只要修改订阅事件的服务就可以了。大大降低了服务之间的耦合度。

2)性能提升,吞吐量提高

用户从支付开始到支付完成,只会花费支付服务和发布支付成功事件的时间总和,也就是60ms,跟后面的其他服务花费的时间没有任何关系了。跟上面的同步通讯的耗时相比,减少了很多。耗时缩短了,那么我们的性能和吞吐量是不是就提高了。

3)服务没有强依赖,不担心级联失败问题

因为支付服务不再直接调用仓储服务,如果现在仓储服务挂掉了,也跟支付服务没有关系了。服务之间没有了强依赖,自然就不用再担心级联失败的问题了。

4)流量削峰

如果现在来了大量的服务请求,我们的订单服务因为处理的时间缩短,不会造成阻塞,返回给用户表示服务成功。然后把事件都放在了Broker里面,这时候Broker就起到了一个缓冲的作用。就像是洪水来了的时候,有了一个大坝拦住了。剩下的服务能处理几个就先处理几个,这几个处理完了之后,再处理后面的。这样压力都有Broker来抗住,一个高的并发就被砍平了。对我们的系统起到了一个保护的作用。特别是在秒杀,抢票这样一个高并发的场景下。

在事件模式中,支付服务是事件发布者(publisher),订单服务、仓储服务和短信服务都是事件订阅者(Consumer)。 发布者发布事件到Broker,不关心谁来订阅事件。订阅者从Broker订阅事件,不关心谁发来的消息。 Broker是一个像数据总线一样的东西,所有的服务要接受数据和发送数据都发到这个总线上,这个总线就像协议一样,让服务间的通讯变得标准和可控。

现在开源软件或云平台上 Broker 的软件是非常成熟的,比较常见的一种就是我们今天要学习的MQ技术。

总结

异步通讯的优点:

  • 吞吐量提升:无需等待订阅者处理完成,响应更快速
  • 故障隔离:服务没有直接调用,不存在级联失败问题
  • 调用间没有阻塞,不会造成无效的资源占用
  • 耦合度极低,每个服务都是可以灵活插拔,可替换
  • 流量削峰:不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自己的速度去处理事件

异步通讯的缺点:

  • 架构复杂了,业务没有明显的流程线,不好管理
  • 需要依赖于Broker的可靠、安全、性能 

如果你的业务场景比较追求时效性,需要马上得到其他服务的回应,建议你还是选择同步通讯的模式。如果你不太在意时效性,不需要马上得到响应,只是要其他服务去处理某些事件,并且对并发和吞吐量的要求比较高的话,你就可以使用异步通讯了。 

2. MQ技术对比

MQ,中文就是消息队列(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker。

比较常见的MQ实现:

  • ActiveMQ
  • RabbitMQ
  • RocketMQ
  • Kafka

集中常见MQ的对比:

RabbitMQActiveMQRocketMQKafka
公司/社区RabbitApache阿里Apache
开发语言ErlangJavaJavaScala&Java
协议支持AMQP,XMPP,SMTP,STOMPOpenWire,STOMP,REST,XMPP,AMQP自定义协议自定义协议
可用性一般
单机吞吐量一般非常高
消息延迟微秒级毫秒级毫秒级毫秒以内
消息可靠性一般一般

追求高可用性:Kafka、RocketMQ、RabbitMQ

追求可靠性:RabbitMQ、RocketMQ

追求吞吐能力:RocketMQ、Kafka

追求消息低延迟:RabbitMQ、Kafka

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

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

相关文章

【C++】—— 类与对象(二)

【C】—— 类与对象(二) 1、类的默认成员函数2、构造函数2.1、初见构造2.2、深入构造2.3、初始化列表2.3.1、什么是初始化列表2.3.2、初始化列表和函数体关系2.3.3、必须使用初始化列表的情况2.3.3.1、 c o n s t const const 成员变量2.3.3.2、引用成员…

AS400==tutorial for Beginners

系统AS400 语言RPGLE 参考视频: https://www.youtube.com/watch?vFqgwYsp7mjk&listPL3W4xRdnQJHVWWmYX1Klji7QUk_PQhq0t&index5 Lesson 1 | Introduction to As-400 and setting up As-400 Environment. 客户端软件TN5250 Terminal Emulation for Window…

MyBatis全方位指南:从注解到XML文件的数据库操作

目录 一.什么是MyBatis 入门程序初体验 二.MyBatis基本操作CRUD ▐ 增(Insert) 返回主键 ▐ 删(Delete) ▐ 改(Update) ▐ 查(Select) 起别名 结果映射 开启驼峰命名(推荐) 三.MyBatis XML配置文件 ▐ 增(Insert) ▐ 删(Delete) ▐ 改(Update) ▐ 查(Select) …

PostgreSQL(二十三)TOAST技术

目录 一、TOAST简介 二、TOAST的存储方式 1、存储方式概述 2、实验:创建TOAST表 三、TOAST的4种压缩策略 1、策略说明 2、TOAST表额外的三个字段 四、TOAST表的计算方式 1、说明 2、实验:计算表大小 五、TOAST表的特点 1、优点 2、缺点 3、…

【KAN】【API教程】get_fun

抽取某个激活函数的样子 from kan import * import matplotlib.pyplot as plt # create a KAN: 2D inputs, 1D output, and 5 hidden neurons. cubic spline (k3), 5 grid intervals (grid5). model KAN(width[2,5,1], grid5, k3, seed0) x torch.normal(0,1,size(100,2)) m…

给虚拟机Ubuntu扩展硬盘且不丢数据

1.Ubuntu关机状态下先扩展,如扩展20GB 2.进入ubuntu,切换root登录,必须是root全选,否则启动不了分区工具gparted 将新的20GB创建好后,选择ext4,primary; 3.永久挂载 我的主目录在/并挂载到/dev/sda1 从图…

C++解决:早餐组合

前言 应该都知道我之前沉默了很长一段时间,现在慢慢想明白了,会继续创作,真的非常感谢大家对我这个幼稚小孩的支持与鼓励。 有朋友私信问我退的原因,在这里和大家简要说一下【狗头】 我认识一位开学初三的学长,他和…

H81002S 1.7mm网络变压器:BMS汽车蓝牙接收器中的超薄共模电感科技

华强盛导读:在当今这个日新月异的汽车科技领域,每一处细节都蕴含着创新与突破。作为电动汽车心脏的电池管理系统(BMS),其高效稳定的运行不仅关乎续航与安全,更是智能化驾驶体验的基石。而在这背后&#xff…

有那些AI数字人制作软件?

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 之前由于工作需要,要录制1 个真人讲PPT的视频,作为典型I人,本人露面是不可能的。 于是打起了数字人…

二维码门楼牌管理应用平台建设:打造高效运维新生态

文章目录 前言一、系统运维概述二、菜单管理:个性化服务的关键三、参数管理:优化系统性能的关键四、字典管理:数据标准化的基石五、邮件管理:沟通协作的桥梁六、任务调度:自动化工作的核心七、短信管理:及时…

头发健康知识一

头发重要性: 头发是人第二张脸,影响人容貌 形象和气质.头皮基本结构 角质层,颗粒层,有挤层,基底层4个细胞层组成,含有大量毛囊和皮脂腺和汗腺.头屑是什么? 头屑为角质细胞的新陈代谢脱落的死细胞,每天都会有十几万角质细胞脱落 (正常的代谢周期为28天). 当基底层细胞受损时…

32.x86游戏实战-使用物品call

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

MySql审计平台

安装方式: cookieY/Yearning: 🐳 A most popular sql audit platform for mysql (github.com) 对数据库的一系列后台操作 AI助手 - AI助手提供SQL优化建议,帮助用户优化SQL语句,以获得更好的性能。同时AI助手还提供文本到SQL的…

手把手教你OpenCV常见滤波(高斯,中值,均值)C++

目录 1 图像处理中的高斯函数 1.1一维高斯函数 1.2二维高斯函数 1.3 代码 1.4 结果 2 低通滤波之均值滤波器 2.1、空间滤波基础 2.1.1线性空间滤波原理 2.1.2 相关与卷积 2.2、平滑滤波之均值滤波器 2.2.1原理 2.2.2 c opencv代码 2.2.3 结果 3 中值滤波 3.1 c …

LC 42.接雨水

42.接雨水 给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入: height [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 解释: 上面是由数组 [0,1,0,2,1,0,1,3…

临床随机对照试验中的分层问题及其解决方法

在临床随机对照试验(Randomized Controlled Trials, RCTs)中,分层问题(Stratification Issues)是影响研究结果有效性的重要因素之一。RCTs是评估医疗干预效果的金标准,旨在通过随机分组和对照来消除干扰因素…

PPP 协议分析(实验报告)

实验设备及软件 (1)硬件设备:PC 机或笔记本电脑;(2)软件:H3C Cloud Lab 实验环境配置 (1)实验拓扑图 (2)网络配置参数 Device Interface IP/…

基于JSP的家用电器销售网站

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:JSPJava 工具:ECLIPSE、MySQL数据库管理工具、Tomcat 系统展示 首页 个人中心 商品信…

华为od机试真题:内存冷热标记(Python)

2024华为OD机试(C卷D卷)最新题库【超值优惠】Java/Python/C合集 题目描述 现代计算机系统通常存在多级的存储设备,针对海量的 wordload 的优化的一种思路是将热点内存页优化先放到快速存储层级,这就需要对内存页进行冷热标记。 …

吴恩达机器学习WEEK2

COURSE1 WEEK2 多维特征 在线性回归中,往往特征不止一个,而是具有多维特征 例如,在预测房价的例子中,我们知道更多的信息: x 1 x_1 x1​:房屋的面积 x 2 x_2 x2​:卧室的数目 x 3 x_3 x3​&a…