百度沧海文件存储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…

基于OpenCV的图像颜色与形状识别的原理2

基于OpenCV的图像颜色与形状识别通常涉及以下几个步骤: 图像读取:使用OpenCV的cv2.imread()函数读取图像。预处理:可能包括图像的灰度转换、二值化、滤波等,以减少噪声和无关信息。颜色识别:颜色空间转换:…

Python中自动关闭已打开文件脚本

检测指定位置的excel是否为打开状态,若是打开状态,强制保存并关闭,若是关闭状态,不做处理的逻辑 import psutil import os import win32com.clientdef is_excel_open(file_path):for process in psutil.process_iter([pid, name]…

FLASH,SRAM与Program Size: Code=46286 RO-data=1698 RW-data=560 ZI-data=39960关系

当涉及到嵌入式系统或者微控制器的程序大小时,通常会涉及到不同类型的数据以及它们在内存中的存储方式。这些指标对于程序员和系统设计者来说非常重要,因为它们有助于了解程序在特定硬件环境下的内存使用情况。 Code:指的是程序代码的总大小…

重组蛋白表达系统的比较-卡梅德生物

一、重组蛋白表达是什么? 重组蛋白表达是通过基因工程手段将目标蛋白基因导入宿主细胞,使其表达出特定的蛋白。该过程包括以下步骤: 1. 构建表达载体:将目标蛋白基因插入表达载体中,通常选择带有启动子、终止子和选择…

支付宝、学习强国小程序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…

Vue生命周期钩子函数

生命周期钩子&#xff0c;生命周期函数&#xff0c;生命周期事件&#xff08;不同名称&#xff0c;同一含义&#xff09; 含义&#xff1a;在Vue组件从创建到销毁的整个过程中&#xff0c;在不同时间节点可以自动执行的函数 整个过程分为三个部分&#xff1a;创建阶段&#x…

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

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

mybatis中的xml语法

MyBatis 是一个半自动化的ORM(对象关系映射)框架。它通过 XML 或注解的方式将指令映射到数据库操作。在 MyBatis 中,XML 映射文件定义了数据库操作的细节。以下是 MyBatis XML 映射文件的详细语法。1. 基本结构 MyBatis 的 XML 映射文件包含以下几个基本元素: : 这是根元素…

万用表测接地电阻方法

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

SQL备忘--Like/逻辑运算/Order By排序/Top N特殊处理备忘

1. Like 模糊查询 基本语法 在where 条件中使用LIKE关键字进行匹配 WHERE c1 LIKE ‘%end’ //可以匹配到“friend”等单词 匹配模式 百分号&#xff08;%&#xff09;&#xff1a; 表示匹配零个或多个任意字符下划线&#xff08;_&#xff09;&#xff1a;表示匹配一个任意…

电镀污水处理设备主要特点及工艺流程

诸城市鑫淼环保小编带大家了解一下电镀污水处理设备主要特点及工艺流程 常见的一体化污水处理设备工艺有化学工艺、物理工艺、生物工艺和电化学法等。 电镀厂污水处工艺一&#xff1a; 化学工艺法&#xff0c;是指采用化学氧化还原反应和沉淀反应&#xff0c;将电镀废水中有毒有…

Mysql之视图

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

MySQL查询当天本周上周本月上月季度今年的数据

1. 当日 select 字段 from 表名 where 时间字段 BETWEEN CONCAT(CURDATE(), 00:00:00) AND CONCAT(CURDATE(), 23:59:59); 2. 昨天 SELECT * FROM day_sell WHERE TO_DAYS(NOW()) - TO_DAYS(sell_time) < 1 3. 近七天 SELECT * FROM day_sell WHERE DATE_SUB(CURDATE()…

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

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

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

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