赛道解析针对冷热读写场景的rocketmq存储系统设计思路拆解

阿里云开发者 阿里云开发者     2022-12-26     247

关键词:

简介:今年的云原生编程挑战赛围绕“挑战 Serverless 创新实践”展开,将继续深度探索 RocketMQ、Dubbo3、Serverless 三大热门技术领域,为热爱技术的年轻人提供一个挑战世界级技术问题的舞台。希望选手们能用手中的技术,为全社会创造更大的价值。

今年的云原生编程挑战赛围绕“挑战 Serverless 创新实践”展开,将继续深度探索 RocketMQ、Dubbo3、Serverless 三大热门技术领域,为热爱技术的年轻人提供一个挑战世界级技术问题的舞台。希望选手们能用手中的技术,为全社会创造更大的价值。


赛道一:针对冷热读写场景的 RocketMQ 存储系统设计


瓜分60万现金大奖,三大赛道任意选择,

更有奇葩任务定义拿奖新姿势,快快点击报名吧!

https://tianchi.aliyun.com/specials/promotion/cloudnative2021


1、赛题背景


Apache RocketMQ 作为的一款分布式的消息中间件,历年双十一承载了万亿级的消息流转,为业务方提供高性能低延迟的稳定可靠的消息服务。其中,实时读取写入数据和读取历史数据都是业务常见的存储访问场景,而且会在同一时刻同时出现,因此针对这个混合读写场景进行优化,可以极大的提升存储系统的稳定性。同时英特尔® 傲腾™ 持久内存作为一款与众不同的独立存储设备,可以缩小传统内存与存储之间的差距,有望给 RocketMQ 的性能再次飞跃提供一个支点。


2、题目解析


本次赛题大致有两个关键点:分层存储如何设计、AEP在场景中扮演的角色。

首先分层存储并不是一个陌生的概念,也是一个被广泛应用技术,广义上讲,就是将数据存储在不同层级的介质中,并在不同的介质之间进行自动或者手动的数据迁移,复制等操作。事实上,分层存储的设计并没有唯一最优解的说法,需要具体场景具体设计,并尽可能考虑到极端情况。


  • 4 核 8G 规格 ECS,配置 400G 的 ESSD PL1 云盘(吞吐可达到 350MiB/s ref),配置 126G 傲腾™持久内存。从机器配置上看,各个存储介质速度 8G-DRAM > 126G-AEP > 400G-ESSD。


  • 正确性评测中会重启 ECS,并清空傲腾盘上的数据。重启 ECS 采用的是模拟断电的方法,因此需要保证数据至少落盘一份到 ESSD 中。


  • 性能评测时,有 50% 的队列会从当前最大位点消费,剩余的从 0 开始,因此可以对“冷热数据”进行区分处理,提高系统的稳定性和运行效率。


  • 虽然操作系统中有 PageCache,但是它在某种极端情况下表现得“笨笨”的,比如说混合读写中,刚写入的“热数据”可能会因为内存不足而被换出,消费时的数据又会污染本就摇摇欲坠的 PageCache,最差情况是可能导致其完全失效,全部读写都走了 SSD。


其次是如何高效利用这块 AEP。


  • 英特尔® 傲腾™ 内存是一款与众不同的独立存储设备,可以缩小传统内存与存储之间的差距。


  • 对于某一个设备在什么情况下使用、如何使用都是基于其特性出发的,就比如之前的机械硬盘因为物理寻址方式,顺序读写时吞吐远大于随机读写,而 DRAM 和固态硬盘则是电路寻址,不考虑硬件和软件上的缓存优化时是否顺序读写差距不大;而傲腾内存的特性又不同于其他存储介质,深入了解它将有助于更灵活更高效的使用。

https://developer.aliyun.com/article/770338?groupCode=aliyundb


3、解题思路


分层存储:


  • 由于存储介质容量、速度上有较大差异,因此可以将冷热数据进行区分,新写入的数据维持在 DRAM 中,冷数据在读取前及时复制到 AEP 中。


  • 由于 ESSD 的带宽非常有限,冷数据在迁移过程中会占用宝贵资源,因此可以在写入阶段采用双写。


  • 由于是冷热读写的队列是随机指定的,需要程序能自己判断并区别对待。


  • 可以在内存中自己维护一份缓存,减少对 PageCache 的依赖。


