0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

openEuler 来源:openEuler 2023-06-28 10:57 次阅读

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

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

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

测试环境

590e597c-14dc-11ee-962d-dac502259ad0.jpg

压测结果

在某次持续长时间的压测过程中,发现消息收发吞吐,在一段时间内的某一时刻会出现大幅度 TPS(生产/消费)抖动下降的现象,并且是周期性的。

5945ecb6-14dc-11ee-962d-dac502259ad0.png

移动云 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 读写文件时,它用于缓存文件的逻辑内容,从而加快对磁盘上映像和数据的访问。

5973da0e-14dc-11ee-962d-dac502259ad0.png

上图中,红色部分即为,PageCache。可见 PageCache 的本质是由 Linux 内核管理的内存区域。平时我们写的各种程序,通过 mmap 及 buffered I/O 将文件读取到内存空间实际上都是读取到 PageCache 中。为了在大规模高并发场景下实现实现低延迟、高吞吐的目标,RocketMQ 消息队列的存储模块主要采用如下两种方案。

「Mmap + PageCache 的消息并发读写方案」:在该方案中,消息的读写流程都会经过 PageCache。在多线程并发读写的场景下,PageCache 不可避免会有锁的问题,尤其是在维护 PageCache 一致性时,系统回刷脏页时磁盘压力较高,会导致出现毛刺现象。

「堆外内存池化技术 + PageCache 的消息读写分离方案」:消息写入时候写至 RocketMQ 启动时创建的堆外内存块(DirectByteBuffer)中,同时消息从 PageCache 中读取。这样,消息读写分离使得整体流程并发性更好,有效降低时延,同时利用堆外内存池减少了用户态与内核态的切换开销。

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

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

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

59b07cc0-14dc-11ee-962d-dac502259ad0.png

「cache_reclaim_enable」:表示 PageCache 限制的功能的使能开关;

「cache_reclaim_s」:表示定期触发 cache 回收的时间,以秒为单位。系统会根据当前 online 的 cpu 个数来创建工作队列,如果有 n 个 cpu 则创建 n 个工作队列,每个工作队列每隔 cache_reclaim_s 秒进行一次回收。该参数与 cpu 上下线功能兼容,如果 cpu offline,则会减少工作队列个数;反之,cpu online 则会增加工作队列个数。

「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)。消息生产和消费的速度规律,如下图所示:

59ca8fac-14dc-11ee-962d-dac502259ad0.png

从图中可见在消息体大小为 1Kb 的消息时,消息生产和消费速度在长时间压测下没有抖动,TPS 保持平稳,整个压测时间服务正常。

测试场景 2

测试消息大小 4Kb 消息收发性能及长时间压测稳定性,测试中,集群能够达到收发消息总和 TPS 为 1.4w+ TPS(其中发送消息 0.7w+TPS,消费消息 0.7w+TPS)。消息生产和消费的速度规律,如下图所示:

59faf926-14dc-11ee-962d-dac502259ad0.png

从图中可见在消息体大小为 4Kb 的消息时,消息生产和消费速度长时间压测没有抖动,TPS 保持平稳,整个压测时间服务正常。

总结

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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39850
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10446

    浏览量

    206574
  • 容器
    +关注

    关注

    0

    文章

    481

    浏览量

    21883
  • 消息队列
    +关注

    关注

    0

    文章

    31

    浏览量

    2921
  • openEuler
    +关注

    关注

    2

    文章

    289

    浏览量

    5661

原文标题:RocketMQ on openEuler 提供高性能消息队列的稳定性解决方案

