百度沧海文件存储CFS推出新一代Namespace架构

每秒创建百万文件,百度沧海·文件存储CFS推出新一代Namespace架构

随着移动互联网、物联网、AI 计算等技术和市场的迅速发展,数据规模指数级膨胀,对于分布式文件系统作为大规模数据场景的存储底座提出了更高的要求。已有分布式文件系统解决方案存在着短板,只能适应有限的场景:

>> 新型分布式文件系统无法承接传统领域内的所有 WorkLoad:通过只支持部分 POSIX 接口来简化系统设计,无法完全兼容 POSIX 协议。

>> 传统分布式文件系统无法支持海量小文件场景:为了保证低延迟,元数据的可扩展性较差、随文件规模性能和稳定性下降严重,无法支持如 AI 训练、自动驾驶等文件规模达到十亿甚至百亿规模的 AI 场景。

因此,设计出一款不仅能完美兼容传统应用,又能适应最新 AI 场景需求的分布式文件存储,显得意义重大。这样的分布式文件系统需要满足:

  • 完全兼容 POSIX 协议。

  • 在确保元数据低延迟、稳定的情况下,可线性扩展,支持百亿文件规模,具备超大规模文件数量元数据操作能力的同时具备超高的性能稳定性。

要想达到以上目标,百度沧海·文件存储 CFS 给出的技术解答是设计新一代的 Namespace 子系统,在实现创建文件每秒百万级 QPS 的同时,保证各项性能指标表现稳定。

这使得文件存储 CFS 不仅可以支持传统应用,作为传统业务上云的存储方案;也可以应用于最新的 AI 场景,满足海量文件规模处理的应用需求。

Namespace 的技术现状

Namespace 子系统的功能主要是维护文件系统的文件属性、目录树结构等元数据信息,同时支持兼容 POSIX 的目录树及文件操作,如:文件/目录创建、查找(Lookup/Getattr)删除及重命名(Rename)等。

当前,业界分布式文件系统领域衍生出各种类型的 Namespace 技术架构,可以归类为如下几种:

  • 单机架构:配合单机全内存,可做到低延迟,无法横向扩展,最大规模仅支持 5 亿文件数,代表产品为 HDFS。

  • 并行架构:适用于 HPC 等并行文件系统应用场景,元数据静态切分到多机部署,单机利用一主一备保证可用性,缺乏弹性扩展能力。

  • 分布式架构:将元数据按照某种方式切分和扩展到一组机器上,按照集群的方式管理。

相对于单机架构不可扩展及并行架构对扩展性的弱支持,分布式 Namespace 架构在扩展性上做的更加彻底。

那么直接引入一套现成的分布式 Namespace 架构是否可以直接解决上文提到的挑战呢? 

答案是否定的,因为现有的分布式 Namespace 架构都存在各自的局限性和不足。

  • 基于 Hash Based 架构尽管具有很好的扩展性及负载均衡效果,但是其牺牲了 POSIX 兼容语义的支持。该架构方案将文件全路径 Hash 来组织打散到分布式 Meta 集群,对于 Lookup 路径查找非常友好同时容易实现,但是缺点是牺牲了元数据的局部性,尤其是 rename 的实现复杂度高且性能很差,这类架构主要停留在学术研究,没有在工业界大规模应用,典型的系统如 Dr.Hadoop,GiraffaFS;

  • 基于子树划分架构保证了元数据的局部性,可兼容 POSIX 语义,但是扩展性不够好 。该架构方案通过将层级目录树拆分成多个子树并将每颗子树按照相应的负载策略部署到不同的 Meta 节点中,单节点上具有很好的元数据局部性,但是缺点就是容易产生热点,负载均衡难以实现,扩展性不够好,典型的实现如 CephFS、IndexFS;

相对于前两种架构都具有明显的局限性且难以弥补,近几年脱颖而出的基于分布式数据库或分布式 KV 的 Namespace 架构兼顾了扩展性及 POSIX 语义兼容支持。

该方案通常采用分层架构:上层维护了一层元数据处理层,该层将目录树 POSIX 操作转化为数据库事务请求。下层是分布式数据库或分布式 KV 层,负责元数据的存储管理,同时对上层的数据库事务请求进行语义处理。

