MQ消息队列应用

热度:5632022-03-29 20:07 收藏 0 点赞 0

MQ消息队列,相信有三年以上开发经验的人都不陌生,而且经常会被面试官问到,那么消息队列的应用和消息队列存在的问题有哪些?本章节将用我自己的方式讲解消息队列。


一想起消息队列,脑海里就浮现几个关键词:异步削峰高并发解藕


消息队里其实是一种数据结构里面的先进先出模型。实际运用中,将消息队列做成一种服务代理,如RabbitMQ,kafka,RocketMQ


为什么要使用消息队列呢?

举个例子,在一个购物系统中,有三个模块,分别是:下单,减库存,仓储。这三个服务器都在一个系统里面,每次执行用户购买操作,就需要执行三个模块,每个模块消费1秒,三个模块就需要消费3秒,加入消息队列后,相当于多了一个中间协调器,我可以把用户下单操作这个信息发到MQ消息队列里面,由消息队列将信息分别发送到三个服务中,原本的三个模块做出三个微服务,给MQ做消费者,消费MQ发来的消息,相当于1秒就将信息发送到三个服务里面处理,处理完返回给前台用户即可,大大减少了时间。


上面举例的就是简单的MQ消息队列经常用到的异步处理,那除了异步处理,MQ也经常用于高并发的场景。


同样是下单购买操作,如果一次性涌入5000人购买,肯定会造成并发,数据库最高响应1000个线程处理,很快就会把数据库服务器搞死,这个时候,使用MQ队列就可以限制涌入的人群,将所有购买下单的信息发送到消息队列里面,而消息队列严格控制在1000个线程发送给数据库处理,这样就不会因为一下子流量暴增造成数据阻塞,服务器卡死的情况。


在高流量的这段时间后,因为堆积很多消息在MQ里面,所以MQ还会继续向数据库发送1000个单子处理量,会延续一段时间,这也就是我们抢购时经常看到的,您正在排队,实际就是这种场景。这其实就是MQ消息队列的另一个常见功能:削峰填谷,将大流量控制在一定的处理量上,避免服务器卡死。


MQ消息队列另一个用途就是解藕,什么叫解藕?就是解决多个程序耦合的情况。


在下单操作下,其实还有很多其他的服务,比如增加积分,赠送优惠券等等,这些是比较低关联的操作,如果在原来系统中,将这些所有的模块都放在同步进行,那么一个步骤出错,整个下单将不能够继续运行,这就会出现很大问题。引入MQ队列后,我们把消息发送到MQ里面缓存,出故障后也不必担心,其他微服务还在持续运行,等故障修复了,再去订阅MQ里面的消息,进行后续处理即可。


说了那么多MQ消息队列的好处,那肯定也有一些不好的地方,下面我就一一举例说明,并提出解决方案。


降低系统可用性

可用性就是重复使用的意思,比如以前只需要维护三个功能模块就行了,现在加入MQ后,需要增加一个功能模块的维护。

加大了系统复杂度

原本三个功能模块运行是很简单的系统,加了MQ后,所有的功能运行都依赖MQ来保证,这就导致系统复杂度提高。

数据一致性问题

使用MQ都是异步处理,如何保证数据一致性?比如下单购买,用户下单后,库存服务出错,并未减少库存,会导致超卖的情况,这个是很严重的事故。

那么如何避免呢?其实我们需要把强一致性的功能放到同一个微服务里面,这样就能够减少这种情况,比如下单和减少库存,这两个功能是强一致性,而积分增加是弱一致性,可以放到一个微服务里面处理。

还有就是通过分布式锁来解决数据一致性问题,我们通常情况遵守“最终一致性”原则,保证搞可用,牺牲数据强一致性,只要最终结果正确就好。

消息丢失问题

纵然消息丢失是很低概率的事情,但是还是会发生,那么如何解决消息丢失的问题呢?

其实只需要发送消息的时候,增加一个消息记录表,定时记录每个消息,等消息处理后,删掉对应的消息,同时设置一个定时器,循环检测消息是否超时没有处理,这样就可以避免消息没有接收到了。

消息执行顺序问题

在购买下单支付的流程下,把下单支付做成两个服务,将消息投递到MQ队列后,有时候,处理消息耗时不同,导致消息顺序错乱,可能支付的消息先到达,但是扣除库存消息还未处理完。

解决方法:我们是否遵循“最终一致性”,客户是否需要知道中间状态,如果不需要知道,那么就不用去考虑,如果客户需要知道,那么应该先处理下单,然后将后续状态的消息继续放入队列,按照顺序处理。



暂无评论
登录后才可以评论~立即登录

如何获取资源?

您可以关注底部公众号,回复文章提示的 “ 关键词 ” 获取对应资源。

每日分享

每日分享收集的网络资源,其中包含开源项目、小工具、常用软件,以及音频视频、电子书籍等。

外卖天天领红包,饿了么,美团红包天天都有!

外卖天天领红包,饿了么,美团红...

最低每顿可省2元

分享两个远程工具-ToDesk和向日葵

分享两个远程工具-ToDesk和向日葵...

在工作生活中经常用到远程,QQ远程很卡,第三方远程工具就比较方便了。

爱奇艺万能播放器2018年完整版

爱奇艺万能播放器2018年完整版

2018年的爱奇艺万能播放器,功能齐全,没有广告!

分享500套个人求职简历模板

分享500套个人求职简历模板

500套免费求职简历下载!

一款最近很火的自动跳过广告APP,无root直装版

一款最近很火的自动跳过广告APP,...

自动跳过广告,无需root

WPS免费去广告电脑软件

WPS免费去广告电脑软件

wps广告实在太多了,下载一个去广告版本