基于电商场景的高并发RocketMQ实战-Commitlog基于内存的高并发写入优化、基于JVM offheap的内存读写分离机制

🌈🌈🌈🌈🌈🌈🌈🌈
【11来了】文章导读地址:点击查看文章导读!
🍁🍁🍁🍁🍁🍁🍁🍁

Commitlog 基于内存的高并发写入优化

首先,Commitlog 将数据写入磁盘使用的是 磁盘顺序写,这样带来的性能提升是很大的

但是仅仅使用磁盘顺序写,对写入性能的提升还是有限,于是还是用了 mapping 文件内存映射机制,即先把消息数据写入到内存中,再从内存将数据 异步 刷入到磁盘中去,那么就将 磁盘顺序写 又进一步优化为了 内存写 操作

那么通过内存映射优化写入过程,如下图红色部分:

总结:

那么这里基于磁盘顺序写,还添加了 mapping 文件映射机制 来进一步提升了文件性能,将磁盘顺序写优化为内存写操作!

基于 JVM offheap 的内存读写分离机制

broker busy 问题

一般来说,在服务器上部署了一个 java 应用之后,这个应用作为一个 jvm 进程在服务器运行,此时内存一般分为三种:

  • jvm 堆内存:由 jvm 管理
  • offheap 内存:jvm 堆外的内存
  • page cache:操作系统管理的内存

那么通过将消息写入内存中的 page cache 中来大幅提高写消息的性能,但是在高并发的场景下,可能会出现 broker busy,也就是 broker 太繁忙,导致一些操作被阻塞,这是因为高并发下,大量读写操作对同一个 Commitlog 磁盘文件在内存中的映射文件 page cache 同时进行写操作,导致这一个 page cache 被竞争使用的太激烈

那么 RocketMQ 提供了 transientStorePoolEnabled(瞬时存储池启用) 机制来解决 broker busy 的问题,通过这个机制就可以实现 内存级别的读写分离

这个 transiendStorePoolEnabled 机制 也就是:在高并发消息写入 Broker 的时候,先将消息写在 JVM 的堆外内存中,有一个后台线程会定时将消息再刷入内存的 page cache 中,此时针对 MappedFile 的 page cache 的高并发写就转移到了 JVM 的堆外内存 中,而对于 Consumer 的高并发的读操作最终是落在了 MappedFile 的 page cache 中,实现了高并发读写的分离

总之呢,这个机制实现了高并发的读写分离,消费者高并发的读从 read queue 中读取数据,最终高并发的读肯定是落到了 MappedFile 的 page cache 中,而生产者高并发的写则是直接面向了 jvm offheap 堆外内存,就不会出现 MappedFile page cache 高并发情况下的争用问题了,如下图紫色部分:

在这里插入图片描述

基于系统设计层面的考虑:

虽然使用 transiendStorePoolEnabled 机制可以提高高并发场景下 Broker 的读写性能,但是这可能会造成一定的数据丢失!

在这个机制之下,数据会先写入 jvm offheap 中,也就是堆外内存,如果 jvm 进程挂了,就会导致 jvm offheap 中的数据还没来得及刷到 MappedFile page cache 中就丢失了,而 jvm 进程挂掉的概率还是挺大的,因此这个机制是牺牲了一定的数据可靠性,来提升了性能!

所以,针对不同的场景,要做出不同的设计,如果是对消息严格要求可靠的金融等场景来说,那么就不能使用这个机制,其他情况下保持默认就可以了!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分布式系统架构设计之分布式通信机制

二、分布式通信机制:保障系统正常运行基石 在分布式系统中,各个组件之间的通信是保障系统正常运行的基石,直接影响到系统的性能、可扩展性以及整体的可维护性。接下来我们就一起看看通信在分布式系统中的重要性,以及一些常用的技…

鸿蒙开发中的坑(持续更新……)

最近在使用鸿蒙开发时,碰到了一些坑,特做记录,如:鸿蒙的preview不能预览,轮播图组件Swiper使用时的问题,console.log() 打印的内容 一、鸿蒙的preview不能预览 首先,只有 ets文件才能预览。 其…

SICP : The Elements of Programming

好的计算机编程语言应具备的三个特性 基础单元表达式,计算机编程语言最最最基础单元,理应具备的表达式组合的能力,能够通过基础单元表达式组合成更复杂的元素抽象的能力,能通过复杂的元素抽象成更高层的单元 基础单元表达式 加 …

外卖系统开发:构建高效、安全的外卖平台

在当今数字化时代,外卖系统成为了餐饮行业不可或缺的一部分。本文将介绍如何使用一些主流的技术和代码片段来开发一个简单而功能强大的外卖系统。 1. 技术选择 在开始外卖系统的开发之前,首先需要选择合适的技术栈。以下是一个常见的技术栈&#xff1…

树莓派Pi4B简介

树莓派是什么?Raspberry Pi(中文名为“树莓派”,简写为RPi,或者RasPi/RPi)是为学生计算机编程教育而设计,只有信用卡大小的卡片式电脑,其系统基于Linux。 树莓派4B与树莓派3B/3B参数对比: 具体的实物图如下&#xff1a…

