当前位置: 首页 > news >正文

论文分享 | FAST'23 阿里云提出的针对SMR优化的存储引擎SMRSTORE

今天分享的一篇最近阅读的论文是FAST'23的SMRstore: A Storage Engine for Cloud Object Storage on HM-SMR Drives。

https://www.usenix.org/conference/fast23/presentation/zhou

这篇文章是由阿里巴巴公司完成的,在这篇文章中,团队针对SMR的特性提出了一种新的存储引擎SMRSTORE,该存储引擎充分利用了SMR更高的存储密度来降低最高15%成本,并通过优秀的设计使得效率与CMR集群相当,对于阿里云这样的大规模存储集群而言,降低15%的成本且不需要付出性能代价会带来很大的收益。

如果对于不了解SMR的读者,可以点击副推查看相应知识点,对SMR硬盘有了一定的认识后也就不难理解阿里提出该引擎的根本动机——降低成本。但是,要降低成本,必须要以可接受的最小限度的性能牺牲为前提,接下来,我们就继续来看看,阿里采用了什么手段来优化SMR的性能。

我们先把结论放在前面,以下的优化手段类似于ZNS:

1)SMRSTORE直接管理了全部的地址空间,取代了文件系统,将空间划分为zone,每个zone只能append顺序写入,禁止随机写入;

2)无论元数据还是数据,都采用log的形式写入SMR顺序zone;

3)GC是导致性能下降的关键,指导数据放置,设计相关策略,每个zone只允许相似生命周期的数据共享,并尽可能为大数据分配完整zone。

背景

对象存储往往需要使用到大量的HDD,成本效益是构建一个具有竞争力的云对象存储的关键挑战。由于SMR的出现,通过堆叠磁道相较于CMR增加了25%的存储密度,但是由于对随机写的限制,需要设计新的软件栈或存储引擎。

当前市面上针对HM-SMR存在三种软件栈设计方式,分别位于不同的层次,首先是块IO子系统层,通过设计STL将SMR映射成为普通块设备(dm-zoned),其次是文件系统层,支持日志结构或copy-on-write的文件系统也可以直接适配SMR特性(F2FS),最后是实现于应用层(GearDB)或是直接应用于Alibaba Archive Storage Service 、Huawei Object Store等服务。

文章分析认为,应用dm-zoned由于随机更新会使得吞吐量严重下滑,应用F2FS等文件系统由于大量GC会导致吞吐量的剧烈变化(文章第三章结合数据进行了测试),因此,前两种方法并不使用于实际,阿里巴巴团队选择了结合阿里OSS架构,利用ZBD接口,综合设计了GC、全日志化的直接设计了一个运行于用户态的存储引擎SMTSTORE。

OSS Workflow

5930e201aca61ad8a64948db04db7b35.png

本次研发的SMRSTORE将应用于Alibaba Cloud Object Storage Service (OSS),因此,文章有必要介绍一下当前OSS工作流,OSS IO栈包含一个前端层、一个服务层和一个称为盘古的分布式存储持久化层,前端层的工作主要是处理HTTP请求,并将其发送到服务层,服务层由大量的KV服务器组成,它主要是两个职责,一个是将对象写入到盘古,另一个是使用基于LSM-Tree的KV存储维护对象的元数据(从对象名称到相应PANGU文件中的位置的映射),并将这些元数据写入额外的PANGU文件。

盘古是一个分布式文件系统,每个盘古集群由一组主服务器master和大量的仓储服务器chunkserver组成,主服务器中管理了盘古文件的元数据信息,仓储服务器中存储了盘古文件的具体数据。每个仓储服务器由60个负责存储的HDD和2个负责缓存的SSD组成,对于HDD利用Linux软件栈进行IO,采用EXT4文件系统管理,对于SSD则使用了一个自主设计的存储文件系统。

4feda2ce6d71e2dab34158381130fc9e.png

对于一个盘古文件,它都是一个只支持追加写的而且可能被切分存放于若干个大块Chunk,每个Chunk有一个唯一的UUID,盘古可以创建、追加写入、读、删除以及封装一个Chunk。封装操作会在1)Chunk大小达到限制;2)应用程序关闭了盘古文件或者写操作完成;3)遇到错误。时触发,因此,Chunk的大小不是固定的。对于一个盘古文件,只有最后一个Chunk可以被写入,只有已经封装的Chunk会从SSD缓存中持久化入HDD存储。盘古文件系统还设计了冗余和纠删码等功能以提供数据的容错能力。

