RocketMQ on openEuler 提供高性能消息队列的稳定性解决方案

news2024/11/16 11:40:19

RocketMQ on openEuler,是一种将 RocketMQ 消息中间件通过容器化的方式部署在 openEuler 操作系统上运行,借助 openEuler 系统对于 OS 缓存回收效率增强的内核特性,提升消息中间件在面向超大规模高并发、高吞吐量、低延迟场景下稳定性和可靠性的软件解决方案。

RocketMQ 消息队列在稳压测试中遇到的 OOM 问题

移动云 RocketMQ 消息队列产品正式上线前,通过压测工具,创建多组生产者/消费者进程对 RocketMQ 独享集群做多轮性能和稳定性的压力测试。

测试环境

图片

压测结果

在某次持续长时间的压测过程中,发现消息收发吞吐,在一段时间内的某一时刻会出现大幅度 TPS(生产/消费)抖动下降的现象,并且是周期性的。图片移动云 RocketMQ 消息队列一直都比较稳定运行,为何在高并发的压测下也会出现 TPS 的抖动?我们初步怀疑是 CPU 负载或者 RocketMQ Broker 组件 GC 频率过高导致,但通过查看 CPU 负载和 JVM GC 频率并未发现任何异常。最终,经过排查发现是由于 Broker Pod 进程中的 buff/cache 在持续长时间压测下不断增加,系统无法及时有效回收,导致 Pod 中的运行进程占用内存空间超出预先设置的 Limit 限制,触发了 OOM Killer 机制重启了 Broker Pod。

RocketMQ on openEuler—解决大规模高并发场景下提升稳定性的新选择

为何在持续高并发下进行消息收发会导致系统的 buff/cache 的持续增加?通过翻阅操作系统手册,可知 buff/cache 主要体现在系统的 PageCache 上。

PageCache 在 RocketMQ 消息存储中的重要作用

PageCache 也叫页缓冲或文件缓冲,在 linux 读写文件时,它用于缓存文件的逻辑内容,从而加快对磁盘上映像和数据的访问。图片上图中,红色部分即为,PageCache。可见 PageCache 的本质是由 Linux 内核管理的内存区域。平时我们写的各种程序,通过 mmap 及 buffered I/O 将文件读取到内存空间实际上都是读取到 PageCache 中。为了在大规模高并发场景下实现实现低延迟、高吞吐的目标,RocketMQ 消息队列的存储模块主要采用如下两种方案。

  1. 「Mmap + PageCache 的消息并发读写方案」:在该方案中,消息的读写流程都会经过 PageCache。在多线程并发读写的场景下,PageCache 不可避免会有锁的问题,尤其是在维护 PageCache 一致性时,系统回刷脏页时磁盘压力较高,会导致出现毛刺现象。
  2. 「堆外内存池化技术 + PageCache 的消息读写分离方案」:消息写入时候写至 RocketMQ 启动时创建的堆外内存块(DirectByteBuffer)中,同时消息从 PageCache 中读取。这样,消息读写分离使得整体流程并发性更好,有效降低时延,同时利用堆外内存池减少了用户态与内核态的切换开销。

PageCache 在 RocketMQ 消息队列的存储层扮演着举足轻重的作用,一旦系统的 PageCache 出现问题(如缓存回收、一致性和缺页中断等问题),都会对消息收发的主要流程造成严重的影响。

openEuler 系统在缓存回收效率方面的优化

为了防止 PageCache 申请过多(默认无限制)将可靠内存耗尽,需要对 PageCache 的总量及使用可靠内存总量进行限制。相对于 CentOS 系统内核无法对未超出 node 节点内存资源的 PageCache 进行及时回收,openEuler 针对 PageCache 的回收增加了相关的系统内核参数,并为限制 PageCache 使用量的功能提供若干 proc 接口,接口定义在/proc/sys/vm/下,用来控制 PageCache 的使用量,具体如下:图片

  1. 「cache_reclaim_enable」:表示 PageCache 限制的功能的使能开关;
  2. 「cache_reclaim_s」:表示定期触发 cache 回收的时间,以秒为单位。系统会根据当前 online 的 cpu 个数来创建工作队列,如果有 n 个 cpu 则创建 n 个工作队列,每个工作队列每隔 cache_reclaim_s 秒进行一次回收。该参数与 cpu 上下线功能兼容,如果 cpu offline,则会减少工作队列个数;反之,cpu online 则会增加工作队列个数。
  3. 「cache_reclaim_weight」:表示每次回收的权值,内核每个 CPU 每次期望回收 32 * cache_reclaim_weight 个 page。该权值同时作用于 page 上限触发的回收和定期 pageCache 回收;

RocketMQ on openEuler 方案在生产环境中的验证

