面试宝典之为什么使用消息队列?

1、为什么使用消息队列?

面试官心理剖析:
看你平时有没有思考,是不是为了用而用?面试官主要想知道你们是什么业务使用了MQ,没用的时候有什么问题?用了之后给你们带来了哪些好处?

回答:
使用的场景很多,但是把核心的场景说出来就可以了,核心场景有:解耦、异步、削峰;
(1)、解耦:
场景分析:
有A、B、C系统,现在A系统调用B、C系统的接口。又来一个E系统也需要A调用,可能过段时间B系统不需要A调用了。每次变更对A系统的维护人都是很痛苦的。A系统还要考虑如果其他系统挂了怎么办?是否需要重试?这样系统严重的耦合在一起。

(2)、异步:
场景分析:
A系统调用B、C系统,因为是同步调用,用户发起请求到得到响应要花费2s,用户是不能忍受的。
问题解决:
使用MQ,B、C系统的处理时间是异步的,只有A系统的处理时间,在加上调用MQ的时间,那么用户那边可以快速得到响应,使用异步的前提是B、C的结果在A系统中不会使用到

(3)、削峰:
场景分析:
在高峰期的时候,系统每秒的请求量达到5000,那么调用mysql的请求也是5000,一般情况下mysql的请求大概在2000左右,那么在高峰期的时候,数据库就被打垮了,那系统就不可用了。
问题解决:
在系统A前面加个MQ,用户请求先到MQ,系统A从MQ中每秒消费2000条数据,这样就把本来5000的请求变为mysql可以接受的请求数量了,可以保证系统不挂掉,可以继续提供服务。MQ里的数据可以慢慢的把它消费掉

2、消息队列有什么缺点?

面试官心理剖析:
主要是想了解你知不知道MQ的缺点,如果不知道缺点就引入这个框架,那就是挖坑。

回答:
(1)、系统可用性降低:因为引入了MQ,如果MQ挂了,那MQ下流的系统就不可用。
(2)、系统复杂性提高:怎么保证消息不会被重复消费?消息丢失了怎么办?如何保证消息的顺序性?(你可以根据自己遇到的问题都说一下,尽量说一下你熟悉的,因为面试官会根据你说的问题继续提问)
(3)、一致性问题:如果MQ消费端其中一个系统挂了,怎么办?

注意:这里回答的时候尽量选择自己熟悉的场景。面试官肯定会问你那你们是怎么解决的?如果你说不上来那不是给自己挖坑嘛。

个人总结:

中小型公司,技术一般,可以考虑用RabbitMQ;
大型公司,基础架构研发实力较强,用RocketMQ是很好的选择
实时计算、日志采集:使用kafka;

参考http://www.wityx.com

猜你喜欢

转载自blog.csdn.net/u011269762/article/details/83896952