9f079d883696dc9b7179dcd6e79d47cd.png

上图表示了传统OSS中数据流,我们假设要写入一个Object Foo,首先在KV Server中找到对应的盘古文件及其偏移和大小,然后KV Server联系盘古主服务器,定位对应盘古文件的最后一个chunk的chunkserver,并由这个chunkserver将数据追加写入chunk对应的EXT4文件中,为了数据完整性检验,每个写入被切分为4KB大小,前4048B为数据,后48B为段位置和Checksum的footer,在每个chunkserver中,每个chunk在EXT4文件系统中的名字就是它的ChunkID。

将一个打开的盘古文件定义为,一个流始于KV服务器打开了一个盘古文件,终于KV服务器关闭了盘古文件,根据操作和数据类别的不同,可以将流划分为以下五种,并且它们具有不同的服务要求:

19351bb484e602e2398e16094c48c3b0.png

设计

从前面的背景中可以看出,HDD存在与仓储服务器中,将CMR替换为SMR在原来的EXT4+Kernel场景下已经不再适用,再结合之前的分析,无论是使用dm-zoned还是F2FS,都不足以满足阿里的高性能要求,因此,需要针对仓储服务器的HDD相关模块设计新的存储引擎以支持SMR。

269df934b028c7895d78b177b6424a06.png

设计主要解决了以下几个关键挑战:

1)数据在存储引擎上应当如何排布?

所有的地址空间都由SMRSTORE管理。地址空间被划分为superzone、metazone、datazone,采用“record”作为metazone和datazone的基本单元。这样的排布方式似乎有点类似于F2FS:

78173c282c9c32859dd590f8e770da2d.png

但是,无论metazone还是datazone,在SMRSTORE中均是日志化的顺序写入,以下图方式排列:

80c42cb2722a91279d1d903644254c53.png

如图所示,superzone为第一个SMR zone,存放了格式化版本、时间戳和其他一些系统配置,metazone为紧接着400个zone,存放了SMRSTORE的一些元数据,它们由3种不同类别的record组成,剩余均为datazone,由2种类别的record组成,data record中的负载按4KB进行切片和添加footer,从而允许只对DataRecord进行部分读取并校验完整性。

2)在之前的EXT4系统中,采用ChunkID为文件名的方式,索引Chunk,在新的存储引擎中如何设计数据索引?

8ccd6fe8edbb34d41f9f7de1879e9b95.png

数据索引存在于内存中,建立了ChunkID+offset+size到Datazone+offset+size的三元组映射。一个Chunk可以有多个record,它们都按照数据在Chunk中的偏移进行排序并构成一个Index Group链表,链表的起始地址保存在ChunkTable中,对一个Chunk+offset+size的访问流程就是查ChunkTable,再查链表,从而定位Datazone+offset+size。

需要注意的是,具体的查找算法在论文中并没有讨论,采用的数据结构和占用内存大小也没有具体说明。

3)区块该如何管理?

区块管理上,SMRSTORE基本和ZNS一致,采用了一个状态转换自动机对zone进行管理:

2e30d3c8f6bf66ee46f61d11bbe04444.png

SMRSTORE维护了一个Zone Table,关联了ZoneID、状态、关联到zone的索引链表、写指针信息。在区块分配时,为了最大可能使得同一区块内的数据生命周期接近以及性能的稳定,分配时遵循以下原则:

  • 仅允许相同流类型(见上表,他们具有接近的期望存在时间)的chunk共享一个datazone;

  • 调整了最大的chunkSize=datazoneSize,使得对于大chunk,可以完整占据一个zone;

  • 采用池化zone,为每个type的流预先分配和打开一定数量的zone。

822738e5062fe02144a960f863804e43.png

4)垃圾回收应该怎么进行?

垃圾回收的步骤非常经典:受害段选择、数据迁移和元数据更新。受害段选择使用了贪心算法选取垃圾最多的zone回收,数据迁移时扫描zone关联的有效的索引,将他们的数据迁移到干净zone,并设置了一个动态的GC吞吐量阀门以避免后台GC对前台性能产生影响,元数据更新将对应的索引关系更新,即完成了整个垃圾回收过程。

5)启动时如何恢复当前拓扑结构?(recovery逻辑)