4、如何拿好成绩


由于成绩是取得全部流程时间总和,且各个环节互相影响,因此可以大胆发挥创造,找出最具“性价比”的优化。


例如为了优化后续读流程对数据进行规整,或者为了优化写性能在 ESSD 中只 Append 数据顺序落盘,在 AEP 或者 DRAM 中构造索引等各种方法,期待选手们都能获得自己满意的成绩!


5、傲腾技术参考文档:


  • Intel傲腾持久化内存介绍:

https://software.intel.com/content/www/us/en/develop/videos/overview-of-the-new-intel-optane-dc-memory.html


  • 傲腾持久化内存(AEP)工作模式:

https://code.aliyun.com/dts_test/dts-contest/blob/master/doc/appdirect-tips.md


  • PMEM IO官网:

https://pmem.io/


  • 如何模拟PMEM:

https://software.intel.com/content/www/us/en/develop/articles/how-to-emulate-persistent-memory-on-an-intel-architecture-server.html


  • PMEM编程指北:

https://code.aliyun.com/dts_test/dts-contest/blob/master/doc/PMEM%E7%BC%96%E7%A8%8B%E6%8C%87%E5%8C%97.md


  • PMDK示例程序:

https://github.com/pmem/pmdk-examples


  • 评测环境使用PMEM:

https://code.aliyun.com/dts_test/dts-contest/blob/master/doc/fsdax-pmem.md?spm=5176.12281978.0.0.2e7f4154YmlInw&file=fsdax-pmem.md


  • JAVA使用PMEMKV:

https://github.com/pmem/pmemkv-java


  • Java* Support for Intel® Optane™ DC Persistent Memory:

https://software.intel.com/content/www/us/en/develop/articles/java-support-for-intel-optane-dc-persistent-memory.html?spm=5176.12281978.0.0.2e7f4154YmlInw


  • JAVA持久内存编程教程(视频):

https://software.intel.com/content/www/us/en/develop/videos/persistent-memory-programming-with-java.html

原文链接:https://developer.aliyun.com/article/788002?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

rocketmq使用场景

...统后,注册系统就可以把其他的操作放入对应的消息队列RocketMQ中然后马上返回用户结果,由消息队列RocketMQ异步进行操作。用户只需在注册页面等待注册数据写入注册系统和消息队列RocketMQ的时间,即等待55ms即可登录。异步解... 查看详情

阿里资深架构推荐:rocketmq实战与原理解析。

...的日志传输领域到后来阿里集团全维度在线业务的支撑,RocketMQ被广泛用于交易、数据同步、缓存同步、IM通讯、流计算、IoT等场景。在双11全球狂欢节中,RocketMQ以万亿级的消息总量支撑了全集团3000多个应用,为复杂的业务场景... 查看详情

云小课|gaussdb(dws)数据存储尽在掌控,冷热数据切换自如(代码片段)

...理,不仅可以提高数据分析性能还能降低业务成本。针对数据使用的一些场景,可以将数据按照时间分为:热数据、冷数据。冷热数据主要从数据访问频率、更新频率进行划分。Hot(热数据):访问、更新... 查看详情

rocketmq原理解析

参考技术ARocketMQ原理解析说明:NameServer是没有状态的,即NameServer中的Broker和topic等状态信息(通过其他角色上报获取)都是保存在内存中的,不会持久化存储(可通过配置实现),集群可以横向扩展。主要功能如下:a.接收Broker... 查看详情

云原生事件驱动引擎(rocketmq-eventbridge)应用场景与技术解析

在刚刚过去的RocketMQSummit2022全球开发者峰会上,我们对外正式开源了我们的新产品RocketMQ-Eventbridge事件驱动引擎。RocketMQ给人最大的印象一直是一个消息引擎。那什么是事件驱动引擎?为什么我们这次要推出事件驱动引擎... 查看详情

kafkarabbitmqrocketmq差异

...信队列、优先级队列适用于秒杀、流控、系统解耦等场景RocketMQ提供顺序、延迟、定时、重投、死信、事务消息适用于电商、金融等场景对比分析没有最好的技术,只有最合适的技术,每个消息中间件都有自己的优劣。性能类别Q... 查看详情

