MQ面试必问系列 - MQ的引用场景以及MQ的优缺点
有关MQ的面试题 - MQ的引用场景以及MQ的优缺点
项目中为什么要用MQ?通过调用接口也可以实现啊?
面试官的考察点
- 主要考察的知识点是MQ的使用场景。
- 期望面试者回答的是:哪个业务遇到了什么技术难点,如果不使用MQ的话有哪些问题?通过使用MQ解决了什么问题?
MQ的使用场景
使用场景很多总体可以概述为三大点:解耦,异步,削峰
解耦:
-
顾名思义就是接触项目之间的耦合程度,如下图所示:
除了上述的代码变动,还有涉及如下问题。- A系统和B系统的通讯超时怎么办?
- C系统挂掉怎么办?
- A系统是否需要做重试机制?等等…
下面我们来看一下使用MQ是什么情况,如下图所示:
面试技巧
- 你只需要想一下项目会不会出现这种一个系统中会不会出现一个请求,会发往不同的系统中,系统之家调用比较复杂,维护起来比较麻烦,但是其实这个这个调用是不需要同步直接返回结果的,如果使用MQ异步华解耦。这个要结合自己的项目去思考一下。
异步
- 我们先看一下同步请求的弊端如下图所示
示例只是简单的描述并不代表实际的流程和消耗时间只是拿来举例子。 - 下面我们看一下使用MQ之后的示例图:
削峰
- 这里的削峰是指流量分割。
- 我们系统每天上午12点到1点的时候订单量特别大,一秒5000单,其他时间点每秒可能就100单,但是呢我们系统的承受能力一秒最多2000单,那如果我们不做削峰的系统可能就挂掉了。
- 下图展示如何使用MQ进行削峰。
MQ的优点和缺点?
-
上述讲的都是MQ的优点,任何技术使用的时候都会关注技术给我们带来的那些便利,同时要注意使用新技术存在那些隐患。下面我们来讲一下项目中引用MQ带来那些问题。
- 系统可用性降低 系统引入外部依赖越多,可用性就会越低。原本就是简单的A系统调用BCD等,将MQ引入之后,MQ如果挂掉了整个系统都会停止运转。
- 系统的复杂性提高 引入MQ就会带啦一系列的问题,例如如何保证消息不重复,如何保证消息不丢失,如何保证消息的顺序性等等(这些问题会在后续的文章中一一解答,因为这些是高频的面试题)
- 一致性问题 如果A系统发送MQ成功了返回给用户是成功的,用户认为此次请求是ok的,如果后续的BCD在消费的过程中失败了怎么办,数据就不一致了等
-
kafka、activemq、rabbitmq、rocketmq都有什么优点和缺点啊?
-
常见的MQ其实就这几种,别的还有很多其他MQ,但是比较冷门的,那么就别多说了
-
下面以表格的形式去看一下各种的优缺点