RabbitMQ 部署方式选择

部署模式

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.mzph.cn/news/699166.shtml

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

相关文章

第九节HarmonyOS 常用基础组件28-Select

1、描述 提供下拉选择菜单&#xff0c;可以让用户在多个选项之间选择。 2、接口 Select(options:Array<SelectOption>) 3、SelectOption对象说明 参数名 参数类型 必填 描述 value ResourceStr 是 下拉选项内容。 icon ResourceStr 否 下拉选项图标。 4…

【前端素材】推荐优质后台管理系统Sneat平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

浏览器录屏技术:探索网页内容的视觉记录之道

title: 浏览器录屏技术&#xff1a;探索网页内容的视觉记录之道 date: 2024/2/23 14:32:49 updated: 2024/2/23 14:32:49 tags: 浏览器录屏技术原理Web API应用场景用户体验在线教育产品演示 在当今数字化时代&#xff0c;浏览器录屏技术已经成为了一种强大的工具&#xff0c;…

​LeetCode解法汇总2583. 二叉树中的第 K 大层和

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一棵二叉树的根节点 root 和一个正整…

Microsoft 365自定义安装软件

如图&#xff0c;在安装类型的步骤的时候&#xff0c;可以勾选自己想要的软件&#xff08;而非一股脑儿的安装一大堆自己不需要的&#xff09;。

HTB pwn Dragon Army

逆向分析 程序使用了alloca函数扩大了栈区 此处可以泄露libc的地址 程序主要功能在下面 while ( 1 ){while ( 1 ){fflush(stdin);fflush(_bss_start);fprintf(_bss_start, "\n%sDragons: [%d/%d]%s\n\n", "\x1B[1;34m", v5, 13LL, "\x1B[1;37m"…

挑战30天学完Python:Day18 正则表达式

&#x1f4d8; Day 18 &#x1f389; 本系列为Python基础学习&#xff0c;原稿来源于 30-Days-Of-Python 英文项目&#xff0c;大奇主要是对其本地化翻译、逐条验证和补充&#xff0c;想通过30天完成正儿八经的系统化实践。此系列适合零基础同学&#xff0c;或仅了解Python一点…

测试开源C#人脸识别模块DlibDotNet

百度“C# 换脸”找到参考文献4&#xff0c;发现其中使用DlibDotNet检测并识别人脸&#xff08;之前主要用的是ViewFaceCore&#xff09;&#xff0c;DlibDotNet是Dlib的.net封装版本&#xff0c;后者为开源C工具包&#xff0c;支持机器学习算法、图像处理等算法以支撑各类高级应…

CVE-2023-44313 Apache ServiceComb Service-Center SSRF 漏洞研究

本次项目基于go语言&#xff08;本人不精通&#xff09;&#xff0c;虽不是java web框架了 &#xff0c;但搭建web服务的框架一些思想理念却是通用的&#xff0c;我们由此可以得到一些蛛丝马迹....... 目录 漏洞简介 漏洞分析 漏洞复现 漏洞简介 Apache ServiceComb Servi…

应用感知型网络性能管理

网络基础设施似乎日益复杂和先进&#xff0c;迫使网络管理员抛弃传统的管理方法。应用感知型网络性能管理是一种用于监控网络性能的新型整体方法&#xff0c;它为管理员提供了强大的 IT 资源管理功能。应用感知型网络性能管理为 IT 管理员带来了精细视图、动态资源分配、主动故…

【计网】TCP的三次握手四次挥手

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 三次握手&#xff08;Connection Establishment&#xff09; 四次挥手&#xff08;Connection Termination&#xff09; 结语 我…

Linux之权限管理

目录 一.chmod 二.ACL权限 2.1概述 2.2应用ACL权限 一.chmod chmod命令是控制用户对文件的权限的命令。 只有文件所有者和超级用户可以修改文件或目录的权限。 使用权限 : 所有使用者 语法: chmod [-cfvR] [--help] [--version] mode file... 参数说明&#xff1a; mode : …

前端学习——vue学习

文章目录 1. < el-form> 属性 model、prop、rules2. v-bind 与 v-model3. v-if 与 v-show4. v-for 循环语句5. 计算属性 computed6. 监视属性 watch7. 下拉框 el-select、el-option8. 自定义事件9. async与await实现异步调用 1. < el-form> 属性 model、prop、rule…

Elasticsearch:基于 Langchain 的 Elasticsearch Agent 对文档的搜索

在今天的文章中&#xff0c;我们将重点介绍如何使用 LangChain 提供的基础设施在 Python 中构建 Elasticsearch agent。 该 agent 应允许用户以自然语言询问有关 Elasticsearch 集群中数据的问题。 Elasticsearch 是一个强大的搜索引擎&#xff0c;支持词法和向量搜索。 Elast…

项目管理:如何成功完成一个项目

项目管理是一项重要的技能&#xff0c;它可以帮助你成功地完成一个项目。以下是一些关键的步骤&#xff0c;可以帮助你实现这一目标&#xff1a; 1. 明确项目目标&#xff1a;在开始项目之前&#xff0c;你需要明确项目的目标。这将有助于你制定一个明确的计划&#xff0c;并确…

HDFS 之 Topology(Rack) Awareness - 机架感知

1、 简介 机架感知在大型分布式存储系统中非常实用,可以有效保证数据的高可用,同时提升集群稳定性。在HDFS中,也实现了类似Topology Awareness的机制,只不过是采用软件的方式模拟。 2、机架感知存在的意义 分布式存储系统的一个特殊之处在于其通常包含非常多的机器。Clie…

【目标航迹管理(1)】基于d-s证据理论信息融合的多核目标跟踪方法

1 引言&#xff1a;从航机起始方法开始 我们为什么会有这个议题&#xff1f;因为航机起始方法。 处理目标航迹起始的方法主要分为两大类&#xff1a;批处理和序贯。 在杂波密度比较高的环境下&#xff0c;比如有红外卫星或地面雷达监视区域&#xff0c;则选用批处理方法&…

【Spring】SpringBoot 单元测试

目 录 一.什么是单元测试&#xff1f;二.单元测试有哪些好处&#xff1f;三.Spring Boot 单元测试使用单元测试的实现步骤 一.什么是单元测试&#xff1f; 单元测试&#xff08;unit testing&#xff09;&#xff0c;是指对软件中的最小可测试单元进行检查和验证的过程就叫单元…

Vue监听器(上)之组合式watch

1. 定义监听器 //要监视的属性被改变时触发 watch(要监视的属性, (更改后的心值, 更改前的旧值) > {具体操作}, );//监视对象为getter的时候 //表达式内任意响应式属性被改变时触发 watch(() > return表达式, (表达式的新值, 表达式的旧值) > {具体操作} );//数组中任…

【MySQL】多表操作、事务、索引

MySQL MYSQL 多表设计 一对多插入测试数据外键约束(物理外键)使用逻辑外键 MYSQL 多表设计 一对一表结构 MYSQL 多表设计 多对多 MYSQL 多表设计 一对多 建表语句 员工表 CREATE TABLE tb_emp (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT ID,username VARCHAR(20) N…