Curve 文件存储:如何支撑百亿级文件?
Curve 文件存储是一个 POSIX 兼容的分布式文件系统,适用于私有云、公有云、混合云环境。我们可以通过 Curve 文件存储轻松访问百亿级文件。
先对 Curve 文件存储的架构做一个简单的介绍。文件存储需要持久化的信息有两类,一类是文件的元数据,主要以 inode 和 dentry 为主,一类是文件的数据,即用户的写入内容。Curve 文件系统在设计之初,考虑到多云的支持,以及在大规模数据场景下的成本(冷数据居多),需要支持数据在不同性能的存储中流转,因此选择了把元数据和数据分开存储。
下图是 Curve 文件系统的架构。
元数据使用单独的集群存储,保证高可靠、高可用、高可扩
数据则可以有多种选择,可以对接 Curve 块存储,对接公有云上的对象存储,也可以同时对接多种不同性能的存储,比如 Curve 块存储(SSD)、Curve 块存储(HDD)、对象存储(三副本)、对象存储(EC)、对象存储(归档)。同样保证高可靠、高可用、高可扩。
如何支撑百亿级文件
Curve 文件系统的重要特点之一就是适用于海量文件存储,那么 Curve 文件系统如何保证可以支撑百亿级规模?如何保证在百亿级规模下的性能?从理论上来看:
规模方面,Curve文件存储的元数据集群,每个节点存储一定范围的 inode(比如1~10000)和 dentry,如果文件数量增多,可以进行存储节点的扩充,所以理论上规模是没有上限的。
性能方面,当文件数量很多时,对于单个文件的操作是没有什么差别的,但对于一些需要元数据的聚合操作会出现性能问题,比如 du (计算当前文件系统的容量), ls (获取目录下所有文件信息)等操作,需要做一定的优化来保障性能。
那实际上 Curve 文件系统的表现如何呢?
首先介绍一下文件系统的几款通用测试工具。
pjdfstest[1]: posix 兼容性测试。有3600+个回归测试用例,覆盖 chmod, chown, link, mkdir, mkfifo, open, rename, rmdir, symlink, truncate, unlink 等
mdtest[2]: 元数据性能测试。对文件或者目录进行 open/stat/close 等操作,并返回报告
vdbench[3]: 数据一致性测试。Vdbench 是 Oracle 编写的一款应用广泛的存储性能测试工具,既支持块设备的性能测试,也支持文件系统性能测试,在做随机写的一致性测试很方便,能实时检查出哪一个扇区出现了数据不一致
fio[4]: 数据性能测试。
Curve 文件系统从v2.3版本以后提供了单独压测元数据集群的方式(数据集群一般使用 Curve 块存储和 S3 ,所以直接对这些组件进行性能测试即可)。
通过 CurveAdm[5] 搭建文件系统,在准备客户端配置文件 client.yaml[6] 时新增配置项: s3.fakeS3=true[7]。
使用 mdtest,vdbench,ImageNet数据集[8]作为数据源,测试大小文件混合场景下文件系统的稳定性和性能。
根据元数据的数据结构估算,百亿级文件的存储元数据逻辑空间大概需要8TB,实际存储使用3副本大概在24TB左右。有兴趣测试的小伙伴可以参考一下。
海量文件存储下性能如何
Curve 文件存储随着存量数据增长,性能可以相对保持平稳(stat 请求的下降在15%左右)。
场景1(测试目录个数较多的情况):
测试命令 mdtest -z 2 -b 3 -I 10000 -d /mountpoint
场景2(测试目录层级很深的情况):
测试命令 mdtest -z 10 -b 2 -I 100 -d /mountpoint
Curve文件存储当前使用元数据集群,相对于使用分布式kv存储(如TiKV)性能较优。
说明:本组测试打开了 fuseClient.enableMultiMountPointRename ,保证多挂载点rename的事务性,所以和上组的基础测试数据有偏差。
场景1(测试目录个数较多的情况):
测试命令 mdtest -z 2 -b 3 -I 10000 -d /mountpoint
场景2(测试目录层级很深的情况):
测试命令 mdtest -z 10 -b 2 -I 100 -d /mountpoint
当前,Curve文件存储已经在ES、AI场景落地,后续会有相应的案例分享给大家。
<原创作者:李小翠,Curve Maintainer>
参考链接:
pjdfstest:[1]
https://github.com/pjd/pjdfstest
mdtest:[2]
https://github.com/LLNL/mdtest
vdbench:[3]
https://www.oracle.com/downloads/server-storage/vdbench-downloads.html
fio:[4]
https://github.com/axboe/fio
CurveAdm:[5]
https://github.com/opencurve/curveadm/wiki
client.yaml:[6]
https://github.com/opencurve/curveadm/wiki/curvefs-client-deployment#%E7%AC%AC-3-%E6%AD%A5%E5%87%86%E5%A4%87%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6
s3.fakeS3=true:[7]
https://github.com/opencurve/curve/blob/5df72f5e1e2813e4bfa5d73672ea0f6a25630e74/curvefs/conf/client.conf#L128
ImageNet数据集:[8]
https://www.kaggle.com/competitions/imagenet-object-localization-challenge/data
Curve 是一款高性能、易运维、云原生的开源分布式存储系统。可应用于主流的云原生基础设施平台:对接 OpenStack 平台为云主机提供高性能块存储服务;对接 Kubernetes 为其提供 RWO、RWX 等类型的持久化存储卷;对接 PolarFS 作为云原生数据库的高性能存储底座,完美支持云原生数据库的存算分离架构。
Curve 亦可作为云存储中间件使用 S3 兼容的对象存储作为数据存储引擎,为公有云用户提供高性价比的共享文件存储。
GitHub:https://github.com/opencurve/curve
官网:https://opencurve.io/
用户论坛:https://ask.opencurve.io/
微信群:搜索群助手微信号 OpenCurve_bot

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Dive into TensorFlow系列(1)-静态图运行原理
接触过TensorFlow v1的朋友都知道,训练一个TF模型有三个步骤:定义输入和模型结构,创建tf.Session实例sess,执行sess.run()启动训练。不管是因为历史遗留代码或是团队保守的建模规范,其实很多算法团队仍在大量使用TF v1进行日常建模。我相信很多算法工程师执行sess.run()不下100遍,但背后的运行原理大家是否清楚呢?不管你的回答是yes or no,今天让我们一起来探个究竟。 学习静态图运行原理能干什么?掌握它对我们TF实践中的错误排查、程序定制、性能优化至关重要,是必备的前置知识。 一、何为静态图? 众所周知,TensorFlow程序有两种运行选择,即静态图模式与动态图模式。 1.1 静态图 静态图采用声明式编程范式(先编译后执行),根据前端语言(如python)描述的神经网络结构和参数信息构建固定的静成计算图,静态图在执行期间不依赖前端语言,而是由TF框架负责调度执行,因此非常适合做神经网络模型的部署。用户定义的静态图经序列化后用GraphDef表达,其包含的信息有:网络连接、参数设置、损失函数、优化器等。 有了完整的静态图定义后,TF编译器将计...
- 下一篇
被老板忽悠入局后,我如何在三年内让产品「起死回生」?
原文作者 | David Theil 文章来源 | Medium 我将在这篇文章与诸位分享,如何扭转产品管理过程,并获得真正的成功。而你只需花上 15 分钟,便能获得一名产品负责人用三年血泪史总结出的产品管理经验。 PART 1:夸夸其谈的创始人 刚加入这家初创公司担任产品负责人时,我非常激动和兴奋。在我入职的第一天,其中一位创始人向我介绍了公司愿景和产品,还点出了竞争对手的种种弱点,全程口若悬河,十分精彩。 但几天后,我发现所有声称的「成绩」都只停留在宣传层面,产品本身的进度并不明朗。震惊之余,我也意识到,想让产品获得真正的成功绝非易事。 PART 2:自欺欺人的谎言 入职几周后我再次意识到,原来我们一直处在幻想之中:我们日复一日地向彼此传递同样的谎言,并且毫不质疑这些信息是否真实、是否来自真实出现的事实。 我们经常说的谎言是这样的: 这个功能对用户非常重要。 我们需要完成此功能,然后用户才会喜欢我们的产品。 这是我们产品的主要用户。 用户需要这个和那个。 我们总是告诉对方这些「事实」并将它们奉为真理,但实际上,我们并不知道「用户是谁」以及「他们想要什么」。 PART 3:产品负责人...
相关文章
文章评论
共有0条评论来说两句吧...