RabbitMQ 部署方式选择

news2024/11/18 11:24:57

部署模式

RabbitMQ支持多种部署模式,可以根据应用的需求和规模选择适合的模式。以下是一些常见的RabbitMQ部署模式:

  • 单节点模式: 最简单的部署方式,所有的RabbitMQ组件(消息存储、交换机、队列等)都运行在单个节点上。适用于小型应用或者开发和测试环境,但不具备高可用性和容错能力。

  • 集群模式: RabbitMQ集群由多个节点组成,分布在不同的物理服务器上。集群提供高可用性和容错性,其中一个节点出现故障时,其他节点可以继续提供服务。集群模式需要仔细的配置和管理,以确保数据同步和故障转移的正确性。

  • 镜像队列模式: 镜像队列模式是集群模式的一种变体,用于提供队列级别的高可用性。队列的内容被复制到集群中的多个节点上,确保在节点故障时仍然可以访问数据。

  • 仲裁队列模式:仲裁队列模式是镜像队列的替代方案,用于提供队列级别的高可用性。队列内容被复制集群中的多个节点上,通过raft算法保证数据的一致性。使用仲裁队列时,需要保证集群至少有一半以上节点可用。

  • 双机房模式:用于保证在其中一个机房MQ服务不可用时,可以将服务切换到另一个机房,避免单机房故障。该方案对机房间、机房内部网络都有很高要求,否则会有很多可靠性问题。

单机部署模式

单机部署模式是最简单的部署模式,该模式下RabbitMQ不具备高可用性: MQ节点下线后,所有依赖RabbitMQ的服务将无法提供服务。
在这里插入图片描述

优点

  • 简单易部署:单节点部署非常简单,不需要复杂的配置或管理。

  • 适用于小型应用:对于小型应用或开发/测试环境,单节点部署足够满足需求。

  • 成本低廉:由于只需部署单个节点,因此硬件和资源需求较低,成本相对较低。

缺点

  • 容错性差:单节点部署的容错性较差,如果节点出现故障,整个系统可能会中断。没有故障转移或冗余机制来保证可用性。

  • 扩展性有限:无法满足大规模应用的需求,无法水平扩展来提高性能和处理能力。

  • 单点故障:由于只有一个节点,所以存在单点故障的风险,一旦节点出现问题,整个消息传递系统将不可用。

  • 无法实现高可用性:缺乏故障转移和冗余机制,因此无法实现高可用性和持久性,消息可能会丢失或不可达。

使用场景

开发环境。

集群模式

普通集群模式下,队列数据节点分布在各节点中,具备较好的负载均衡能力,需要注意:该模式下如果有节点下线则该节点上的队列状态会变成down状态,正在消费队列消息的消费者也将会被下线。
在这里插入图片描述

优点

  • 具备负载均衡能力:相比于单点部署模式,普通集群模式下,不同队列的消息生产者和消费者可以连接到不通过节点,节点之间通过内部代理的方式将消息发送请求和消费请求转发到内部数据节点。

  • 可用性相比于单点模式有增强:单个节点进程不可用后,只要队列数据不可用的节点不是队列数据所在节点,则队列可用性不受影响。

缺点

队列数据缺少副本,队列数据所在节点不可用后, 和队列相关的消息将不会进入队列,队列中的消息将无法消费。

使用场景

对性能要求较高,但是对队列可用性较低的场景。

镜像队列模式

镜像集群模式下,非临时队列会有多个副本(分master副本和slave副本)分散在各节点下,单个节点下线不影响整体可用性。镜像队列内部采用可靠组播方式来保证集群内各副本数据的一致,对网络稳定性有很高要求。需要注意的是:启用了镜像模式后,消息需要在多个节点之间同步,性能相对单节点或者普通节点而言会有降低,且镜像队列副本数越多性能损失越大。
在这里插入图片描述

优点

  • 相比于普通集群,镜像队列支持队列级别的高可用,部分节点出现不可用故障不会影响队列整体的可用性。

  • 可通过任意一个节点将数据复制到镜像队列副本,客户端无序关心队列master节点位置。

缺点

  • 数据通过可靠性组播方式来完成镜像队列副本数据同步,效率低下,对性能影响较大。

  • 镜像队列副本不支持增量数据同步, 同步时会删除本地数据全量从master副本所在节点拉取数据,拉取数据过程中,集群不可用。

  • 受网络稳定性影响较大,分区恢复过程中不稳定的网络环境容易导致队列crash并进一步引发消费者掉线、消息发送阻塞等现象。

  • RabbitMQ官方已不在维护,计划在4.0版本中删除镜像队列。

使用场景

