RabbitMQ 队列之战:Classic 和 Quorum 的性能洞察
RabbitMQ 是一个功能强大且广泛使用的消息代理,它通过处理消息的传输、存储和交付来促进分布式应用程序之间的通信。作为消息代理,RabbitMQ 充当生产者(发送消息的应用程序)和使用者(接收消息的应用程序)之间的中介,即使在复杂的分布式环境中也能确保可靠的消息传递。
RabbitMQ 的核心组件之一是队列,消息在其中临时存储,直到被使用。队列在 RabbitMQ 的架构中起着关键作用,支持异步通信并将生产者和使用者解耦。这种解耦允许应用程序独立运行,从而提高可扩展性、弹性和容错能力。
了解 RabbitMQ 中不同类型队列的性能特征对于设计高效的系统架构至关重要。队列决定了消息的路由、存储和使用方式,从而影响吞吐量、延迟和持久性。
了解经典队列
RabbitMQ 中的经典队列是默认队列类型,旨在实现高吞吐量和简单性。它们遵循先进先出 (FIFO) 模型,其中消息按照接收顺序传送给使用者,从而确保可预测的消息流。Classic 队列广泛用于性能和速度比跨多个节点的容错和消息持久性更重要的场景。
Classic Queues 的主要功能
单节点存储:Classic 队列存储在单个 RabbitMQ 节点上。消息不会在其他节点之间复制,从而使队列更快,但在节点发生故障时弹性较差。
FIFO 消息处理:消息按照其到达的顺序进行存储和使用,从而确保简单的处理模型,尤其是对于消息顺序很重要的任务。
持久和非持久消息:Classic 队列可以将消息存储在内存中(瞬态)或磁盘(持久)中。持久性消息将保存到磁盘,确保在服务器重新启动或崩溃时消息不会丢失,尽管这会带来性能权衡。
高吞吐量:Classic 队列针对速度进行了优化,可以以低延迟处理大量消息。它们最适合消息处理速度至关重要的应用程序,例如实时系统或日志聚合服务。
单节点持久性:虽然 Classic 队列支持消息持久性,但它们缺乏跨节点复制。这意味着,如果托管队列的节点发生故障,持久消息将在节点恢复时继续存在,但没有内置冗余来继续跨其他节点进行操作。
Classic 队列的使用案例
实时系统:Classic 队列非常适合需要高速消息处理的应用程序,例如游戏系统、流媒体平台或监控工具。
无状态应用程序:不需要消息复制或跨节点高可用性的应用程序受益于 Classic 队列的简单性和性能。
低延迟:对于需要最大限度地减少消息生成和使用之间的延迟的工作负载,经典队列提供低延迟消息传递。
了解 Quorum 队列
RabbitMQ 中的仲裁队列是一种更新的、高度可用的、具有容错能力的队列类型,专为需要强大的持久性保证和节点故障弹性的系统而设计。Quorum 队列利用 Raft 共识算法跨多个节点复制消息,确保即使在硬件或软件故障的情况下也能保持消息可用性。这使它们非常适合消息丢失或停机不可接受的关键应用程序。
Quorum 队列的主要功能
领导-追随者复制:仲裁队列使用领导-追随者模型运行。每个 Quorum 队列都有一个负责处理传入消息的领导节点和多个复制领导消息的 follower 节点。此复制可确保数据冗余,只有在大多数节点 (仲裁) 确认复制后才会确认消息。
Raft 共识算法:Raft 算法保证了节点之间的一致性。当消息发送到仲裁队列时,它会被复制到关注者,只有在大多数 (仲裁) 关注者确认该消息后,它才会变为 “已提交”。这提供了强大的持久性保证,确保系统可以从故障中恢复而不会丢失数据。
容错能力:Quorum 队列旨在承受节点故障。如果 Leader 节点崩溃,将使用 Raft 协议从从 Follower 中选出一个新的 Leader,从而允许消息处理继续进行,并将中断降至最低。这提供了高可用性,并使仲裁队列在分布式环境中具有弹性。
消息持久性:默认情况下,仲裁队列中的所有消息都是持久性的,这意味着它们将写入磁盘并在多个节点之间复制。这可确保消息不会丢失,即使 RabbitMQ 集群遇到节点故障或重新启动也是如此。
高可用性:Quorum 队列通过确保只要大多数节点正常运行,消息传输和使用就可以继续进行,从而优先考虑可用性。这使它们成为无法容忍停机或数据丢失的任务关键型系统的理想选择。
无单点故障:与 Classic 队列不同,Classic 队列由于驻留在单个节点上而容易受到节点故障的影响,而 Quorum 队列通过在 RabbitMQ 集群中的多个节点之间分发消息来消除单点故障的风险。
仲裁队列的使用案例
金融服务:处理交易、付款或敏感财务数据的系统受益于 quorum 队列提供的容错能力和消息持久性。这些系统无法承受丢失消息或经历停机的后果。
任务关键型应用程序:需要持续运行时间且不能容忍消息丢失的应用程序,例如医疗保健系统、实时监控或工业控制系统,非常适合仲裁队列。
分布式系统:在服务器可能发生故障的多节点或分布式环境中,仲裁队列可确保消息处理无缝继续,即使单个节点出现故障也是如此。
性能基准测试:Classic 与 Quorum
我们使用 RabbitMQ PerfTest 工具来评估经典队列和仲裁队列的性能。作为此分析的一部分,我们收集了三种不同场景的性能统计数据。每个场景都涉及发布者和使用者的不同组合,具有固定的消息大小和一致的 30 秒时间间隔。
经典队列性能
场景 | 发送速率 (MSG/S) | 接收速率(MSG/S) | 第 99 个百分位延迟(以微秒为单位) |
---|---|---|---|
场景 1 (1Publisher, 1Consumer) | 13329 | 9897 | 20649010 微秒 |
方案 2 (1Publisher, 2Consumer) | 14112 | 9573 | 21415269 微秒 |
方案 3(2Publisher、4Consumer) | 21829 | 13577 | 27186651 微秒 |
平均值(全部) | 16423 | 10349 | 23083643 微秒 |
仲裁队列性能
场景 | 发送速率 (MSG/S) | 接收速率(MSG/S) | 第 99 个百分位延迟(以微秒为单位) |
---|---|---|---|
场景 1 (1Publisher, 1Consumer) | 9202 | 5581 | 37644181 微秒 |
方案 2 (1Publisher, 2Consumer) | 10717 | 5368 | 29972278 微秒 |
方案 3(2Publisher、4Consumer) | 13132 | 4505 | 32919489 微秒 |
平均值(全部) | 11017 | 5151 | 33,511,316 微秒 |
从执行的测试中获得的见解
1. 吞吐量(发送和接收速率)
经典队列:
平均发送速率:16,423 msg/s(比 quorum 队列高 49%)
平均接收速率:10349 msg/s(比 quorum 队列高 2 倍)
仲裁队列:
平均发送速率:11,017 msg/s
平均接收速率:5,151 msg/s
Classic 队列在发送和接收速率方面始终优于 Quorum 队列,在所有场景中都显示出更高的吞吐量。Quorum 队列虽然更具弹性,但吞吐量会下降,尤其是在接收速率方面。
2. 延迟
经典队列:
平均第 99 个百分位延迟:2308 万微秒。- 延迟保持可控并持续扩展,即使负载较高(2 个生产者,4 个消费者)也是如此。
仲裁队列:
平均第 99 个百分位延迟:3351 万 μs。- 延迟始终比传统队列高 40-50%,在较高负载下会出现显著峰值。
由于复制和容错能力,仲裁队列会引入更多的延迟。对于低延迟至关重要的应用程序,经典队列是队列的明确选择。
3. 可扩展性
经典队列:
随着负载的增加而线性扩展,在 1 个生产者/2 个消费者(场景 2)和 2 个生产者/4 个消费者(场景 3)的场景之间,发送和接收速率显着跳跃。
仲裁队列:
在高负载下吞吐量不佳。在具有 2 个生产者和 4 个使用者的方案 3 中,仲裁队列仅显示发送速率略有增加,接收速率略有下降,这表明与传统队列相比可扩展性较差。
Classic 队列可以有效地扩展,而 Quorum 队列则随着添加更多的创建者和使用者而显示吞吐量回报递减和延迟增加。
做出正确的选择
在 RabbitMQ 中,在 Classic Queues 和 Quorum Queues 之间进行选择取决于您的系统在性能、持久性、容错能力和资源可用性方面的特定要求。
何时选择 Classic Queues
高吞吐量和低延迟要求
非关键应用程序
单节点或低成本环境
何时选择 Quorum 队列
高可用性和容错能力
持久消息传递
分布式系统
任务关键型系统
Classic 队列和 Quorum 队列之间的权衡
方面 | 经典队列 | 仲裁队列 |
吞吐量 | 高吞吐量、低延迟 | 由于复制开销而降低吞吐量 |
耐久性 | 可选的单节点持久性 | 多节点复制的强大持久性 |
容错 | 有限(无复制,单节点故障影响) | 高容错性(多节点复制) |
可用性 | 取决于单节点可用性 | 通过自动领导者选举实现高可用性 |
资源使用情况 | 低(单节点,较少的磁盘和内存开销) | 高(多个节点,较高的 CPU、内存、磁盘使用率) |
延迟 | 低延迟(无复制) | 由于 Raft 复制导致更高的延迟 |
用例 | 高性能、非关键应用程序 | 关键应用程序、高可用性、无消息丢失 |
详细信息源
在决定 RabbitMQ 的 Classic 队列和 Quorum 队列时,重要的是要认识到两者各有优缺点。最佳选择取决于系统的特定需求。归根结底,在 Classic 队列和 Quorum 队列之间进行选择是一个决定,它取决于您在性能和可靠性之间的特定权衡:这是关于在速度和持久性之间找到适当的平衡。通过了解每种类型的队列的执行方式,您可以设计符合您的目标的 RabbitMQ 设置,无论是效率、健壮性,还是两者兼而有之。
相关文章:
RabbitMQ 队列之战:Classic 和 Quorum 的性能洞察
RabbitMQ 是一个功能强大且广泛使用的消息代理,它通过处理消息的传输、存储和交付来促进分布式应用程序之间的通信。作为消息代理,RabbitMQ 充当生产者(发送消息的应用程序)和使用者(接收消息的应用程序)之…...
Spring Boot 集成 MySQL 的详细指南
在现代软件开发中,Spring Boot 因其简单易用而成为构建 Java 应用程序的热门选择。结合 MySQL这一常用关系型数据库,开发者可以快速构建出功能完善的后端服务。本文将详细介绍如何将 Spring Boot 与 MySQL 集成,提供从环境搭建到代码实现的全…...
python格式化输入输出
以下是使用 format()、f-string 和百分号 % 运算符进行 Python 数据格式化输入输出的示例代码。 1. 使用 format() 方法进行格式化 # 使用 format() 方法格式化数据并输出到文件 name "Alice" age 25 score 92.5# 格式化字符串 formatted_string "Name: {…...
音视频入门基础:FLV专题(10)——Script Tag实例分析
一、引言 在《音视频入门基础:FLV专题(9)——Script Tag简介》中对FLV文件的Script Tag进行了简介。下面用一个具体的例子来对Script Tag进行分析。 二、Script Tag的Tag header实例分析 用notepad打开《音视频入门基础:FLV专题…...
国外问卷调查匠哥已经不带人了,但是还可以交流
国外问卷调查匠哥已经不带人了,但是还可以来和匠哥交流, 为啥不带人了呢? 从今年年初开始,匠哥在带学员的过程中发现: 跟往年同样的收费,同样的教学,甚至我付出的时间精力比以前还多ÿ…...
Linux 进程的基本概念及描述
目录 0.前言 1. 什么是进程 1.1 进程的定义与特性 1.2 进程与线程的区别 2.描述进程 2.1 PCB (进程控制块) 2.2 task_struct 3.查看进程 3.1 查看进程信息 3.1.1 /proc 文件系统 3.1.2 ps 命令 3.1.2 top 和 htop 命令 3.2 获取进程标识符 3.2.1使用命令获取PID 3.2.2 使用C语言…...
【C++】透过STL源代码深度剖析vector的底层
✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山冈! 🔥 所属专栏:C深入学习笔记 💫 欢迎来到我的学习笔记! 参考博客:【C】透过STL源…...
ubuntu 开启root
sudo passwd root#输入以下命令来给root账户设置密码 sudo passwd -u root#启用root账户 su - root#要登录root账户 root 开启远程访问: 小心不要改到这里了:sudo nano /etc/ssh/ssh_config 而是:/etc/ssh/sshd_config sudo nano /etc/ssh…...
使用 Llama 3.1 和 Qdrant 构建多语言医疗保健聊天机器人的步骤
长话短说: 准备好深入研究: 矢量存储的复杂性以及如何利用 Qdrant 进行高效数据摄取。掌握 Qdrant 中的集合管理以获得最佳性能。释放上下文感知响应的相似性搜索的潜力。精心设计复杂的 LangChain 工作流程以增强聊天机器人的功能。将革命性的 Llama …...
【Linux-基础IO】如何理解Linux下一切皆文件磁盘的介绍
目录 如何理解Linux系统上一切皆文件 1.物理角度认识磁盘 2.对磁盘的存储进行逻辑抽象 磁盘寻址 3.磁盘中的寄存器 如何理解Linux系统上一切皆文件 计算机中包含大量外设,操作系统想要管理好这些外设,就必须对这些外设进行先描述再组织,…...
Golang | Leetcode Golang题解之第436题寻找右区间
题目: 题解: func findRightInterval(intervals [][]int) []int {n : len(intervals)type pair struct{ x, i int }starts : make([]pair, n)ends : make([]pair, n)for i, p : range intervals {starts[i] pair{p[0], i}ends[i] pair{p[1], i}}sort.…...
微服务SpringSession解析部署使用全流程
目录 1、SpringSession简介 2、实现session共享的三种方式 1、修改Tomcat配置文件 2、Nginx负载均衡策略 3、redis统一存储 0、准备工作 1、本地服务添加依赖 2、修改本地服务配置文件 3、添加application.properties文件 4、添加nacos - redis配置 5、修改本地项目…...
自动驾驶 3DGS 学习笔记
目录 street_gaussians gsplat依赖项 运行报错: python>3.9 SGD: Street View Synthesis with Gaussian Splatting and Diffusion Prior 差分高斯光栅化 diff-gaussian-rasterization street_gaussians https://github.com/zju3dv/street_gaussians gsp…...
【C++笔试强训】如何成为算法糕手Day5
学习编程就得循环渐进,扎实基础,勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 第一题:游游的you 思路: 第二题:腐烂的苹果 思路: 第三题:孩子们的游戏 思路&…...
【Qt】无IDE的Gui程序快速开始
Qt安装 在 Windows 上安装 Qt 的步骤如下: 下载 Qt 安装程序 访问 Qt 的官方网站:Qt Downloads。点击“Download”按钮,下载 Qt Online Installer(在线安装程序)。 运行安装程序 双击下载的 QtInstaller.exe 文件…...
Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...
linux常用命令汇编(持续更新)
一、用户提示符 # root账号提示符 $ 普通用户提示符 二、关闭计算机 shutdown(安全有序地关闭计算机) 语法:shutdown [options] [time] [message] shutdown -h now #立即关机(--halt/终止) shutdown -r now #重…...
AI面试指南:AI工具总结评测,助力求职季
AI面试指南:AI工具总结评测,助力求职季 摘要: 在竞争激烈的AI领域秋招季,准备充分并借助高效工具是提升面试通过率的关键。本文主要介绍一些针对秋招的AI面试工具和学习资源,分为简历优化、面试助手、手撕代码练习三个…...
大二考核题解
大二考核题解 题号题目考察知识点A有意思的监考二分答案B海绵宝宝的数独DFSC走楼梯递推D碱基配对kmpE好简单的题啊,写它!最短路 写在前面: 整体难度不大,代码能力需要一些,正常来说至少要会3题以上 A 有意思的监考 …...
深入解析:Kubernetes 如何使用 etcd 作为配置中心和注册中心
在 Kubernetes 中,etcd 是核心的分布式存储组件,负责存储和管理集群的所有配置信息、状态数据以及服务注册信息。etcd 的高可用性和强一致性使得它成为 Kubernetes 的 “source of truth”,确保集群能够动态、高效地管理资源,并保…...
MQ高级:RabbitMQ小细节
在之前的学习中,我们只介绍了消息的发送,但是没有考虑到异常的情况,今天我们就介绍一些异常情况,和细节的部分。 目录 生产者可靠性 生产者重连 生产者确认 MQ可靠性 持久化 Lazy Queue 消费者可靠性 消费者确认机制 失…...
期权卖方怎么选择权利金高的品种,期货VIX高低对行情有什么影响
VIX指数——全称为芝加哥期权交易所市场波动率指数,俗称恐慌指数。 是衡量波动性的重要指标。VIX指数上升,预期未来市场波动性会增加。VIX指数下降,预期未来市场波动性会降低。 期货VIX指数最新价格排序 期权卖方尽量选择期货VIX指数在25以…...
内存对齐的原理和使用
1. 什么是内存对齐? 内存对齐是指将数据存储在内存中时,按照数据类型的大小,将数据放在特定的内存边界上。例如,4 字节的 int 通常放在能够被 4 整除的地址上,8 字节的 double 则放在能被 8 整除的地址上。 2. 为什么…...
搭建企业级私有仓库harbor
华子目录 harbor简介实验环境准备下载软件包安装docker-cehosts解析 实验步骤配置https加密传输解压进入解压目录,修改文件配置启动harbor 测试客户端配置harbor本地加速器注意 通过docker compose管理harbor harbor简介 harbor是由wmware公司开源的企业级docker r…...
互联网前后端分离的开发场景,一般会员和数据权限的判断是放在前端还是后端?
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...
李宏毅机器学习2022-HW8-Anomaly Detection
文章目录 TaskBaselineReportQuestion2 Code Link Task 异常检测Anomaly Detection 将data经过Encoder,在经过Decoder,根据输入和输出的差距来判断异常图像。training data是100000张人脸照片,testing data有大约10000张跟training data相同…...
用户体验分享 | YashanDB V23.2.3安装部署
近期崖山新版体验过程中,总能看到用户提问:openssl版本问题、monit命令找不到问题、yashan用户权限问题、数据库重装问题 今日整理了多位用户的安装经验,希望能够帮助到大家~ 1.Lucifer三思而后行 :YashanDB 个人版数据库安装部…...
【漏洞复现】泛微OA E-Office /E-mobile/App/init.php 任意文件上传漏洞
免责声明: 本文旨在提供有关特定漏洞的信息,以帮助用户了解潜在风险。发布此信息旨在促进网络安全意识和技术进步,并非出于恶意。读者应理解,利用本文提到的漏洞或进行相关测试可能违反法律或服务协议。未经授权访问系统、网络或应用程序可能导致法律责任或严重后果…...
SpringCloudEureka实战:搭建EurekaServer
1、依赖引入 <dependencies><!-- 注册中心 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency> </dependencies> <de…...
DataLight(V1.4.5) 版本更新,新增 Ranger、Solr
DataLight(V1.4.5) 版本更新,新增 Ranger、Solr DataLight 迎来了重大的版本更新,现已发布 V1.4.5 版本。本次更新对平台进行了较多的功能拓展和优化,新增了对 Ranger 和 Solr 服务组件的支持,同时对多项已…...
公司销售网站怎么做/长沙网站推广seo
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/wo541075754/article/details/81734770 在互联网中的每一刻,你可能都在享受着Base64带来…...
网站设计的字体/社群营销的方法和技巧
本文的目的在于使用npm进行js类库依赖管理,同时精简html中繁杂的<script>导入。 目前类库加载器(如requirejs/seajs等)可以解决script加载的问题。但对依赖处理不好,还需要开发者一个一个去下载js库,根据个人喜好把js堆砌在项目中。 no…...
中国旅游电子商务网站建设情况/seo少女
攻防世界 WEB 新手练习区 题目解答 浏览器:Firefox(火狐浏览器) 文章目录001 view source002 robots003 backup004 cookie005 disabled_button006 weak_auth001 view source 难度系数: 1.0 题目来源: Cyberpeace-n3k0 题目描述: X…...
监控做斗鱼直播网站/有道搜索引擎入口
作者 | Moses Olafenwa翻译 | 林椿眄出品 | 人工智能头条(公众号ID:AI_Thinker)作为人工智能的一个重要领域,计算机视觉是一门可以识别并理解图像和场景的计算机及软件系统科学。该领域主要包括图像识别&…...
wordpress讨论吧/市场调研报告范文3000字
LP Wizard10.5破解笔记: 首先下载完安装包(附破解包)后解压会有两个文件夹, 1.先运行一次Crack.vbs,路径空着 2.点LPWizard_mib.exe安装软件,安装到默认路径,不安装license。 3.再运行一次Crack…...
学网站开发/营销型网站建设总结
大带宽服务器的优势肯定是普通服务器所比不上的。从以下几点说明一下。 一、体验更好 大带宽服务器租用,意味着你的网站可以承受更高的流量,在带宽越大的情况下,能够同时支持的在线用户越多,也不会带来卡顿。此时用户的缓存页面&a…...