为解决遇到的 OOM 问题,我们针对独享集群所在机器进行了操作系统内核版本的升级,更新至最新的 BC-Linux for Euler 21.10 版本(BC-Linux for Euler 是移动云操作系统团队以 openEuler 社区操作系统为基础,借助开源社区的开放优势,通过定制化方式研发的企业级 Linux 操作系统)。更新系统后,采用两种消息体(1Kb 和 4Kb)分别对同样的测试环境进行长时间的压测。

测试场景 1

测试消息大小 1Kb 消息收发性能及长时间压测稳定性,测试中,独享集群能够达到收发消息总和 TPS 为 2w+TPS(其中发送消息 1w+TPS,消费消息 1w+TPS)。消息生产和消费的速度规律,如下图所示:图片从图中可见在消息体大小为 1Kb 的消息时,消息生产和消费速度在长时间压测下没有抖动,TPS 保持平稳,整个压测时间服务正常。

测试场景 2

测试消息大小 4Kb 消息收发性能及长时间压测稳定性,测试中,集群能够达到收发消息总和 TPS 为 1.4w+ TPS(其中发送消息 0.7w+TPS,消费消息 0.7w+TPS)。消息生产和消费的速度规律,如下图所示:图片从图中可见在消息体大小为 4Kb 的消息时,消息生产和消费速度长时间压测没有抖动,TPS 保持平稳,整个压测时间服务正常。

总结

移动云 RocketMQ 消息队列的独享实例在 22 年已完成了云原生化的完全升级,特别适合云原生、Serverless 化架构和大数据流计算的技术演进与相关应用场景。目前,RocketMQ on openEuler 的解决方案已在广州 3 AZ2、呼和浩特、北京、杭州等多个资源池上线且完成了部分存量服务器的迁移与改造升级。后续,移动云 RocketMQ 消息队列并将不断提升服务质量,为广大客户创造更多的价值。欢迎大家多多关注。

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

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

相关文章

git常用命令之远程仓库别名

12. 远程仓库别名 12.1 查看远程仓库名称 命令作用git remote查看关联的远程分支$ git remoteorigingit remote -v查看本地仓库关联的远程仓库信息$ git remote -vorigin gitgithub.com:kaku/reading-note-tutorails.git (fetch)origin gitgithub.com:kaku/reading-note-tuto…

Telnet实验、AAA认证实验、 配置文件备份和还原实验

Telnet实验 拓扑 需求 R1远程R2 配置步骤 1&#xff09;配置接口的IP地址 2&#xff09;在R2设备配置telnet远程 3&#xff09;使用R1远程R2 配置命令 第一步&#xff1a;配置R1的IP地址 <Huawei>un t m //关闭消息 <Huawei>sys //进入系统视图 [Huaw…

量化知识点

1&#xff1a;模型量化是将浮点数替换成整数&#xff0c;并进行存储和计算的方法。 原始float数据量化后int数据量化公式 2&#xff1a;非饱和方式量化、饱和方式量化&#xff0c;对称量化、非对称量化&#xff0c;区别与关系是&#xff1f; 这个是tensorRT的量化方案&#xf…

React hooks文档笔记(三) 状态

状态 一、如何设计组件状态的步骤二、状态构造原则1. 组相关状态2. 避免矛盾/互斥状态3. 避免多余状态4. 不要把props放进state&#xff0c;除非你特别想要阻止更新 三、状态保存/重置1. 相同位置的相同组件保留状态2. 同一位置不同元素reset状态 一、如何设计组件状态的步骤 …

如何使用ChatGPT的API(一)大语言模型如何工作

这篇文章介绍大语言模型的一些概念&#xff0c;包括它是如何工作的&#xff0c;什么是Token等等。 大语言模型如何工作 我们从一个示例开始说起。 当我们写一个提示“我喜欢吃”&#xff0c;然后要求一个大型语言模型根据这个提示填写后面可能的内容。它可能会说&#xff0c…

《PyTorch深度学习实践》第三讲 梯度下降

b站刘二大人《PyTorch深度学习实践》课程第三讲梯度下降笔记与代码&#xff1a;https://www.bilibili.com/video/BV1Y7411d7Ys?p3&vd_sourceb17f113d28933824d753a0915d5e3a90 上一讲例子中&#xff0c;初始权重 w w w是随机给的&#xff0c;然后计算每个样本 x x x的预测…

JavaWeb 笔记-1

JavaWeb 笔记-1 初始JavaWeb什么是JavaWeb 一、JDBC1.1、JDBC简介1.2、API详解-DriverManager1.3、API详解-Connection1.4、API详解-Statement1.5、API详解-ResultSet1.6、API详解-PreparedStatement1.6.1、API详解-PreparedStatement-SQL注入演示1.6.2、API详解-PreparedState…

RK3568平台开发系列讲解(外设篇)RFID 模块调试