通过这样的分层架构就做到了对 POSIX 语义的完整兼容。同时,利用分布式数据库或分布式 KV 本身的可扩展性,做到了 NameSpace 架构的可扩展。

另外,为了进一步提升 POSIX 语义的处理速度,通常会维护一层 Hint Cache 来加速元数据的处理。

虽然该架构方案可以在存储层面做到弹性可扩展且简化了元数据的处理,但由于现有架构对锁及数据库事务存在强依赖,Namespace 在写延迟及写性能的扩展性层面仍然存在不足,难以支持每秒创建百万以上的文件的需求。

百度智能云 CFS 在此架构基础上改进和扩展出新一代的 Namespace 架构。

CFS 的 Namespace 架构

百度沧海的文件存储 CFS 作为百度智能云提供的分布式文件存储服务,通过标准的文件访问协议(NFS/SMB),为云上的虚机、容器等计算资源提供无限扩展、高可靠、地域级别共享的文件存储能力。

为了兼顾传统及 AI 场景的用户需求,弹性可扩展且兼容 POSIX 一直被作为 CFS 架构尤其是 Namespace 子系统的重要设计目标。

基于分布式 KV 架构,CFS 采用自研的分布式索引系统来支撑 Namespace 子系统,并基于该索引系统实现了分层架构,即 POSIX 语义层+分布式 KV 层。该索引系统经过 CFS 产品多年的打磨,目前可以非常好地解决 Namespace 层级结构扩展性与低延迟的需求。

相比于其他基于分布式数据库或分布式 KV 的分布式文件系统(比如 HopsFS),CFS 不直接依赖底层分布式数据库或分布式 KV 层的锁及事务机制来维持 POSIX 语义,而是通过以下创造性的设计配合来解决:

  • 适配层级结构数据模型,定制化 Schema 来降低 KV 层数据之间的关联性。

  • 在 POSIX 语义层设计一套针对 Namespace 层级结构、相对数据库锁及事务机制更轻量的一致性协议,保障所有 Namespace 层的读写操作不会破坏 POSIX 语义。

基于以上设计,CFS 在 Namespace 层的读写操作都具备非常低的延迟和好的线性扩展能力,具体性能参考下文测试结果。

除此之外,为了进一步优化延迟,CFS 团队在该架构的各个层面做了深入优化:

  • 单机层面进一步优化延迟:单机 KV 引擎适配了 AEP 等高速硬件,确保 Namespace 关键路径低延迟。

  • 一致性协议层面进一步优化扩展性及延迟:POSIX 语义层一致性协议采用无状态实现,不同节点之间无需同步、无需单独部署,而是作为 LIB 编译到 Client 或者接入模块,简化了架构的维护及 Namespace 读写路径,同时进一步保障了架构的可扩展性。

Namespace 性能测试

为了验证 CFS 产品 Namespace 架构的扩展性及性能稳定性,我们分别从扩展索引系统 KV 节点和 Meta Client 节点两个维度来测试,在验证扩展性同时给出相应单次请求的延迟数据及稳定性。

说明:以下测试 workload 均采用 Mdtest 作为元数据测试工具,其中 Meta Client 作为文件系统协议接入层对接标准的 NFS 协议,压测中的线程工作在相同 FS 不同路径上。

KV 节点扩展 

以下数据对比了 10 个 KV 节点和 20 个 KV 节点在并发 mkdir 的性能数据表现(图中 BE 对应分布式 KV 层一个后端 KV 节点):

通过以上数据可以看出:

  • 20 个 KV 节点相对于 10 个 KV 节点在写吞吐上接近于两倍的提升;

  • 当系统负载正常情况下一次 Namespace 写延迟只需要 2ms 左右;

  • 当系统负载过高且瓶颈来到 KV 层,延迟长尾表现稳定;

综上,可以看出 CFS 的架构在 KV 层可以支持线性扩展。

Meta Client 扩展  

以下是基于集群的 KV 层固定为 24 个 KV 节点的对应数据,一方面通过扩展 Meta Client 数来验证架构在语义层的扩展性,另一方面验证架构在读和写是否具备突破百万 QPS 的能力。

