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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 今年的云原生编程挑战赛围绕“挑战 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

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
29天前
|
算法 Linux C++
【Linux系统编程】深入解析Linux中read函数的错误场景
【Linux系统编程】深入解析Linux中read函数的错误场景
204 0
|
1月前
|
消息中间件 存储 数据库
RocketMQ 流数据库解析:如何实现一体化流处理?
RocketMQ 5.0 是一款云原生的消息中间件,旨在覆盖更多业务场景。它针对国内企业在数字化转型中面临的多场景消息处理需求,提供了一体化的解决方案。
111926 7
|
1月前
|
消息中间件 存储 数据库
RocketMQ 流存储解析:面向流场景的关键特性与典型案例
RocketMQ 流存储解析:面向流场景的关键特性与典型案例
88358 0
|
1月前
|
存储 关系型数据库 OLAP
TiDB适用场景解析:海量数据存储与高并发读写的利器
【2月更文挑战第25天】随着大数据时代的到来,海量数据存储和高并发读写成为众多企业面临的挑战。TiDB作为一种高性能、分布式的关系型数据库,以其独特的架构和强大的功能,在多个场景中展现出了卓越的性能。本文将详细探讨TiDB在海量数据存储、高并发读写等场景下的适用情况,分析其在不同业务场景中的优势与应用价值。
|
1月前
|
存储 消息中间件 缓存
RocketMQ 5.0 分级存储背后技术优化包含那几个方面
RocketMQ 5.0 分级存储背后的技术优化是一个综合性的系统工程,需要考虑多个方面,包括存储介质的选择、数据读写策略的设计、数据压缩和解压缩技术的引入、自动的数据分级和迁移机制的实现,以及高可用性和容错性的保证等。这些技术优化的目的是为了实现存储成本和性能的最优平衡,提高系统的可靠性和可用性,满足大规模数据处理的需求。
104 1
|
1月前
|
消息中间件 存储 运维
|
2天前
|
Rust 安全 程序员
Rust vs Go:解析两者的独特特性和适用场景
在讨论 Rust 与 Go 两种编程语言哪种更优秀时,我们将探讨它们在性能、简易性、安全性、功能、规模和并发处理等方面的比较。同时,我们看看它们有什么共同点和根本的差异。现在就来看看这个友好而公平的对比。
|
10天前
|
消息中间件 微服务
RabbitMQ入门指南(四):交换机与案例解析
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了交换机在RabbitMQ中的作用与类型、交换机案例(Fanout交换机、Direct交换机、Topic交换机)等内容。
19 0
|
1月前
|
消息中间件 存储 数据库
深度剖析 RocketMQ 5.0,流存储:流场景的诉求是什么?
本文将从使用的角度出发,来更详细的展示一下流存储的场景,看看它和业务消息的场景有哪些区别。 RocketMQ 5.0 面向流存储的场景,提供了哪些特性。再结合两个数据集成的案例,来帮助大家了解流存储的用法。
3347 2
|
1月前
|
消息中间件 存储 Cloud Native
深度剖析 RocketMQ 5.0,架构解析:云原生架构如何支撑多元化场景?
了解 RocketMQ 5.0 的核心概念和架构概览;然后我们会从集群角度出发,从宏观视角学习 RocketMQ 的管控链路、数据链路、客户端和服务端如何交互;学习 RocketMQ 如何实现数据的存储,数据的高可用,如何利用云原生存储进一步提升竞争力。
140040 2

相关产品

  • 云消息队列 MQ
  • 推荐镜像

    更多