RabbitMQ在高可用性上主要有三种方式:
普通集群模式:
在多台机器上启动多个MQ实例,其中一台上存放queue的元数据和消息,其他的实例从这个实例上拉取数据。
这种方式不存在高可用性,当存放queue和消息的节点挂调的时候,整个就玩完了。这种设计仅仅是增加一下MQ的吞吐量。带来的缺点就是在集群内部会产生大量的数据传输。
镜像集群模式
所谓镜像就是将queue和消息内容在每一个节点上都拷贝一份,每个节点上的数据都完全一样,这样挂了任何一个节点都可以从另一个节点上获取数据。以此实现高可用的特性。但是缺点就是
- 每个机器上都存放所有的queue,本身就没有分布式可言,对于queue数量是没法线性拓展的。
- 另一个是生产者每一次发送消息到MQ,都要执行节点间的数据拷贝,这样带来的网络开销也是非常大的。另外节点之间的数据拷贝是否完整,如何保证。
网友评论