【Java面试题】RabbitMQ如何实现高可用

38 篇文章 1 订阅
20 篇文章 3 订阅
文章讲述了RabbitMQ实现高可用的两种集群模式:普通集群主要同步元数据,不保证Queue高可用;镜像集群则在每个节点存储Queue数据副本,确保高可用,但可能带来性能损耗。此外,通过Keepalived+HAProxy可实现集群负载均衡。
摘要由CSDN通过智能技术生成

“RabbitMQ如何实现高可用”?

大家好,我是Mic,一个工作了14年的Java程序员。

下面我们来分析一下面试官对于这个问题的考察意图

考察目标

这个问题就是简单的考察RabbitMQ相关知识点的了解。

难度并不大,主要考察3年以上开发经验的同学。

但是这个问题只是一个切入点,我认为接下来会根据求职者的背景针对这个问题做更进一步去深度考察。

问题解析

在分布式架构下,高可用是最基础的设计。

也就是说,一旦依赖的某个服务出现故障,不能影响业务的正常执行。

RabbitMQ提供了两种集群模式:

  • 普通集群模式

  • 镜像集群模式

先来看普通集群

这种集群模式下,各个节点只同步元数据,不同步队列中的消息。

其中元数据包含队列的名称、交换机名称及属性、交换机与队列的绑定关系等。

当我们发送消息和消费消息的时候,不管请求发送到RabbitMQ集群的哪个节点。

最终都会通过元数据定位到队列所在的节点去存储以及拉取数据。

很显然,这种集群方式并不能保证Queue的高可用,因为一旦Queue所在的节点挂了,那么这个Queue的消息就没办法访问了。

它的好处是通过多个节点分担了流量的压力,提升了消息的吞吐能力。

第二种是镜像集群

它和普通集群的区别在于,镜像集群中Queue的数据会在RabbitMQ集群的每个节点存储一份。

一旦任意一个节点发生故障,其他节点仍然可以继续提供服务。

所以这种集群模式实现了真正意义上的高可用。

最后,在镜像集群的模式下,我们可以通过Keepalived+HAProxy来实现RabbitMQ集群的负载均衡。

其中:

  • HAProxy是一个能支持四层和七层的负载均衡器,可以实现对RabbitMQ集群的负载均衡

  • 同时为了避免HAProxy的单点故障,可以再增加Keepalived实现HAProxy的主备,如果HAProxy主节点出现故障那么备份节点就会接管主节点提供服务。

    Keepalived提供了一个虚拟IP,业务只需要连接到虚拟IP即可。

好了,这就是RabbitMQ的常见高可用实现方案。

那么在面试的时候,怎么回答比较好呢?

高手:

RabbitMQ高可用实现方式有两种,

  • 第一种是普通集群模式,在这种模式下,一个Queue的消息只会存在集群的一个节点上,集群里面的其他节点会同步Queue所在节点的元数据,消息在生产和消费的时候,不管请求发送到集群的哪个节点,最终都会路由到Queue所在节点上去存储和拉取消息。

    这种方式并不能保证Queue的高可用性,但是它可以提升RabbitMQ的消息吞吐能力

  • 第二种是镜像集群,也就是集群里面的每个节点都会存储Queue的数据副本。

    意味着每次生产消息的时候,都需要把消息内容同步给集群中的其他节点。

    这种方式能够保证Queue的高可用性,但是集群副本之间的同步会带来性能的损耗。

    另外,由于每个节点都保存了副本,所以我们还可以通过HAProxy实现负载均衡。

总结

大家知道怎么回答了吗?

如果你喜欢我的作品,记得点赞收藏加关注哦!!!

另外,我将所有Java面试系列制作成了完整的面试文档。它的便捷之处在于,可以通过检索的方式,找到你想要的面试题,目前已经更新200期,总计超过20W字!

【想领取面试文档的小伙伴可以点击文章底部名片无套路免费赠送给大家!】

需要高手面试文档面试文档的小伙伴可以扫描下方二维码
↓↓↓↓↓↓↓↓↓↓↓↓↓

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跟着Mic学架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值