文章出处:【微信号:openEulercommunity,微信公众号:openEuler】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    LED灯具的性能稳定性测试

    稳定性测试。费思方案设备:电源:FTG系列电源。FTP系列电源(供电)负载:FT6100系列多通道电子负载,(用于分配个通道电流)实现原理:负载能够精准快速的控制回路中的电流,实现恒流输出。并且可以实现
    发表于 12-07 15:00

    高性能频率补偿使DC-DC转换器具有75μs的高稳定性响应

    DN53- 高性能频率补偿使DC-DC转换器具有75μs的高稳定性响应
    发表于 07-16 16:10

    求增强电源模块系统稳定性的几个方案

    如何提升EMC性能?求增强电源模块系统稳定性的几个方案
    发表于 03-16 06:48

    高性能双端电流源的解决方案

    高性能双端电流源的解决方案电流源设计是一个比稳压器设计更难的挑战。两端电流源会带来了一系列的新问题,尤其是当温度变化时依然希望获得高精度和稳定性
    发表于 06-07 18:33 1435次阅读
    <b class='flag-5'>高性能</b>双端电流源的<b class='flag-5'>解决方案</b>

    电子稳定性控制系统ESC解决方案

    电子稳定性控制系统ESC解决方案 电子稳定性控制系统(ESC)帮助驾驶员保持对于汽车的控制。通过采用一个微控制器,一套用于测量汽车辆横向和纵向加速度
    发表于 04-12 15:22 5132次阅读
    电子<b class='flag-5'>稳定性</b>控制系统ESC<b class='flag-5'>解决方案</b>

    高性能惯性导航和稳定性

    无人机和其他无人应用需在恶劣环境中工作,为了满足精密稳定性和导航要求,能够抑制振动、冲击和温漂的高性能MEMS必不可少。
    的头像 发表于 06-04 13:47 4325次阅读

    满足无人机应用的高性能惯性导航和稳定性高性能MEMS技术

    无人机和其他无人应用需在恶劣环境中工作,为了满足精密稳定性和导航要求,能够抑制振动、冲击和温漂的高性能MEMS必不可少。
    的头像 发表于 08-05 06:12 2354次阅读

    DN53-高性能频率补偿为DC-DC转换器提供75µs的高稳定性响应

    DN53-高性能频率补偿为DC-DC转换器提供75µs的高稳定性响应
    发表于 04-30 10:01 9次下载
    DN53-<b class='flag-5'>高性能</b>频率补偿为DC-DC转换器<b class='flag-5'>提供</b>75µs的高<b class='flag-5'>稳定性</b>响应

    恒温晶振对温度稳定性解决方案

    恒温晶振(OCXO; KO系列) 对温度稳定性解决方案采用了恒温槽技术: 将晶体置于恒温槽内,通过设置恒温工作点,使槽体保持恒温状态。
    的头像 发表于 09-09 14:31 1406次阅读

    浅谈射频芯片的稳定性

    射频芯片的稳定性是一个关键的设计和性能指标,它描述了芯片在工作过程中的信号稳定性性能的一致性。射频芯片的稳定性主要包括以下几个方面。
    的头像 发表于 06-13 12:40 790次阅读

    理解FPGA的亚稳定性

    摘要:本文叙述了 FPGA 的亚稳定性,叙述了它是如何发生的,是如何导致设计失效的。文 中说明了如何计算亚稳定性能的 MTBF 值,并解释了器件和设计性能的变化将会如何影响该 值。
    发表于 08-07 15:34 0次下载

    怎么分析电路的稳定性

    怎么分析电路的稳定性?  电路的稳定性是指电路在不同条件下保持稳定的能力。稳定性是电路设计中十分重要的一个方面,因为稳定的电路能够
    的头像 发表于 09-17 16:44 1057次阅读

    如何权衡阻抗控制性能稳定性的关系

    阻抗控制性能提升后对稳定性有怎样的影响?如何权衡阻抗控制性能稳定性的关系? 当阻抗控制性能提升时,往往需要更高的控制增益来实现更快的响应和
    的头像 发表于 11-14 15:26 342次阅读
    如何权衡阻抗控制<b class='flag-5'>性能</b>与<b class='flag-5'>稳定性</b>的关系

    IXXAT NT系列高稳定性网关网桥解决方案

    IXXAT NT系列高稳定性网关网桥解决方案
    的头像 发表于 12-22 14:00 237次阅读
    IXXAT NT系列高<b class='flag-5'>稳定性</b>网关网桥<b class='flag-5'>解决方案</b>

    什么是晶振的频率稳定性?如何确保晶振的稳定性呢?

    什么是晶振的频率稳定性?如何确保晶振的稳定性呢? 晶振的频率稳定性是指晶振在工作过程中频率的变化程度。对于许多电子设备和系统而言,晶振频率的稳定性是非常重要的,因为它直接影响到设备的精
    的头像 发表于 01-24 16:11 304次阅读