🚀返回专栏总目录 文章目录 一、RFID 工作原理二、硬件连接三、驱动程序四、设备树五、测试程序沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将讲解 RFID 模块调试。 一、RFID 工作原理 射频识别技术也就是 RFID,英文名为 Radio Frequency Identificati…

玻璃活动隔断安装需要注意什么

随着社会的发展和人们对空间利用的要求不断提高&#xff0c;玻璃活动隔断逐渐成为办公室和商业空间中常见的装修选择。玻璃活动隔断不仅可以有效分割空间&#xff0c;提供私密性&#xff0c;还能保持充足的采光和视觉效果。然而&#xff0c;为了确保玻璃活动隔断的安装质量和使…

PSP - MetaPredict 预测蛋白质序列的内源性无序区域 (Intrinsically Disordered Regions)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131461900 MetaPredict 算法简介&#xff1a; 内源性无序区域&#xff08;IDRs&#xff09;在所有生命领域中都普遍存在&#xff0c;并…

【GPT】如何拥有离线版本的GPT以及部署过程中的问题

【背景】 目前很多公司由于数据安全的问题&#xff0c;不能使用OpenAI的GPT&#xff0c;同时也没有必要非得使用如此泛用化的GPT。很多公司因此有训练自己的离线GPT的需求&#xff0c;这样的GPT只需要具备专业知识即可。 要使这个成为可能&#xff0c;首先就需要能够让GPT的Mo…

InstructGPT学习

GPT发展历程 在回答这个问题之前&#xff0c;首先要搞清楚ChatGPT的发展历程。 GPT-1用的是无监督预训练有监督微调。GPT-2用的是纯无监督预训练。GPT-3沿用了GPT-2的纯无监督预训练&#xff0c;但是数据大了好几个量级。InstructGPT在GPT-3上用强化学习做微调&#xff0c;内…

企业邮箱如何将一个用户设置到多个部门/群组

1、使用管理员账号postmaster登录企业邮局&#xff0c;点击“邮局管理”。 2、点击“组织与成员”。 3、勾选需要设置的用户&#xff0c;点击“设置所属部门/群”。&#xff08;例如&#xff1a;我们需要将所属销售分公司的高阳&#xff0c;加入到以下四个分销部中&#xff0c;…

Hive on Zeppelin

** Hive on Zeppelin ** 官网&#xff1a;zeppelin.apache.org 做大数据的人应该对Hive不陌生&#xff0c;Hive应该是大数据SQL引擎的鼻祖。历经多个版本的改进&#xff0c;现在的Hive3已经具备比较完善的ACID功能&#xff0c;能够同时满足交互式查询和ETL 两种场景。 那怎…

Linux内核的编译、安装、调试

这里写目录标题 编译安装内核下载内核安装依赖更改.config编译内核安装首先安装模块安装内核更改引导更改grub重启 其他操作清理内核源目录卸载安装的内核修改内核配置菜单实现对新加入内核源码的控制 常见问题1. Module.symvers is missing2. No rule to make target ‘debian…

Revit三维视图:第一人称的视角看模型,生成局部三维视图

​  一、Revit中怎么以第一人称的视角看空间效果 我们创建一栋完整的楼模型后&#xff0c;会不会想说假设在里面看看是什么效果呢&#xff0c;就是说想看看第一视角的空间效果&#xff0c;那么如何可以看第一人称的空间效果图呢?以下看步骤&#xff1a; 1、 打开楼层平面图 …

系统架构设计师 6:数据库设计

一、数据库系统 数据库系统&#xff08;DataBase System, DBS&#xff09;是一个采用了数据库技术&#xff0c;有组织地、动态地存储大量相关联数据&#xff0c;从而方便多用户访问的计算机系统。广义上讲&#xff0c;DBS包括了数据库管理系统&#xff08;DBMS&#xff09;。 …

详细认识二叉树【图片+代码】

目录 一、树的概念及结构 1.1树的概念 1.2树的相关概念 1.3树的表示 1.4树在实际中的应用&#xff08;目录树&#xff09; 二、二叉树概念及结构 2.1概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树存储结构 三、二叉树的顺序结构及实现 3.1二叉树的顺序结构 3…

Redis6之集群

集群&#xff0c;就是通过增加服务器的数量&#xff0c;提供相同的服务&#xff0c;从而让服务器达到一个稳定、高效的状态 必要性 单个redis存在不稳定性。当redis服务宕机了&#xff0c;就没有可用的服务了。而且单个redis的读写能力是有限的。使用redis集群可以强化redis的…

PIL.Image 调色板模式处理标签数据

文章目录 1 使用PIL.Image库进行调色板模式2 转回原来的色彩3 效果参考 1 使用PIL.Image库进行调色板模式 基本步骤&#xff1a; 自定义调色板&#xff0c;数据格式是一个Nx3的二维数组&#xff0c;一维数组的位置为分类的下标数据类型为np.uint8转化为调色板模式后img.conve…