MQ高级-集群分类

请添加图片描述
个人名片:

博主酒徒ᝰ.
个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志三人行,必有我师焉。

请添加图片描述
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

五、MQ集群

1. 集群分类

在当今的计算机世界中,消息队列(Message Queue,MQ)是一种非常重要的技术,它用于处理分布式系统中的异步事件。当多个系统或组件需要相互通信时,消息队列提供了一种灵活、可靠的机制。为了满足不同的需求,MQ 集群分为两种主要模式:普通集群和镜像集群。

普通集群
普通集群是一种分布式集群,它通过将队列分散到集群的各个节点,从而提高整个集群的并发能力。在这种模式下,队列元数据(包括队列名称和属性)和交换器元数据(包括交换器名称、类型和属性)会在集群的各个节点之间共享。当一个消息发布到交换器中时,实际上是将消息上的路由键与交换器的绑定列表进行匹配,然后将消息路由出去。集群中的每个节点都有完整的交换器拷贝,这样在所有节点上传递交换器消息将会变得简单很多。
然而,这种模式的缺点是存储空间和性能的限制。因为每个节点都需要存储所有队列的完整数据拷贝,所以如果存储空间不足,可能会导致集群的性能积压能力降低。同时,由于每个消息都需要触发磁盘活动,可能会引发整个集群内的性能负载急剧拉升。

镜像集群
镜像集群是在普通集群的基础上添加了主从备份功能的一种模式,从而提高集群的数据可用性。在这种模式下,只有主节点才拥有队列的完整数据拷贝,而从节点仅存储与自己相关的数据。当主节点出现故障时,从节点将会接管主节点的数据并继续提供服务。
虽然镜像集群支持主从备份功能,但主从同步并不是强一致的,某些情况下可能有数据丢失的风险。因此,在 RabbitMQ 的 3.8 版本以后,推出了新的功能:仲裁队列来代替镜像集群,底层采用Raft协议确保主从的数据一致性。

总的来说,MQ 集群的两种主要模式各有优缺点。在选择使用哪种模式时,需要根据实际需求和环境来权衡。如果你的应用场景对并发能力和数据可用性都有较高的要求,那么可能需要同时使用普通集群和镜像集群。

RabbitMQ的是基于Erlang语言编写,而Erlang又是一个面向并发的语言,天然支持集群模式。RabbitMQ的集群有两种模式:

  • 普通集群:普通集群是一种分布式集群,将队列分散到集群的各个节点,从而提高整个集群的并发能力。但是这种集群有一个缺点就是如果一个节点宕机,它对应的队列和消息就会丢失。

  • 镜像集群:镜像集群是一种主从集群,在普通集群的基础上添加了主从备份功能,提高集群的数据可用性。镜像集群虽然支持主从,但主从同步并不是强一致的,某些情况下可能有数据丢失的风险。因此在 RabbitMQ 的3.8版本以后,推出了新的功能:仲裁队列来代替镜像集群,底层采用Raft协议确保主从的数据一致性。

镜像集群虽然支持主从,但主从同步并不是强一致的,某些情况下可能有数据丢失的风险。因此在RabbitMQ的3.8版本以后,推出了新的功能:仲裁队列来代替镜像集群,底层采用Raft协议确保主从的数据一致性。

MQ集群的作用:

  • 实现高可用性:如果集群中的某些消息中间件服务器不可用,客户端还可以连接到其他服务器接收消息,不至于影响业务。
  • 负载均衡:在高并发场景下,单台消息中间件服务器能处理的消息有限,可以分发给多台服务器处理,减少消息延迟。
  • 数据冗余:集群中各节点互相同步消息,从而实现了数据的冗余,一旦后端有多台消息中间件服务器宕机,通过对后端多台消息中间件做负载均衡,使得每个节点能够分担一部分流量,同时对客户端访问提供一个统一的访问接口。

猜你喜欢

转载自blog.csdn.net/m0_65144570/article/details/133151060