最后一个问题是如何恢复内存中数据结构,比如上面都有提及的metadata table和zone table,手段是将他们每隔一段时间存放在metazone里面。

SMRSTORE设计了checkpoint,作为当前内存中数据结构的快照。checkpoint由若干个record组成用于记录相关的table(例如,metadata table比较大,需要若干record,zone table通常一个table就够了),一个checkpoint从特殊的start_record开始,到end_record结束。

SMRSTORE 对于chunk的创建、封装、删除操作会写入journal记录,但是不会记录写入(性能考虑,但有其他方法可以确保相应结构正确),因为checkpoint的设计是non-blocking的,checkpoint的records可能会和journal交叉,journal的存在确保数据结构可以被正确恢复。

af57f1e9d381e8cc27d65d93823024f8.png

一个完整的恢复过程是:

  1. 找到最近的一个checkpoint,实现方法是直接扫描整个metazone区域(前400个zone);

  2. 将checkpoint加载入内存恢复出checkpoint快照保存下来的数据结构;

  3. 重放start-end之间的所有journal,恢复在checkpoint之后的操作;

  4. 扫描datazone,由于没有journal记录写入,应该扫描datazone,将对应的有效的元数据更新写入内存;

论文的实验部分不是本文重点关注的内容,感兴趣的读者可以自行阅读,阅读原文可以快速直达。

相关文章:

论文分享 | FAST'23 阿里云提出的针对SMR优化的存储引擎SMRSTORE

今天分享的一篇最近阅读的论文是FAST23的SMRstore: A Storage Engine for Cloud Object Storage on HM-SMR Drives。 https://www.usenix.org/conference/fast23/presentation/zhou 这篇文章是由阿里巴巴公司完成的,在这篇文章中,团队针对SMR的特性提出了…...

题目:建造房屋 (蓝桥OJ3362)

问题描述: 代码: #include<bits/stdc.h> using namespace std; int n, m, k, ans, mod 1e9 7; long long dp[55][2605]; /*dp[i][j]&#xff1a;第i个街道上建j个房屋的总方案数枚举所有的转移&#xff0c;累加到dp[n][k]即总方案数 */ int main() {cin >> n &…...

智能合约平台开发指南

随着区块链技术的普及&#xff0c;智能合约平台已经成为了这个领域的一个重要趋势。智能合约可以自动化执行合同条款&#xff0c;大大减少了执行和监督合同条款所需的成本和时间。那么&#xff0c;如何开发一个智能合约平台呢&#xff1f;以下是一些关键步骤。 一、选择合适的区…...

数学建模-最优包衣厚度终点判别法(主成分分析)

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是viperrrrrrr~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff…...

Mysql内存表及使用场景(12/16)

内存表&#xff08;Memory引擎&#xff09; InnoDB引擎使用B树作为主键索引&#xff0c;数据按照索引顺序存储&#xff0c;称为索引组织表&#xff08;Index Organized Table&#xff09;。 Memory引擎的数据和索引分开存储&#xff0c;数据以数组形式存放&#xff0c;主键索…...

Django交易商场

Hello&#xff0c;我是小恒不会java 最近学习django&#xff0c;写了一个demo,学到了不少东西。 我在GitHub上开源了&#xff0c;提示‘自行查看代码&#xff0c;维护&#xff0c;运行’。 最近有事&#xff0c;先发布代码了&#xff0c;我就随缘维护更新吧 介绍&#xff1a; 定…...

华为校园公开课走入上海交大,鸿蒙成为专业核心课程

4月12日&#xff0c;华为校园公开课在中国上海交通大学成功举办&#xff0c;吸引了来自计算机等相关专业的150余名学生参加。据了解&#xff0c;由吴帆、陈贵海、过敏意、吴晨涛、刘生钟等教授在中国上海交通大学面向计算机系本科生开设的《操作系统》课程&#xff0c;是该系学…...

【会员单位】泰州玉安环境工程有限公司

中华环保联合会理事单位 水环境治理专业委员会副主任委员单位 我会为会员单位提供服务&#xff1a; 1、企业宣传与技术项目对接&#xff1b; 2、企业标准、行业标准制定&#xff1b; 3、院士专家指导与人才培训 4、国际与国内会议交流 5、专精特新、小巨人等申报认证 6…...

Google视觉机器人超级汇总:从RT、RT-2到AutoRT/SARA-RT/RT-Trajectory、RT-H