在MQ 版本低于3.8的版本中推荐使用, 镜像队列是3.8版本之前版本中唯一支持高可用的方案, 为了减少网络分区导致的各种问题,建议使用3节点 + pause_minority模式。

仲裁队列模式

仲裁队列是RabbitMQ官方支持的新一代高可用队列,内部采用Raft算法实现,队列副本也会分leader角色和follow角色,只要一半以上节点可用集群即可用,其在高可用和性能之间做了很好的平衡。
在这里插入图片描述

优点

  • 相比于镜像队列,仲裁队列在一致性算法上做了升级,换成了raft算法,节点同步的容错能力明显增强:只需要一半以上的节点完成同步确认即可认为成功。

  • 相比于镜像队列需要全量同步情况,仲裁也做了优化:支持增量同步,并且同步过程中并不会导致整个集群不可用。

  • 相比于镜像队里,不存在队列副本之间的分区问题。

缺点

  • 低于3.8的版本中不支持仲裁队列

  • 要求集群节点为奇数,部分特性,如优先级不支持,部分特性如ttl,长度限制需要3.10版本支持。

使用场景

新环境对接使用3.10以上版本RabbitMQ 包含3个节点的仲裁队列集群。

双机房模式

多机房部署RabbitMq集群,防止因单机房出问题到时服务不可用。

优点

相比于普通的单机房镜像队列集群,双机房模式下, 可以避免集群出现单机房故障引发的整个集群不可用问题。

缺点

启用双机房模式后,客户端需要开启主机房定位策略来保证所有队列的主副本在主机房的节点上,无法做到队列master副本的负载均衡,且从理论上而言,并不能完全做到所有主副本都在主机房节点

使用场景

针对跨机房MQ的应用场景,官方的建议是不推荐同一个集群内的MQ节点之间跨机房,推荐的做法是各机房MQ集群独立部署,通过sholve或者federation插件来进行数据同步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1466958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis可视化工具——RedisInsight

文章目录 1. 下载2. 安装3. RedisInsight 添加 Redis 数据库4. RedisInsight 使用 RedisInsight 是 Redis 官方出品的可视化管理工具,支持 String、Hash、Set、List、JSON 等多种数据类型的管理,同时集成了 RedisCli,可进行终端交互。 1. 下载…

数组与指针相关

二级指针与指针数组 #include <stdio.h> #include <stdlib.h> int main() { // 定义一个指针数组&#xff0c;每个元素都是一个指向int的指针 int *ptr_array[3]; // 为指针数组的每个元素分配内存 ptr_array[0] malloc(2*sizeof(int)); ptr_array[1] m…

转运机器人,AGV底盘小车:打造高效、精准的汽车电子生产线

为了满足日益增长的市场需求&#xff0c;保持行业领先地位&#xff0c;某汽车行业电子产品企业引入富唯智能AMR智能搬运机器人及其智能物流解决方案&#xff0c;采用自动化运输措施优化生产节拍和搬运效率&#xff0c;企业生产效率得到显著提升。 项目背景&#xff1a; 1、工厂…

PyTorch概述(二)---MNIST

NIST Special Database3 具体指的是一个更大的特殊数据库3&#xff1b;该数据库的内容为手写数字黑白图片&#xff1b;该数据库由美国人口普查局的雇员手写 NIST Special Database1 特殊数据库1&#xff1b;该数据库的内容为手写数字黑白图片&#xff1b;该数据库的图片由高…

GitCode配置ssh

下载SSH windows设置里选“应用” 选“可选功能” 添加功能 安装这个 坐等安装&#xff0c;安装好后可以关闭设置。 运行 打开cmd 执行如下指令&#xff0c;启动SSH服务。 net start sshd设置开机自启动 把OpenSSH服务添加到Windows自启动服务中&#xff0c;可避免每…

mysql的日志文件在哪?

阅读本文之前请参阅----MySQL 数据库安装教程详解&#xff08;linux系统和windows系统&#xff09; MySQL的日志文件通常包括错误日志、查询日志、慢查询日志和二进制日志等。这些日志文件的位置取决于MySQL的安装和配置。以下是一些常见的日志文件位置和如何找到它们&#xff…

【kubernetes】二进制部署k8s集群之,多master节点负载均衡以及高可用(下)

↑↑↑↑接上一篇继续部署↑↑↑↑ 之前已经完成了单master节点的部署&#xff0c;现在需要完成多master节点以及实现k8s集群的高可用 一、完成master02节点的初始化操作 二、在master01节点基础上&#xff0c;完成master02节点部署 步骤一&#xff1a;准备好master节点所需…

调用 Python 函数遗漏括号 ( )

