1、MQ的意义面试
主要目的 :解耦、异步、削峰redis
解耦:一个业务须要多个模块共同实现,或者一条消息有多个系统须要对应处理,只须要主业务完成之后,发送一条MQ,其他模块消费MQ消息,便可实现业务,下降模块之间的耦合数据库
异步:主业务执行结束后从属业务经过MQ,异步执行,减低业务的响应时间,提升用户体验架构
削峰:高并发状况下,业务异步处理,提供高峰期业务处理能力,避免系统瘫痪并发
2、MQ的优势异步
优势:解耦、异步、削峰高并发
缺点:一、系统可用性下降。依赖服务也多,服务越容易挂掉。须要考虑MQ瘫痪的状况性能
二、系统复杂性提升。须要考虑消息丢失、消息重复消费、消息传递的顺序性.net
三、业务一致性。主业务和从属业务一致性的处理日志
3、经常使用MQ
经常使用MQ : rocketmq、rabbitmq、activemq、kafka
rocketmq:alibaba使用Java语言开发的MQ,2012年开源,交由Apache管理,支持消息重复消费,目前社区不算活跃
rabbitmq:使用erlang语言开发,高并发性能好,社区活跃最高,支持消息持久化
activemq:社区活跃度搞,支持消息持久化
kafka:性能好(吞吐量、TPS)
4、MQ的区别
5、MQ常见问题的解决
一、如何保证高可用
集群部署,详情各MQ集群部署方案
二、如何保证消息不被重复消费,保证消息的幂等性
a、消息消费前,先经过业务校验是否消费国
b、经过数据库索引,保证消息只消费一次
三、如何保证消息可靠传输,不被丢失
生产者丢失
MQ中丢失
消费端丢失
四、如何保证消息顺序性
参考各MQ实现细节
五、如何解决消息队列积压问题
先修复consumer的问题,确保其恢复消费速度
建立一个新的topic,空间是原先的10倍,queue也建立原先的10倍
写一个临时的consumer程序,去消费积压的消息,消费以后不作特殊处理,直接轮询写入临时建立的queue里面,直至消费结束
临时征用10倍的机器来部署原先的xonsumer,每个消费一个临时的queue。等消费完,恢复原先部署的架构
六、如何解决消息失效的问题
消息若是长期积压,达到消息的有效日期,就会过时。能够采起批量重导,就是先临时大量消费消息(存储消息到数据库,或者日志,或者redis),等高峰过了之后,经过程序恢复消息,从新消费
6、MQ面试题