聊一聊并行文件系统的客户端优化之道

本文涉及的产品
对象存储 OSS,20GB 3个月
云备份 Cloud Backup,100GB 3个月
阿里云盘企业版 CDE,企业版用户数5人 500GB空间
简介: 本文主要介绍阿里云CPFS是如何应对挑战以及对并行文件系统的技术探索与落地实践。

1.背景


并行文件系统作为文件存储的一个高性能分支,自出现以来已经走过了二十个年头,一直被大规模应用于气象预测、石油勘探、高能物理、汽车制造、芯片制造、自动驾驶、影视渲染等高性能计算领域。在AI时代下,GPU并行计算如火如荼,阿里云CPFS也正式演进到了2.0时代,并且对传统并行文件系统的技术体系有了一系列创新和实践。


2.并行文件系统的演进之路


传统的并行文件系统诞生于二十一世纪初的CPU+物理机时代,直到二十一世纪的第二个十年的到来。2012年,Alex Krizhevsky(前谷歌计算机科学家)利用深度学习+GPU的方案,一举赢得Image Net LSVRC-2010 图像识别大赛,并奇迹般地将识别成功率从74%提升到85%。GPU从此一战成名,凭借自身海量流处理器和矢量处理单元成为了AI计算的首选加速器。GPU芯片的算力从V100到A100再到H100,实现了成倍的增长,对数据吞吐量的需求也成倍增长,甚至一度超出了PCI-E总线的能力。


与此同此,随着容器K8S平台的逐渐成熟,AI训练的运行平台已经由过去的虚拟机+物理机转向为容器+云计算平台。这样的时代背景下,传统的并行文件系统也面临了极大的挑战。


本系列文章会从以下几个方面,与大家分享阿里云CPFS是如何应对这些挑战以及对并行文件系统的技术探索与落地实践:


  • 从专属客户端到NFS标准协议服务
  • 从文件存储自闭环到拥抱云上数据湖的开放生态
  • 从CPU大文件计算到GPU小文件计算
  • 快、再快一点---服务端缓存和计算端缓存的进化


本期我们会具体介绍CPFS在客户端侧的轻量化变革。


3.专属客户端的问题所在


众所周知,由于世纪初NFS等通用协议的不完善,传统的并行文件系统都设计并提供了专属客户端,可以说专属客户端是高性能并行文件系统的身份象征。

专属客户端是并行文件系统实现高性能的重要组成部分,专属客户端对于并行文件系统至关重要,不仅提供了MPI-IO接口、多后端服务器连接能力、负载均衡能力,部分专属客户端还可以提供单机数据缓存能力。但是随着容器时代的到来,专属客户端显示出了他的诸多问题:


  • 首先,重客户端多采用内核态,这就引起与操作系统深度绑定。在世纪初,专业的HPC应用有限,多为专业公司开发并运行于超算中心,重客户端看起来不是个问题。但是随着AI时代的到来,GPU应用开发百花齐放,开发者习惯不同,限制操作系统或内核版本变成了一个巨大的门槛。


  • 其次,弹性容器带来极速的应用部署能力和弹性扩缩容能力,将计算资源利用率提升至极致。专属客户端较慢的部署速度和较多的软件依赖,降低了应用部署速度,限制了容器的弹性能力。


  • 再次,面向应用的数据管理取代面向物理机的数据管理。容器时代,用户业务的使用界面从物理机和虚拟机上移至应用,重客户端将整个文件系统视为统一的命名空间,只能通过传统的ACL方式进行复杂权限配置,且无法通过动态和静态PV和容器K8S实现联动,实现容器内应用访问数据的完美隔离。


4.轻量化NFS客户端的新思路


要解决专属客户端的问题,就需要对客户端进行“瘦身”,实现NFS协议端的轻量化。通过操作系统解耦,让所有Linux系统都可以轻松使用CPFS,解放开发者,其次,发挥分布式文件系统的高性能优势,最后,实现K8S弹性PV,以及PV间严格数据隔离,具体方式包括以下三个方面:

4.1基于NFS协议实现轻量化端接入


NFS是文件存储领域使用最广的协议,具有成熟的通用型、易用性,为广大使用者接受。为了降低CPFS的使用门槛,CPFS需要兼容NFS。


传统的并行文件系统重客户端往往指定操作系统、内核版本,内核版本升级后客户端还需要重新安装,运维成本高,而CPFS-NFS客户端是用户态的,不依赖内核版本,这带来两个好处:一是支持所有主流操作系统,CPFS-NFS客户端支持Alibaba Cloud Linux、CentOS、Ubuntu、Debian等,二是当用户操作系统升级后,CPFS-NFS客户端无需升级可继续使用。


传统的并行文件系统客户端需要复杂的配置才能达到较好的运行效果,例如Lustre需要对网络组件LNET、元数据组件MDC、数据组件OSC进行并发度、块大小等配置,增加了用户的维护成本。CPFS-NFS客户端使用简单,只需要一条mount挂载命令即可,客户端的默认配置由CPFS-NFS客户端自行完成,降低用户使用门槛。


并行文件系统通常将文件系统逻辑上移到客户端上完成,例如Lustre的OSC需要感知文件分片(stripe)位于哪些存储服务器才能读取数据,这增加了客户端上CPU、内存的资源开销。CPFS-NFS客户端的资源开销是轻量的,只用于传输数据和必要的元数据操作,CPU开销通常小于一个逻辑核。


4.2优化协议实现保证端接入的高性能


