使用MQ消息队列的优缺点

使用MQ消息队列的优缺点

## 首先要知道,为什么要用Mq,说白了就是以下3点

解耦

   **就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。其实这个调用是不需要直接同步调用接口的,   皆可以用MQ给他异步化解耦。**

在这里插入图片描述
比如 : 像如图所示 a系统和其他系统没有直接的关联 那我们进行扩展的时候也会更灵活

消峰

在这里插入图片描述

  如图所示  ,  不用消息队列的时候,你的每个请求都要进过数据库,但数据库性能有限,这时候你的网站就会有性能瓶颈,但是如果你加入消息队列就会不一样,发送请求给应用服务器然后给消息队列,然后直接返回,由消息队列异步写入数据库,提升性能

异步在这里插入图片描述

如上图所示, 不用消息队列,
你完成一项注册流程 需要 注册—>发短信----》发送激活邮件----》发微信验证 一共需要20秒

如果使用了 消息队列

注册 +(发短信+发邮件+微信验证) = 5+ 5 =10秒

性能提升一倍


–那MQ有哪些缺点

1》 系可用性降低****:引入的依赖越多,越容易挂掉

              比如图1中的MQ分布式消息队列一旦宕机  ,你整个服务就jj了**

2 》 系统复杂性提高:强行使用MQ 会有出现 消息丢失,消息重复消费,消息顺序不对**

          比如 A系统发生消息给b系统,但b系统没有及时会有 这个时候你怎么办?  重发?还是算失败?
         一般为了消息一定被消费,我们一般选择重新发送,这样一来就会出现  重复消费

      还有  比如  你上某宝买东西,正确的顺序应该是    下单 ——----》 付钱---》生成订单
      一共3条消息 ,就会涉及到 ,3条消息发送给3个系统 ,一旦顺序不对就会出问题,中间要是网络不好还会出现消息丢失的情况

3》一致性问题:一个系统处理完了直接返回成功了,就会以为这请求处理是成功的;但是实际上是,另外的系统那里,可能某几个系统写库成功了,结果有个系统写库失败了,容易导致数据不一致。

               比如 :  还是拿某宝下单的列子 ,用户发送请求给MQ 然后返回下单成功 ,这个时候以为是成功,
               但MQ还要调用  库存系统,金额系统,订单系统,一旦某个系统出息消息失败,就会导致明明下单了,钱也扣了,但库存就是不减少。

----------------------------------最后总结

 MQ  能一定程度提高你的性能 ,但也会引入很多坑 ,所以  mq有风险,使用需谨慎,  后面给大家分享  怎么针对这些问题做一些补偿,每个MQ的
 补偿都不一样,会说说一些常用的  比如  RocketMQ  kafaka   RabbitMQ  ActiveMq  他们是怎么解决这些问题的    好  下次见  我是killer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值