MQ面试必问系列 - 如何保证消息队列的高可用?
#引入消息队列如何保证消息队列的高可用?
- 我们讲完了消息队列的应用场景和优缺点面试中如何回答 https://blog.****.net/qq_33249725/article/details/89854848 ,在项目如果引用MQ会让项目可用性降低,所以面试官很关心你项目中如何处理这个问题?
如何保证消息队列的高可用?
面试官心里分析
- MQ的高可用是MQ的面试中必问的一个面试题,考察面试者在使用MQ的时候有没有相应的思考,而非简单的Api接口调用,如果你对这方面没有思考面试官对你的印象就会很差,说明你只是简单的使用,就算后面可以入职薪水也不会超过20k,因为你设计这个系统的时候肯定会留下很多坑。
首先我们要理解高可用才能更好的回答这个问题。
高可用:简单的来说高可用是让系统变得更加坚固,不容易挂掉(个人白话理解)。
理解了高可用的含义之后解决高可用常用的方法就是集群,同一个实例部署多台机器,一个集群挂掉,不会影响业务的执行。下面就具体的讲一下各种MQ的集群原理。如果面试只是简单的回答集群,会好一点,如果将你项目中用到的MQ集群的模式和原理都能够讲出来,那绝对是加分的。
RabbitMQ集群
rabbitmq有三种模式:单机模式,普通集群模式,镜像集群模式
单机模式
- 单机模式部署在一台机器上,一般都是demo级别的,一般就是你本地启动了玩玩儿的,没人生产用单机模式。
普通集群模式
如下图所示:
镜像集群模式
我们了解了上面的普通集群模式再去理解镜像集群模式就很简单了,镜像集群模式就是讲队列的元数据和消息都存放在每个实例中,这样就省去了MQ之间的数据传输同时也保证了高可用性。
- 如何开启镜像集群,在控制台新增一个策略,选择是否节点之间同步信息即可。然后再去创建Queue
这里只是讲了如何实现高可用,具体的如何集群还需要去自行Google一下各种MQ集群模式
Kafka集群
- 在这里只讲解kafka高可用的部分,如果对其架构想进行深一步了解的话可参考:https://juejin.im/post/5b59c6055188257bcc16738c
- kafka如果保证高可用的可参考下图所示:
相关的名称解释:
其他MQ相关的高可用也类似,针对自己项目中的MQ高可用的原理,可自行Google XXMQ如何实现高可用。