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

简介:今年的云原生编程挑战赛围绕“挑战 Serverless 创新实践”展开,将继续深度探索 RocketMQ、Dubbo3、Serverless 三大热门技术领域,为热爱技术的年轻人提供一个挑战世界级技术问题的舞台。希望选手们能用手中的技术,为全社会创造更大的价值。
今年的云原生编程挑战赛围绕“挑战 Serverless 创新实践”展开,将继续深度探索 RocketMQ、Dubbo3、Serverless 三大热门技术领域,为热爱技术的年轻人提供一个挑战世界级技术问题的舞台。希望选手们能用手中的技术,为全社会创造更大的价值。
赛道一:针对冷热读写场景的 RocketMQ 存储系统设计 瓜分60万现金大奖,三大赛道任意选择,
更有奇葩任务定义拿奖新姿势,快快点击报名吧!
https://tianchi.aliyun.com/specials/promotion/cloudnative2021
1、赛题背景
【【赛道解析】针对冷热读写场景的 RocketMQ 存储系统设计思路拆解】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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

    推荐阅读