集群
- 介绍
rabbitmq作为消息代理服务器,对于独立应用来说是简直完美,但是当应用程序需要高可用队列来满足额外的投递保证,或者将rabbitmq作为众多应用程序的消息总线时,rabbitmq内建的集群能力能够跨越多台服务器,提供
强大的内聚环境
- 缺点
集群是按照低延迟环境进行设计,不推荐跨越WAN或者互联网来搭建集群(集群间的状态同步和跨节点的消息投递需要低延迟通信,只有LAN满足);集群的大小问题几维护集群共享状态的工作和开销与集群中节点数量的多少成正比,
所以集群节点的上限在32到64个(集群中的每个节点必须知道集群中其他节点)。
- 集群节点类型
主要分为磁盘节点和内存节点。磁盘节点奖集群的运行状态会同时存储在内存和磁盘上,相比较内存节点,磁盘节点更容易受到磁盘I/O问题的困扰;内存节点仅将运行状态信息存储在内存数据库中。
节点类型不影响消息持久化行为。
当节点或者集群崩溃时,在次盘节点启动并重新加入集群时,会被用来重建集群的运行状态;对于内存节点,当加入集群时不会包含任何运行时状态数据,在重新加入集群时,集群中的其他节点会将诸如队列定义等信息发送给它。
创建集群时,确保至少存在一个磁盘节点(考虑到单点故障,最好是两个),但不是越多越好,当集群多个节点故障时多个磁盘节点对集群的共享状态不一致时,将集群恢复到原来的状态就会有问题,因为不知道以那个磁盘节点为准。
当你需要管理插件时,可以引入另一种节点类型即统计节点,这种节点和磁盘节点搭配使用,统计节点负责收集集群中每个节点的全部统计数据和状态数据。统计节点唯一
- 集群和队列行为
当消息发送到集群中任何一个节点时,该消息会被路由到队列中,无关乎队列中在集群中的位置。当声明一个队列时,该队列会在rpc请求Queue.Declare发送的集群节点上创建。选择在哪个节点上声明队列将对消息的吞吐量和性能造成影响。
如果节点拥有过多的队列、消息发布者和消费者,速度将会变慢,尽量让创建的队列在节点中均衡分配
消费发布的考量,当你向一个节点发送的消息被路由到另一节点上的队列,那么这两个节点之间需要通过一种消息投递保证的方法来协调,增大了开销,影响性能
- 特定节点的消费者</