MyBatis——MyBatis的缓存

MyBatis的缓存 创建工程: 1缓存介绍 为什么使用缓存? 首次访问时,查询数据库,并将数据存储到内存中;再次访问时直接访问缓存,减少IO、硬盘读写次数、提高效率 Mybatis中的一级缓存和二级缓存?…

二维码智慧门牌管理系统:提升社区管理智能化水平

文章目录 前言一、全方位信息录入与查询二、公安权限账户访问的公安大数据后台三、社区工作人员申请权限安装录入软件四、业主通过移动终端扫描标准地址二维码门牌自主申报录入五、系统的价值 前言 在数字化时代,社区管理面临着更新流动人口信息、准确录入六实相关…

jenkins Job华为云EIP变更带宽

引言: 在数字化时代,云服务资源的弹性管理是企业降低运营成本、提高效率的关键手段。通过弹性公网IP(EIP)服务,企业可以实现按需计费,优化网络支出。然而,根据业务流量的不同阶段调整计费模式,…

ARM串口通信编程实验

完成:从终端输入选项,完成点灯关灯,打开风扇关闭风扇等操作 #include "gpio.h" int main() {char a;//char buf[128];uart4_config();gpio_config();while(1){//接收一个字符数据a getchar();//发送接收的字符putchar(a);switch(…

网络安全保障领域

计算机与信息系统安全---最主要领域 云计算安全 IaaS、PasS、SaaS(裸机,装好软件的电脑,装好应用的电脑) 存在风险:开源工具、优先访问权、管理权限、数据处、数据隔离、数据恢复、调查支持、长期发展风险 云计算安全关键技术:可信…

华清远见嵌入式学习——ARM——作业3

作业要求: 代码效果图: 代码: led.h #ifndef __LED_H__ #define __LED_H__#define RCC_GPIO (*(unsigned int *)0x50000a28) #define GPIOE_MODER (*(unsigned int *)0x50006000) #define GPIOF_MODER (*(unsigned int *)0x50007000) #defi…

音视频技术开发周刊 | 325

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 AI读心术震撼登顶会!模型翻译脑电波,人类思想被投屏|NeurIPS 2023 在最近举办的NeurIPS大会上,研究人员展示了当代AI更震撼…

FPGA-ZYNQ-7000 SoC在嵌入式系统中的优势

FPGA-ZYNQ-7000 SoC在嵌入式系统中的优势 本章节主要参考书籍《Xilinx Zynq-7000 嵌入式系统设计与实现 基于ARM Cortex-A9双核处理器和Vivado的设计方法 (何宾,张艳辉编著)》 本章节主要讲述FPGA-ZYNQ-7000 SoC在嵌入式系统中的优势,学习笔…

Rancher小白学习之路

官网:http://docs.rancher.cn/docs/rancher1/rancher-service/load-balancer/_indexhttp://docs.rancher.cn/docs/rancher1/rancher-service/load-balancer/_indexRancher2.5集群搭建&K3S生产环境搭建手册 - 知乎 【rancher教程】十年运维大佬两小时带你搞定ran…

关于MybatisPlus自动转化驼峰命名规则配置mapUnderscoreToCamelCase的个人测试和总结

关于MybatisPlus自动转化驼峰命名规则配置mapUnderscoreToCamelCase的个人测试和总结 测试一:没有添加 自动转化的配置,且domain中的属性名称和数据库的字段名称一致测试二:没有添加自动转化配置i,domain属性名userPassword和数据…

【csapp】cachelab

文章目录 Part APart B32 * 3264 * 6461 * 67 实验全程参考大佬的博客CS:APP3e 深入理解计算机系统_3e CacheLab实验 ,感觉大佬在矩阵转置那块介绍的还是有些简略,我自己又做了点动图加以补充理解。膜拜大佬! Part A 先解决解析命令行参数的…

年龄相关的微环境变化突显了PDGF-C在ER+乳腺癌转移复发中的作用

今天给同学们分享一篇实验文章“Age-associated microenvironmental changes highlight the role of PDGF-C in ER breast cancer metastatic relapse”,这篇文章发表在Nat Cancer期刊上,影响因子为22.7。 结果解读: ER乳腺癌转移复发的同种…

LH7904D 太阳能警示灯 0.4W×2

应用范围: 可安装在电线杆,路灯,围挡,交 通护栏及各种杆式固体等场所起警示作用。 产品特点: 采用进口PS材质; 光控无开关,白天不闪,昏暗环境自动闪烁,无需手动操作,省时省事; …

cfa一级考生复习经验分享系列(十)

我的背景:我是在职备考CFA的,工作也是跟金融不相关的,工作日基本只有晚上能看最多2-3小时,主要靠周末大块时间复习。由于平时工作忙碌直到9月中才开始看各种资料。但是可能我复习策略比较有效率,所以最后4次官方mock平…

彻底搞懂MySQL的执行计划

欢迎关注微信公众号:互联网全栈架构 MySQL执行计划(EXPLAIN)可以提供SQL运行的一些信息,相当于模拟SQL的执行,从而让我们可以对SQL语句做更深入的分析和了解。在实际开发过程中,我们经常会使用执行计划来分…