互联网高级Java工程师训练-如何保证MQ的高可用

RabbitMQ的高可用

RabbitMQ是基于主从做高可用的,RabbitMQ有三种模式:单机模式,普通集群模式,镜像集群模式。

  • 单机模式
    一般用在本地,不会用在生产环境。

  • 普通集群模式
    在多台机器上启动多个RabbitMQ实例,每个机器启动一个,但是你创建的queue只会放在一个RabbitMQ实例上,每个实例都同步queue的元数据。消费者消费的时候,如果连接到了另外一个实例,那么这个实例会从queue所在实例上拉取数据过来,这种模式不是分布式,就是个普通集群。因为这导致你要么消费者每次随机连接一个实例然后拉取数据,要么固定连接那个queue所在实例,前者有数据拉取的开销,后者存在单实例性能瓶颈。而且那个queue所在实例宕机了,会导致其他实例无法拉取数据,如果开启了消息持久化,让RabbitMQ落地存储消息的话,得等到这个实例恢复了,才可以继续从这个实例拉取数据。这样也就没有什么高可用而言了,这种方案主要是提高吞吐量的,就是说让集群中多个节点来服务某个queue的读写操作。

  • 镜像集群模式
    RabbitMQ真正的高可用模式,你创建的queue的元数据和消息都会存储在多个实例上,每次写消息到queue的时候,都会自动把消息同步到多个实例queue里。这样的话如果有一个实例不可用,还有其他的实例可用。但是性能开销太大,消息同步所有机器,导致网络带宽压力和消耗很大。同时就也没有什么扩展性了,如果某个queue负载很重,即使加机器,新增的机器也包含了这个queue的所有数据,并没有办法线性扩展queue。不是分布式的。

Kafka的高可用

发布了219 篇原创文章 · 获赞 42 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/Geek_ymv/article/details/102467383