【消息队列使用场景】

概览

本文将从多个方面阐述消息队列的使用场景,如应用解耦、异步提速、削峰填谷。

应用解耦

两个应用之间想要进行通信或者传递消息,有多重方式,可以通过应用之间直接调用的方式,但是这样会让应用之间的耦合性变得很强,容错性就会降低,可维护性也会降低。
比如,应用A想要给应用B发消息,如果应用B没有启动,则A调用B就会失败,这种场景下,B就必须要在A之前启动,并且是在可用状态,给A和B增加了许多限制,两个应用之间相关调用,都还好,处于可控范围内,但是有些场景下,需要A给其他10个服务发消息,B、C、D、E、F…等等,就需要A在这10个系统启动之后再启动,如果发送失败了,还需要记录下对哪个系统发送失败了,还需要定时重新发送。并且,后面还可以继续增加5个甚至10个让A发送消息的系统。
上述说的种种问题,都可以使用消息队列来解决。比如,使用kafka,只需要创建一个主题topic-A,应用A往kafka的topic-A发送消息,应用B、C、D、E、F监听kafka的topic-A,并创建各自的消费者组,这样,B、C、D、E、F都可以获取到应用A发送的每条消息。
并且,消息队列还可以实现数据高可用,比如,kafka可以针对toppic-A创建replication(复制、副本),每条消息都保存多个文件在多个机器上,即使kafka集群的一个机器宕机了,还有其他kafka节点可以使用。

异步提速

如果一个业务链条比较长,需要执行很多步骤才能完成,并且执行的时间也比较长,消息队列也可以达到异步的效果。
比如外卖业务当中,从用户下单,到商家制作商品,到骑手取商品,到骑手配送完成,可能会历时好几个小时。如果采用普通的代码调用,A调用B的方式进行调用,需要调用很多服务,比如需要调用库存服务、商家服务、骑手服务、积分系统等等,这种形式的调用简直不可想象。
在这里插入图片描述

而消息队列则可以解决这个难题,比如用户只需要支付成功,并发送一条消息给kafka的topic,就完成下单过程,后续的商家接单、骑手配置都通过消息队列来完成。当然,这只是一个简单的例子,实际的业务代码中,可能要复杂很多。
采用消息队列来进行异步提速,用户下单时,只需要写数据库+发送消息队里的时间,用户就可以完成下单。如果不使用消息队列,直接调用,可能就需要5秒才调用完成,使用消息队列之后,可能1秒就调用完成了。
意义:提升用户体验和系统吞吐量(单位时间内处理请求的数目)
在这里插入图片描述

削峰填谷

系统能够承受的QPS是1000,系统平时的QPS在200至5000之间波动,流量洪峰到来的时候,可能是5000,系统承受不了,这时,就可以把请求先积压在MQ中,限制消费者的QPS为1000,高峰就被削掉了,达到了“削峰”的效果。消息队列中就会存在一定的消息积压,消费者的QPS就会稳定在1000,直到积压的消息被消费完成,就达到了“填谷”的效果。
意义:使用MQ后,达到削峰填谷的效果,提高了系统的稳定性。如果不使用消息队列,流量洪峰到来的时候,超出系统承受能力太多,如果系统没有做限流之类的配置,有可能直接会让系统崩溃。
在这里插入图片描述

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值