调用 Python 函数遗漏括号 1. Example - error2. Example - correctionReferences 1. Example - error name "Forever Strong" print(name.upper()) print(name.lower)FOREVER STRONG <built-in method lower of str object at 0x0000000002310670>---------…

【ArcGIS】利用高程进行坡度分析:区域面/河道坡度

在ArcGIS中利用高程进行坡度分析 坡度ArcGIS实操案例1&#xff1a;流域面上坡度计算案例2&#xff1a;河道坡度计算2.1 案例数据2.2 操作步骤 参考 坡度 坡度是地表单元陡缓的程度&#xff0c;通常把坡面的垂直高度和水平距离的比值称为坡度。 坡度的表示方法有百分比法、度数…

单片机04__基本定时器__毫秒微秒延时

基本定时器__毫秒微秒延时 基本定时器介绍&#xff08;STM32F40x&#xff09; STM32F40X芯片一共包含14个定时器&#xff0c;这14个定时器分为3大类&#xff1a; 通用定时器 10个 TIM9-TIM1和TIM2-TIM5 具有基本定时器功能&#xff0c; 还具有输入捕获&#xff0c;输出比较功…

yarn install:unable to get local issuer certificate

一、问题描述 今天在Jenkins上发布项目时&#xff0c;遇到一个报错&#xff1a; error Error: unable to get local issuer certificateat TLSSocket.onConnectSecure (node:_tls_wrap:1535:34)at TLSSocket.emit (node:events:513:28)at TLSSocket._finishInit (node:_tls_w…

PLC_博图系列☞基本指令“取反RLO”

PLC_博图系列☞基本指令“取反RLO” 文章目录 PLC_博图系列☞基本指令“取反RLO”背景介绍取反RLO说明示例 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 取反RLO 背景介绍 这是一篇关于PLC编程的文章&#xff0c;特别是关于西门子的博图软件。我并不是专业的PLC…

谷歌Gemma开源了

1、Gemma的表现 自从大模型横空出世之后&#xff0c;大部分大模型都是闭源的&#xff0c;只有少部分模型选择开源。谷歌推出了全新的开源模型系列Gemma&#xff0c;相比谷歌之前的 Gemini模型&#xff0c;Gemma 更加轻量&#xff0c;可以免费使用&#xff0c;模型权重也一并开…

详解编译和链接!

目录 1. 翻译环境和运行环境 2. 翻译环境 2.1 预处理 2.2 编译 2.3 汇编 2.4 链接 3. 运行环境 4.完结散花 悟已往之不谏&#xff0c;知来者犹可追 创作不易&#xff0c;宝子们&#xff01;如果这篇文章对你们…

Vue+SpringBoot打造开放实验室管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…

多窗口编程

六、多窗口编程 QMessageBox消息对话框&#xff08;掌握&#xff09; QMessageBox继承自QDialog&#xff0c;显示一个模态对话框。用于用户前台信息通知或询问用户问题&#xff0c;并接收问题答案。 QDialog的Qt源码中&#xff0c;派生类往往都是一些在特定场合下使用的预设好的…

【Vuforia+Unity】AR03-圆柱体物体识别(Cylinder Targets)

1.创建数据库模型 这个是让我们把生活中类似圆柱体和圆锥体的物体进行AR识别所选择的模型 Bottom Diameter:底部直径 Top Diameter:顶部直径 Side Length:圆柱侧面长度 请注意&#xff0c;您不必上传所有三个部分的图片&#xff0c;但您需要先为侧面曲面关联一个图像&#…

Threejs 实现3D影像地图,Json地图,地图下钻

1.使用threejs实现3D影像地图效果&#xff0c;整体效果看起来还可以&#xff0c;底层抽象了基类&#xff0c;实现了通用&#xff0c;对任意省份&#xff0c;城市都可以只替换数据&#xff0c;即可轻松实现效果。 效果如下&#xff1a; 链接https://www.bilibili.com/video/BV1…

[AutoSar]BSW_Com1 Can通信入门

目录 关键词平台说明一、车身CAN简介二、相关模块三、Can报文分类及信号流路径3.1 应用报文3.2 应用报文&#xff08;多路复用multiplexer&#xff09;3.3 诊断报文3.4 网络管理报文3.5 XCP报文&#xff08;标定报文&#xff09; 关键词 嵌入式、C语言、autosar、OS、BSW 平台…

分散的产品开发团队

分散的产品开发团队指的是各个团队或成员在地理位置上分布在不同地方&#xff0c;通过互联网和现代通讯技术进行协作和沟通&#xff0c;以共同完成产品开发任务的团队模式。 这种团队模式的优势在于可以充分利用各地的人才资源&#xff0c;降低团队的管理和协作成本&#xff0…