通过以上数据可以看出:

  • Namespace 写和读吞吐可以在 POSIX 语义层做到线性扩展,其中写操作(文件\目录创建)可以达到 100 万 QPS,即每秒可支持创建百万文件;路径查找(Lookup)可以达到 400 万 QPS,目录/文件属性获取(Getattr)可以达到 600 万 QPS。

  • 延迟方面写延迟为 2ms,读延迟只需要百 us 级。

CFS 可以在元数据读写操作上都可以做到支持线性扩展的同时保证低延迟以及性能稳定性,并且在此基础上完成每秒创建百万文件的挑战。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/580041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

格密码:傅里叶矩阵

目录 一. 铺垫性介绍 1.1 傅里叶级数 1.2 傅里叶矩阵的来源 二. 格基与傅里叶矩阵 2.1 傅里叶矩阵详细解释 2.2 格基与傅里叶矩阵 写在前面:有关傅里叶变换的解释太多了,这篇博客主要总结傅里叶矩阵在格密码中的运用。对于有一定傅里叶变换基础的同…

IntelliJ IDEA [设置] 隐藏 .idea 等 .XXX 文件夹

文章目录 1. 问题描述2. 解决办法3. 最后效果4. 特殊处理(正常不需要此步骤)总结 我们使用 IntelliJ IDEA 导入项目的时候,经常会看到一些 .XXX 的文件夹(例如:.idea,.mvn,.gradle 等&#xff0…

支付宝、学习强国小程序input、textarea数据双向绑定

前言 和 vue 的绑定有些区别,需要注意。直接 value"{{inputValue}}" 是无法双向绑定的。 正确思路 文档说的比较详细,不过没有组合使用的案例,需要自行理解。这里正确的方法是先用 value 绑定数据,再使用 onInput 事件…

鸿蒙的基本项目_tabbar,首页,购物车,我的

以上效果,由四个ets文件实现,分别是容器页面。首页,购物车,我的。 页面里的数据,我是用json-server进行模拟的数据。 一、容器页面 使用组件Tabs和Tabcontent结合。 import Home from "./Home"; import …

短剧付费变现小程序源码系统:开通会员+在线充值+风口项目,变现利器+完整的代码包 附带部署安装教程

在当今数字化时代,短剧付费变现小程序源码系统已经成为了一个热门的风口项目。它以开通会员、在线充值、完整的代码包等特色功能,成为了一种有效的变现利器,受到了广泛的关注和应用。本文将详细介绍这个源码系统的背景和特色功能,…

实现阿里云oss云存储,简单几步

一、前言 虽然平常学习用的不多&#xff0c;但是用的时候再去找官方文档&#xff0c;也很繁琐&#xff0c;不如直接整理以下&#xff0c;方便粘贴复制&#xff0c;本文介绍两种图片上传方式①普通上传②服务端签名直传 1.普通上传 加载maven依赖 <dependency><grou…

centos 安装oracle 11.2.04 并配置数据库自启动操作记录,一次完成

环境&#xff1a; centos版本7.3&#xff0c;安装的有图形化界面 Oracle11.2.04&#xff0c;之所以选择这个版本是因为网上有人说11其他版本的在安装的过程中会出现这样或那样的问题&#xff0c;下载地址放到文章下面 步骤&#xff0c;按顺序&#xff1a; 1、创建安装Oracle…

万用表测接地电阻方法

万用表测接地电阻方法 用万用表在不同土质的土壤对接地电阻进行了实验&#xff0c;并将万用表所测数据和专用接地电阻测试仪所测数据进行了比较&#xff0c;两者十分接近。具体测量方法如下&#xff1a; 找两根8mm、1m长的圆钢&#xff0c;将其一端磨尖作为辅助测试棒&#x…

Mysql之视图

Mysql之视图 常见的数据库对象视图概述为什么使用视图视图的理解创建视图创建单表视图别名的运用 创建多表联合视图利用视图对数据进行格式化contact 函数以视图为基&#xff0c;再创建新的视图 查看视图更新视图的数据一般情况不可更新的视图 修改和删除视图修改视图删除视图注…

【C#】Visual Studio 2022 远程调试配置教程

在某些特殊的情况下&#xff0c;开发机和调试机可能不是同一台设备&#xff0c;此时就需要远程调试了。 开发机配置 首先需要确保两台机器在同一局域网下。 创建共享文件夹 随便找个地方新建一个文件夹&#xff0c;用来放编译结果。例如我这里是 D:\DebuggingWorkspace\。 …

什么是阿里云负载均衡SLB?

目录 硬件或软件负载均衡的区别是什么&#xff1f; 什么是阿里云负载均衡SLB&#xff1f; 阿里云传统型负载均衡CLB 硬件或软件负载均衡的区别是什么&#xff1f; 通过专用硬件实现负载均衡&#xff0c;那么整体成本会较高&#xff0c;而且设备容易出现单点故障&#xff0c;…

【MySQL】InnoDB和MyISAM区别

文章目录 一、索引不同1 InnoDB聚簇索引&#xff0c;MyISAM非聚簇索引1 InnoDB聚簇索引2 MyISAM非聚簇索引 2 InnoDB必须要有主键&#xff0c;MyISAM允许没有主键3 InnoDB支持外键4 InnoDB不支持全文索引5 索引保存位置不同 二、对事物的支持三、存储结构不同四、存储空间不同五…

Elasticsearch中复制一个索引数据到新的索引中

问题 我有时候&#xff0c;需要调试一个已经存在的ES索引&#xff0c;需要从已有的索引复制数据到新的索引中去。 解决 这里我借助一个GUI工具&#xff0c;来解决这个问题&#xff0c;底层它是使用Reindex的API实现索引数据复制的。 步骤 选中已存在的redix菜单&#xff0…

00-Git 应用

Git 应用 一、Git概述 1.1 什么是Git git 是一个代码协同管理工具&#xff0c;也称之为代码版本控制工具&#xff0c;代码版本控制或管理的工具用的最多的&#xff1a; svn、 git。 SVN 是采用的 同步机制&#xff0c;即本地的代码版本和服务器的版本保持一致&#xff08;提…

KEPServerEX 6 之【外篇-1】PTC-ThingWorx服务端软件安装 Tomcat10本地安装

本文目标: 安装 Java 和 Apache Tomcat ,为ThingWorx安装做基础。 ----------------------------------------------------------------------- 安装重点 --------------------------------------------------------------------- 1. 安装 Java 11 / JDK 11 添加系…

SSRF中Redis的利用

目录 1. SSRF 1.1 什么是SSRF 1.2 漏洞成因 1.3 可能会存在SSRF的地方 1.4 SSRF分类 1.5 验证方法 1.6 利用方式 1.7 可以利用的协议 1.8 SSRF过滤绕过 2. SSRF攻击Redis 2.1 环境搭建 2.2 漏洞复现(通过ssrf利用redis写入webshell) 2.2.1 想要写入webshell的两个…

【unity学习笔记】4.场景切换

创建空物体→创建脚本挂载在空物体上→打开脚本 1.创建所需要的场景 assets中点击创建场景 2.文件→生成设置 3.将需要的场景拖入 4.场景跳转 创建空对象&#xff0c;将脚本放在空对象上。 注意两个类&#xff1a;场景类、场景管理类 void Start(){//场景跳转SceneManager.Lo…

labelme目标检测数据类型转换

1. labelme数据类型 LabelMe是一个开源的在线图像标注工具&#xff0c;旨在帮助用户创建和标记图像数据集。它提供了一个用户友好的界面&#xff0c;让用户可以直观地在图像上绘制标记框、多边形、线条等&#xff0c;以标识和注释图像中的对象或区域。 GitHub&#xff1a;http…

智能监控平台/视频共享融合系统EasyCVR海康设备国标GB28181接入流程

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

C# 使用Pipelines处理Socket数据包

写在前面 在上一篇中对Pipelines进行简单的了解&#xff0c;同时也留下了未解的问题&#xff0c;如何将Pipelines类库运用到Socket通讯过程中来解决粘包和分包。链接地址如下&#xff1a; 初识System.IO.Pipelines https://rjcql.blog.csdn.net/article/details/135211047 这…