借助CPFS并行I/O、全对称的分布式架构提供的底座能力,NFS协议端同样具有高吞吐、高IOPS的集群性能,远超传统NAS单机架构带来的性能指标。例如200MB/s/TiB规格下,NFS协议端也提供每TiB容量兑付200MB/s吞吐的性能指标,最大吞吐是20GB/s,最大可接近100万 IOPS。


NFS协议服务组成协议集群,根据CPFS文件系统容量同步横向扩展。CPFS-NFS客户端与协议节点之间具备负载均衡的能力,在客户端挂载时可根据协议节点负载(连接数、空闲带宽、CPU等)选择最佳的协议节点建立连接,有效的避免热点、胖客户端挤兑单个协议节点带来的性能下降。


4.3提供多种挂载方式大规模挂载的支持与目录级挂载点


为了满足K8S弹性PV的需求,同时实现PV间严格数据隔离,CPFS支持了多种挂载方式,具体包括:


  • 大规模容器挂载

传统的并行文件系统客户端上通常会保存状态,这导致客户端规模有限,例如客户端上保存打开的文件、读写锁等状态,为保证数据一致性,客户端之前互相做状态的颁发、召回等操作。客户端规模越大,客户端之间的交互、消耗的资源更多,这限制了客户端的规模。


CPFS-NFS客户端是无状态的,客户端只与存储节点连通,不会随客户端规模增大而加重客户端的负载。CPFS-NFS客户端支持10000个客户端/POD同时挂载访问数据。


  • CSI插件,支持静态、动态卷

CPFS-NFS客户端与阿里云容器服务(ACK)深度集成,CSI 支持静态存储卷挂载和动态存储卷挂载两种方式挂载 CPFS存储卷。详情见CPFS静态卷CPFS动态卷


  • 目录级挂载点

目录级挂载点提供端上访问隔离的能力,容器挂载时仅挂载子目录,防止容器应用直接访问整个文件系统,引起数据安全问题。通过使用Fileset和ACL,CPFS能提供更强的目录隔离:后续Fileset支持配额,可配置目录子树的文件数量、总容量;ACL可配置用户的访问权限。


5.总结


目前,CPFS的标准NFS协议访问模式已经开放。帮助一些原有因为操作系统版本原有无法使用云上CPFS的客户实现了业务弹性上云。同时,结合阿里云容器ACK服务,为客户提供了秒弹几百个POD的动态伸缩能力,实现了忙时快速扩容,闲时快速释放,降低GPU资源闲置成本。


文件存储CPFS在支持NFS协议上的能力的重要提升,意味着无论是容器还是虚拟机,无论是哪种Linux版本,都可以轻松访问高性能的CPFS并行文件系统,这无疑有助于加速自动驾驶场景落地。欲了解更多,可观看直播


后面,我们还会继续分享CPFS在数据湖生态融合、小文件计算、缓存技术等方面的技术进化,希望能持续关注此系列文章。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4月前
|
存储 缓存 算法
【自己动手画CPU】存储系统设计
博文“【自己动手画CPU】存储系统设计”探讨了在自制 CPU 中存储系统的设计。存储系统是计算机中至关重要的组成部分,负责存储和检索数据。文章介绍了在 DIY CPU 中实现存储系统的关键考虑因素,包括存储器的类型、存储器与 CPU 的连接方式以及数据存取的速度和效率。通过深入探讨存储系统的设计原理和实现方式,读者可以更好地理解计算机内部结构,并且为自己动手设计和构建 CPU 提供了有益的指导和启发。
150 0
【自己动手画CPU】存储系统设计
|
24天前
|
存储 缓存 NoSQL
进程内缓存助你提高并发能力!
进程内缓存助你提高并发能力!
|
4月前
|
缓存 算法 Java
Linux内核新特性年终大盘点-安卓杀后台现象减少的背后功臣MGLRU算法简介
MGLRU是一种新型内存管理算法,它的出现是为了弥补传统LRU(Least Recently Used)和LFU(Least Frequently Used)算法在缓存替换选择上的不足,LRU和LFU的共同缺点就是在做内存页面替换时,只考虑内存页面在最近一段时间内被访问的次数和最后一次的访问时间,但是一个页面的最近访问次数少或者最近一次的访问时间较早,可能仅仅是因为这个内存页面新近才被创建,属于刚刚完成初始化的年代代页面,它的频繁访问往往会出现在初始化之后的一段时间里,那么这时候就把这种年轻代的页面迁移出去
|
4月前
|
缓存 监控 负载均衡
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
116 2
|
4月前
|
缓存 应用服务中间件 数据库
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
122 1
|
4月前
|
消息中间件 并行计算 网络协议
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
探秘高效Linux C/C++项目架构:让进程、线程和通信方式助力你的代码飞跃
124 0
|
4月前
|
存储 缓存 监控
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(场景问题分析+性能影响因素)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(场景问题分析+性能影响因素)
96 0
|
4月前
|
存储 缓存 监控
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据更新场景策略和方案分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据更新场景策略和方案分析)
66 0
|
4月前
|
负载均衡 应用服务中间件 Linux
深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」
深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」
268 0
|
4月前
|
移动开发 网络协议 Shell
最强优化指令大全 | 【Linux技术专题】「系统性能调优实战」终极关注应用系统性能调优及原理剖析(下册)(一)
最强优化指令大全 | 【Linux技术专题】「系统性能调优实战」终极关注应用系统性能调优及原理剖析(下册)
54 0