rocketmq事务消息

RocketMQ事务消息在实现上充分利用了RocketMQ本身机制,在实现零依赖的基础上,同样实现了高性能、可扩展、全异步等一系列特性。在具体实现上,RocketMQ通过使用HalfTopic以及OperationTopic两个内部队列来存储事务消息推进状态,如... 查看详情

tidb6.0实战分享丨冷热存储分离解决方案(代码片段)

...行直接的管理,满足不同的业务场景需要。如:1.冷热分离存储,降低存储成本TiDB6.0正式支持数据冷热存储分离,可以降低SSD使用成本 查看详情

解析rocketmq业务消息——“事务消息”

引言:在分布式系统调用场景中存在这样一个通用问题,即在执行一个核心业务逻辑的同时,还需要调用多个下游做业务处理,而且要求多个下游业务和当前核心业务必须同时成功或者同时失败,进而避免部... 查看详情

存储优化--分区与冷热分离

本文是专题的第一篇文章,主要讲解优化数据存储,涉及到锁、批处理、重试机制以及数据一致性等问题。下面我们就开始吧。一、案例有一个客服工单系统,会从邮件服务器中获取客服邮箱收到的邮件,并且将这些邮件自动生... 查看详情

rocketmq存储优化技术解析——图解源码级解析(代码片段)

...#x1f34a;Java学习:Java从入门到精通总结🍊深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想🍊绝对不一样的职场干货:大厂最佳实践经验指南📆最近更新:2023年1月13日🍊个人简介:通信工程... 查看详情

elasticsearch冷热数据的读写分离

 步骤一、冷热分离集群配置比如三个机器共六个node的es集群。每个机器上各挂载一个ssd和一个sata。每个机器需要启动两个es进程、每个进程对应不同类型的磁盘。关键配置:node.max_local_storage_nodes:2 #允许每个机器启动两... 查看详情

rocketmq消息存储原理

参考技术A消息存储CommitLog主要是为了提高消息消费的性能消费队列ConsumeQueue(索引)内容consumequeue文件夹的组织方式具体存储路径通过key或时间区间来查询消息Broker是混合型存储结构索引和数据分离的存储结构生产者和消费者使用... 查看详情

rocketmq事务消息原理及使用方法解析(代码片段)

...#x1f34a;Java学习:Java从入门到精通总结🍊深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想🍊绝对不一样的职场干货:大厂最佳实践经验指南📆最近更新:2023年3月24日🍊个人简介:通信工程... 查看详情

rocketmq:消息存储机制详解与源码解析(代码片段)

文章目录消息存储机制1.前言2.核心存储类:DefaultMessageStore3.消息存储流程4.消息存储文件5.存储文件内存映射5.1.MapperFileQueue5.2.MappedFile5.2.1.commit5.2.2.flush5.3.TransientStorePool6.刷盘机制6.1.同步刷盘6.2.异步刷盘消息存储机制1.前言... 查看详情

平安保险基于spi机制的rocketmq定制化应用

第二点,业务系统的使用场景会特别多,使用场景广泛带来的问题就是会创建大量的topic,所以这时候就得去衡量消息中间件在多topic场景下性能是否能满足需求。我自己在测试的时候呢,用1K的消息随机往1万个topic写数据,单bro... 查看详情

2rocketmq源码解析之与springboot集成(代码片段)

上一篇文章分析了一下RocketMQ的基本架构、概念、安装以及使用方式。现在大多数项目都是基于SpringBoot。因为它很方便的自动装配机制,所以现在构建项目都是基于SpringBoot。下面我们来分析一下RocketMQ是如何集成SpringBoot的。... 查看详情

大数据之hadoop的hdfs存储优化—异构存储(冷热数据分离)

异构存储主要解决,不同的数据,储存在不同类型的硬盘中,达到最佳性能的问题1)存储类型RAM_DISK:内存镜像文件系统SSD:SSD固态硬盘DISK:普通磁盘,在HDFS中,如果没有主动声明数据目录储存类型默认都是DISKARCHIVE:没有特... 查看详情