当前位置: 首页>数据库>正文

mQ的削峰和redis对比 mq削峰原理

一、MQ的意义

  主要目的 :解耦、异步、削峰

  解耦:一个业务需要多个模块共同实现,或者一条消息有多个系统需要对应处理,只需要主业务完成以后,发送一条MQ,其余模块消费MQ消息,即可实现业务,降低模块之间的耦合

  异步:主业务执行结束后从属业务通过MQ,异步执行,减低业务的响应时间,提高用户体验

  削峰:高并发情况下,业务异步处理,提供高峰期业务处理能力,避免系统瘫痪

 

二、MQ的优点

  优点:解耦、异步、削峰

  缺点:1、系统可用性降低。依赖服务也多,服务越容易挂掉。需要考虑MQ瘫痪的情况

     2、系统复杂性提高。需要考虑消息丢失、消息重复消费、消息传递的顺序性

     3、业务一致性。主业务和从属业务一致性的处理

 

三、常用MQ

  常用MQ : rocketmq、rabbitmq、activemq、kafka

  rocketmq:alibaba使用Java语言开发的MQ,2012年开源,交由Apache管理,支持消息重复消费,目前社区不算活跃

  rabbitmq:使用erlang语言开发,高并发性能好,社区活跃最高,支持消息持久化

  activemq:社区活跃度搞,支持消息持久化

  kafka:性能好(吞吐量、TPS)

 

四、MQ的区别

              

mQ的削峰和redis对比 mq削峰原理,mQ的削峰和redis对比 mq削峰原理_解耦,第1张

 

五、MQ常见问题的解决

 1、如何保证高可用

    集群部署,详情各MQ集群部署方案

 

 2、如何保证消息不被重复消费,保证消息的幂等性

   a、消息消费前,先通过业务校验是否消费国

   b、通过数据库索引,保证消息只消费一次

 

 3、如何保证消息可靠传输,不被丢失

   生产者丢失

   MQ中丢失

   消费端丢失

 

 4、如何保证消息顺序性

   参考各MQ实现细节

 

 5、如何解决消息队列积压问题

   先修复consumer的问题,确保其恢复消费速度

   创建一个新的topic,空间是原先的10倍,queue也创建原先的10倍

   写一个临时的consumer程序,去消费积压的消息,消费之后不做特殊处理,直接轮询写入临时创建的queue里面,直至消费结束

   临时征用10倍的机器来部署原先的xonsumer,每一个消费一个临时的queue。等消费完,恢复原先部署的架构

 

 6、如何解决消息失效的问题

   消息如果长期积压,达到消息的有效日期,就会过期。可以采取批量重导,就是先临时大量消费消息(存储消息到数据库,或者日志,或者redis),等高峰过了以后,通过程序恢复消息,重新消费

 

 

 六、MQ面试题

 

 


https://www.xamrdz.com/database/6fn1961134.html

相关文章: