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://xiahunao.cn/news/2805969.html

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

相关文章

TensorRT及CUDA自学笔记003 NVCC及其命令行参数

TensorRT及CUDA自学笔记003 NVCC及其命令行参数 各位大佬,这是我的自学笔记,如有错误请指正,也欢迎在评论区学习交流,谢谢! NVCC是一种编译器,基于一些命令行参数可以将使用PTX或C语言编写的代码编译成可…

新手如何自己建网站的详细步骤?-网站建设

新手如何自己建网站的详细步骤?-网站建设 我们选择了白嫖雨云的二级域名 浏览器输入https://www.rainyun.com/z22_ 创建账号然后选择一个你喜欢的子域名我建议后缀选择ates.top的 选择自定义地址,类型选择cname 现在要选择记录值了,有a&…

linux内核原理--页高速缓存,回写,页框回收

1.页高速缓存 我们主要分析下磁盘文件的页高速缓存 struct address_space {struct inode *host; struct radix_tree_root page_tree; spinlock_t tree_lock;unsigned int i_mmap_writable;struct prio_tree_root i_mmap; struct list_head i_mmap_nonlinear;spinlock_t i_…

2023最新简绘AI开源版支持MJ绘画,AI问答

应用介绍 本文来自:2023最新简绘AI开源版支持MJ绘画,AI问答 - 源码1688 简介: 简绘AI开源版,从闲鱼上买的,搭建教程如下 测试环境:NginxPHP7.4MySQL5.6 图片:

com.alibaba.nacos.api.exception.NacosException: Request nacos server failed

问题描述 安装nacos2.0以上版本,启动报错:com.alibaba.nacos.api.exception.NacosException: Request nacos server failed com.alibaba.nacos.api.exception.NacosException: Request nacos server failed: at com.alibaba.nacos.client.naming.remote.gprc.Nami…

2024022402-数据库恢复技术

数据库恢复技术 什么是事务 事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位 事务和程序是两个概念 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语…

Movelt使用笔记-Movelt Setup Assistant

目录 Setup Assistant配置1 Start 加载urdf模型3 Virtual joints 虚拟关节5 Robot Poses 机器人位姿7 Passive Joints 被动关节8 Controllers 控制器9 Simulation 仿真10 3D Perception 3D感知11 Author Information 作者信息12 Configuration Files 配置文件启动MoveIt!Setup…

潇洒郎:2024 IDEA、Pycharm获取最新激活码获取方式

IDEA获取最新激活码 https://idea.javatiku.cn/ 手机打开,看到验证码,30分钟有效,输入验证码 获取到最新激活码

Vue.js+SpringBoot开发超市商品管理系统

目录 一、摘要1.1 简介1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 超市区域模块2.3 超市货架模块2.4 商品类型模块2.5 商品档案模块 三、系统设计3.1 用例图3.2 时序图3.3 类图3.4 E-R图 四、系统实现4.1 登录4.2 注册4.3 主页4.4 超市区域管理4.5 超市货架管理4.6 商品类型…

IT廉连看——C语言——数组

IT廉连看——C语言——数组 一、一维数组的创建和初始化 1.1 数组的创建 数组是一组相同类型元素的集合。 数组的创建方式: type_t arr_name [const_n]; //type_t 是指数组的元素类型 //const_n 是一个常量表达式,用来指定数组的大小 数组创建…

onlyoffice api开发

编写代码 按照https://api.onlyoffice.com/editors/basic编写代码 <html> <head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scal…

Linux应用-ElasticSearch安装

ElasticSearch安装部署 简介 全文搜索属于最常见的需求&#xff0c;开源的 Elasticsearch &#xff08;以下简称 es&#xff09;是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。 Elasticsearch简称es&…

TLS握手证书链的校验

看一遍忘一遍&#xff0c;还是自己写一遍&#xff0c;看看这次能记多久。 在TLS握手过程中&#xff0c;通过证书校验认证服务端的身份和交换加密秘钥&#xff0c;握手完成之后后续就可以进行加密数据传输。 在浏览器地址栏上点击锁的图标&#xff0c;能打开查看证书的详细信息…

【大模型 数据增强】NeuScraper:神经网络抓取工具,超传统网页抓取工具20%

NeuScraper&#xff1a;神经网络抓取工具&#xff0c;从网页中提取主要内容 提出背景流程框架精细拆解 效果对比 提出背景 论文&#xff1a;https://arxiv.org/pdf/2402.14652.pdf 代码&#xff1a;https://github.com/OpenMatch/NeuScraper 假设我们需要从一个新闻网站上抓…

TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理

TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理 各位大佬&#xff0c;这是我的自学笔记&#xff0c;如有错误请指正&#xff0c;也欢迎在评论区学习交流&#xff0c;谢谢&#xff01; CUDA编程模型 我们使用CUDA_C语言进行CUDA编程&am…

备战蓝桥杯---基础算法刷题2

题目有一点水&#xff0c;不过还是有几个好题的&#xff0c;我在这分享一下&#xff1a; 很容易想到先往最高处跳再往最低处跳&#xff0c;依次类推&#xff0c;那怎么保证其正确性呢&#xff1f; 证法1. 在此&#xff0c;我们从0开始&#xff0c;假设可以跳到a,b,c(a<b<…

js之事件代理/事件委托

事件代理也叫事件委托&#xff0c;原理&#xff1a;利用DOM元素的事件冒泡&#xff0c;指定一个事件的处理程序就可以管理某一类型的所有事件。 事件冒泡和事件捕获 如上图所示&#xff0c;事件传播分成三个阶段&#xff1a; 捕获阶段&#xff1a;从window对象传导到目标节点&…

即时设计和Axure对比,哪一个好用?

无论是国外页面设计工具&#xff0c;页面设计工具的发展从来没有停滞过&#xff0c; Axure&#xff0c;无论是国产设计工具即时设计&#xff0c;其功能都在不断更新迭代&#xff0c;为设计带来更高效的设计体验。今天对比两个设计工具&#xff0c;帮你找到最适合自己的&#xf…

C#与VisionPro联合开发——串口通信

串口通信 串口通信是一种常见的数据传输方式&#xff0c;通过串行接口&#xff08;串口&#xff09;将数据以串行比特流的形式进行传输。在计算机和外部设备之间&#xff0c;串口通信通常是通过串行通信标准&#xff08;如RS-232&#xff09;来实现的。串口通信可以用于连接各…

在Ubuntu中使用python

目录 一、利用vim使用python 1、下载vim 2、使用vim创建python文件 3、编辑完成后的vim操作 4、如何运行 5、vim常见操作 二、安装Jupyter 1、更新系统 2、安装pip 注&#xff1a;pip无法应用的原因及解决方案 3、安装Jupyter 4、打开Jupyter 三、安装其他Python模…