【ActiveMQ】MQ消息中间件引入原因、定义和作用

🔰 学习视频 🔰

尚硅谷ActiveMQ教程(MQ消息中间件快速入门)

集数:3—6


🔰 学习格言 🔰

练拳不练功,到老一场空;基础不牢,地动山摇。


一、MQ消息中间件产品

在这里插入图片描述

二、生活举例

在这里插入图片描述
🔶 无MQ情况

学生向老师请教问题,老师(系统A)和学生1(系统B1)分别为两个系统,相当于系统B1调用系统A。

当有多个学生需要向老师请教问题时,每个学生请教的时间为5—10分组,当一个学生请教问题时,其他学生只能等待。等同于,当B1调用A时,B2、B3、B4……只能等待。

存在问题:

  • 当高并发时,系统A负担重。
  • 系统耦合度高,系统Bx直接调用A。
  • Bx系统等待时间长,系统利用率低。

🔶 有MQ情况

请班长(MQ)进行管理,学生们按照老师要求的格式(约定),将问题写在一张纸上按照先后顺序交给班长,学生们就可以暂时离开了。

  • 后面来的同学不用直接找老师,相当于系统Bx没有直接调用系统A,解决了耦合问题
  • 学生早上交给班长的问题,老师可能在晚上才能解答,相当于异步模型
  • 如果大量学生同时都来找老师,老师可能负担不起,通过班长帮助老师分担了流量,老师可以专门解决问题,班长帮助老师分担一些其他业务。抵御洪峰流量,达到保护主业务的目的,削峰

班长就是传递消息的中间人,名为:消息中间件。

所以MQ能够解决的问题就是:解耦削峰异步

三、技术生产案例

🔶 微服务架构

链式调用是我们在写程序时候的一般流程,为了完成一个整体功能会将其拆分成多个函数(或子模块),
比如模块A调用模块B,模块B调用模块C,模块C调用模块D。但在大型分布式应用中,系统间的RPC交互繁杂。

一个功能背后要调用上百个接口并非不可能,从单机架构过渡到分布式微服务架构的通例,这种架构存在问题:

  • 系统之间接口耦合比较严重
  • 面对大流量并发时,容易被冲垮
  • 等待同步存在性能问题

🔶 系统之间接口耦合比较严重

每新增一个下游功能,都要对上有的相关接口进行改造。

举个例子:假如系统A要发送数据给系统B和C,发送给每个系统的数据可能有差异,因此系统A对要发送给每个系统的数据进行了组装,然后逐一发送。

当代码上线后又新增了一个需求:,把数据也发送给D,新上了一个D系统也要接受A系统的数据。此时就需要修改A系统,让他感知到D的存在,同时把数据处理好再A给D。在这个过程中你会看到,每接入一个下游系统,都要对A系统进行代码改造,开发联调的效率很低。其整体架构如下图:
在这里插入图片描述
🔶 面对大流量并发时,容易被冲垮

每个接口模块的吞吐能力是有限的,这个上限能力如果堤坝,当大流量(洪水)来临时,容易被冲垮。

举个栗子秒杀业务:

上游系统发起下单购买操作:下单

下游系统完成秒杀业务逻辑:读取订单,库存检查,库存冻结,余额检查,余额冻结,订单生成,余额扣减,库存扣减,生成流水,余额解冻,库存解冻

🔶 等待同步存在性能问题

RPC接口基本上是同步调用,整体的服务性能遵循“木桶理论”,即整体系统的耗时取决于链路中最慢的那个接口。

比如A调用B/C/D都是50ms,但此时B又调用了B1,花费2000ms,那么直接就拖累了整个服务性能。

在这里插入图片描述

根据上述的几个问题,在设计系统时可以明确要达到的目标

1 要做到系统解耦,当新的模块接进来时,可以做到代码改动最小。能够解耦
2 设置流量缓冲池,可以让后端系统按照自身吞吐能力进行消费,不被冲垮。能够削峰
3 强弱依赖梳理能将非关键调用链路的操作异步化并提升整体系统的吞吐能力。能够异步

四、作用定义

面向消息的中间件(messageloriented middleware)MOM能够很好的解决以上问题。

是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等功能。

大致的过程是这样的:发送者把消息发送给消息服务器,消息服务器将消息存放在若干队列/主题中,在合适的时候,消息服务器会将消息转发给接受者。

队列:发短信,一个人发给一个人,一对一
主题:发公众号,订阅的人都能接收到,一对多

在这个过程中,发送和接受是异步的,也就是发送无需等待,而且发送者和接受者的生命周期也没有必然关系;尤其在发布pub/订阅sub模式下,也可以完成一对多的通信,即让一个消息有多个接受者。
在这里插入图片描述
🔶 采用异步处理模式

消息发送者可以发送一个消息而无须等待响应。消息发送者将消息发送到一条虚拟的通道(主题或队列)上;消息接收者则订阅或监听该通道。一条信息可能最终转发给一个或多个消息接收者,这些接收者都无需对消息发送者做出同步回应。整个过程都是异步的。

也就是说,一个系统跟另外一个系统之间进行通信的时候,假如系统A希望发送–个消息给系统B,让他去处理。但是系统A不关注系统B到底怎么处理或者有没有处理好,所以系统A把消息发送给MQ,然后就不管这条消息的“死活”了,接着系统B从MQ里消费出来处理即可。至于怎么处理,是否处理完毕,什么时候处理,都是系统B的事儿,与系统A无关。
在这里插入图片描述
这样的一一种通信方式,就是所谓的“异步”通信方式对于系统A来说,只要把消息发给MQ,然后系统B就会异步的去进行处理了,系统A不需要“同步”的等待系统B处理完。这样的好处是什么呢?两个字:解耦。

🔶 应用系统之间解耦合

发送者和接受者不必了解对方,只需要确认消息;

发送者和接受者不必同时在线。

🔶 项目举例
在这里插入图片描述
放水快:下单支付快

出水慢:仓储系统的业务处理慢

支付后,完成支付业务、创建订单后,即可认为支付成功。仓储系统的服务将在后续慢慢解决。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望天边星宿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值