一个天天用消息队列的人,不知道为啥用 MQ,这就有点尴尬
1、为什么要使用消息队列? 分析:一个用消息队列的人,不知道为啥用,有点尴尬。没有复习这点,很容易被问蒙,然后就开始胡扯了。 回答:这个问题,咱只答三个最主要的应用场景(不可否认还有其他的,但是只答三个主要的),即以下六个字:解耦、异步、削峰 (1)解耦 传统模式: 传统模式的缺点:
中间件模式: 中间件模式的的优点:
(2)异步 传统模式: 传统模式的缺点:
中间件模式: 中间件模式的的优点:
(3)削峰 传统模式 传统模式的缺点:
中间件模式: 中间件模式的的优点:
2、使用了消息队列会有什么缺点? 分析:一个使用了MQ的项目,如果连这个问题都没有考虑过,就把MQ引进去了,那就给自己的项目带来了风险。 我们引入一个技术,要对这个技术的弊端有充分的认识,才能做好预防。要记住,不要给公司挖坑! 回答:回答也很容易,从以下两个个角度来答
但是,我们该用还是要用的。 3、消息队列如何选型? 先说一下,博主只会ActiveMQ,RabbitMQ,RocketMQ,Kafka,对什么ZeroMQ等其他MQ没啥理解,因此只能基于这四种MQ给出回答。 分析:既然在项目中用了MQ,肯定事先要对业界流行的MQ进行调研,如果连每种MQ的优缺点都没了解清楚,就拍脑袋依据喜好,用了某种MQ,还是给项目挖坑。 如果面试官问:"你为什么用这种MQ?。"你直接回答"领导决定的。"这种回答就很LOW了。 还是那句话,不要给公司挖坑。 我们可以看出,RabbitMQ版本发布比ActiveMq频繁很多。至于RocketMQ和kafka就不带大家看了,总之也比ActiveMQ活跃的多。详情,可自行查阅。 再来一个性能对比表 综合上面的材料得出以下两点: (1)中小型软件公司,建议选RabbitMQ. 一方面,erlang语言天生具备高并发的特性,而且他的管理界面用起来十分方便。 正所谓,成也萧何,败也萧何!他的弊端也在这里,虽然RabbitMQ是开源的,然而国内有几个能定制化开发erlang的程序员呢? 所幸,RabbitMQ的社区十分活跃,可以解决开发过程中遇到的bug,这点对于中小型公司来说十分重要。 不考虑rocketmq和kafka的原因是,一方面中小型软件公司不如互联网公司,数据量没那么大,选消息中间件,应首选功能比较完备的,所以kafka排除。 不考虑rocketmq的原因是,rocketmq是阿里出品,如果阿里放弃维护rocketmq,中小型公司一般抽不出人来进行rocketmq的定制化开发,因此不推荐。 (2)大型软件公司,根据具体使用在rocketMq和kafka之间二选一 一方面,大型软件公司,具备足够的资金搭建分布式环境,也具备足够大的数据量。 针对rocketMQ,大型软件公司也可以抽出人手对rocketMQ进行定制化开发,毕竟国内有能力改JAVA源码的人,还是相当多的。 至于kafka,根据业务场景选择,如果有日志采集功能,肯定是首选kafka了。具体该选哪个,看使用场景。 4、如何保证消息队列是高可用的? 分析:在第二点说过了,引入消息队列后,系统的可用性下降。在生产中,没人使用单机模式的消息队列。 因此,作为一个合格的程序员,应该对消息队列的高可用有很深刻的了解。 如果面试的时候,面试官问,你们的消息中间件如何保证高可用的? 如果你的回答只是表明自己只会订阅和发布消息,面试官就会怀疑你是不是只是自己搭着玩,压根没在生产用过。 因此,请做一个爱思考,会思考,懂思考的程序员。 回答:这问题,其实要对消息队列的集群模式要有深刻了解,才好回答。 以rcoketMQ为例,他的集群就有多master 模式、多master多slave异步复制模式、多 master多slave同步双写模式。 (编辑:ASP站长网) |