前言 随着对视觉语言机器人研究的深入&#xff0c;发现Google的工作很值得深挖&#xff0c;比如RT-2 ​想到很多工作都是站在Google的肩上做产品和应用&#xff0c;​Google真是科技进步的核心推动力&#xff0c;做了大量大模型的基础设施&#xff0c;服(推荐重点关注下Googl…...

LeetCode-1143. 最长公共子序列【字符串 动态规划】

LeetCode-1143. 最长公共子序列【字符串 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;动规五部曲解题思路二&#xff1a;1维DP解题思路三&#xff1a;0 题目描述&#xff1a; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。…...

从0开始创建单链表

前言 这次我来为大家讲解链表&#xff0c;首先我们来理解一下什么是单链表&#xff0c;我们可以将单链表想象成火车 每一节车厢装着货物和连接下一个车厢的链子&#xff0c;单链表也是如此&#xff0c;它是将一个又一个的数据封装到节点上&#xff0c;节点里不仅包含着数据&…...

STC89C52学习笔记(十)

STC89C52学习笔记&#xff08;十&#xff09; 综述&#xff1a;本文介绍了DS18B20和单总线协议&#xff0c;以及讲述了如何使用DS18B20测量温度。 一、单总线协议 1.只有一根通讯线&#xff1a;DQ &#xff08;常见的运用单总线的两种设备&#xff1a;DS18B20和DHT11&#…...

初识二叉树和二叉树的基本操作

目录 一、树 1.什么是树 2. 与树相关的概念 二、二叉树 1.什么是二叉树 2.二叉树特点 3.满二叉树与完全二叉树 4.二叉树性质 相关题目&#xff1a; 5.二叉树的存储 6.二叉树的遍历和基本操作 二叉树的遍历 二叉树的基本操作 一、树 1.什么是树 子树是不相交的;…...

如何开辟动态二维数组(C语言)

1. 开辟动态二维数组 C语言标准库中并没有可以直接开辟动态二维数组的函数&#xff0c;但我们可以通过动态一维数组来模拟动态二维数组。 二维数组其实可以看作是一个存着"DataType []"类型数据的一维数组&#xff0c;也就是存放着一维数组地址的一维数组。 所以&…...

【MATLAB第104期】基于MATLAB的xgboost的敏感性分析/特征值排序计算(针对多输入单输出回归预测模型)

【MATLAB第104期】基于MATLAB的xgboost的敏感性分析/特征值排序计算&#xff08;针对多输入单输出回归预测模型&#xff09; 因matlab的xgboost训练模型不含敏感性分析算法&#xff0c;本文通过使用single算法&#xff0c;即单特征因素对输出影响进行分析&#xff0c;得出不同…...

C语言程序与设计——工程项目开发

之前我们已经了解了C语言的基础知识部分&#xff0c;掌握这些之后&#xff0c;基本就可以开发一些小程序了。在开发时&#xff0c;就会出现合作的情况&#xff0c;C语言是如何协作开发的呢&#xff0c;将在这一篇文章进行演示。 工程项目开发 在开发过程中&#xff0c;你接到…...

【Java核心技术】第6章 接口

1 接口 接口不是类&#xff0c;而是对希望符合这个接口的类的一组需求 1.1 Comparable 接口 要对对象进行比较&#xff0c;就要实现(implement)比较(comparable)接口 注意&#xff1a; implements Comparable<Manager> Comparable接口是泛型接口 class Manager exten…...

【Java探索之旅】从输入输出到猜数字游戏

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、输入输出1.1 输出到控制台1.2 从键盘输入 二、猜数字游戏2.1 所需知识&#xff1a…...

【动态规划】【01背包】Leetcode 1049. 最后一块石头的重量 II

【动态规划】【01背包】Leetcode 1049. 最后一块石头的重量 II 解法 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 解法 &#x1f612;: 我的代码实现> 动规五部曲 ✒️确定dp数组以及下标的含义 dp[j]表示容量为…...

2023 年上海市大学生程序设计竞赛 - 四月赛

A. 宝石划分 A. 宝石划分 - 2023 年上海市大学生程序设计竞赛 - 四月赛 - ECNU Online Judge 找距离N最近的M的因数q&#xff0c;输出M/q 如果是暴力所的话&#xff0c;会超时 #include <bits/stdc.h> using namespace std; int main(){ios::sync_with_stdio(false)…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...