
业界对于分布式文件系统应用,大致有以下场景
很老的商业软件比如IBM跑在AIX mainframe上的GPFS或者EMC的oneFS之类,就忽略了,比较主流的开源的分布式文件系统大致有以下一些:
1.GlusterFS 文件系统标准的posix接口支持,可以做分布式的软件NAS,小规模的HPC共享存储,k8s/openstack共享存储;主要特点如下
2.cephfs,其底层是一个对象存储系统,即ceph的rados对象存储,主要特点如下
3.Lustre,比较老牌的分布式文件系统,部署在多个san阵列上,不支持副本,支持分布式锁,主要做HPC高性能计算;luster对posix的语义应该支持的比较好。之前intel在维护社区,主要目的是为了卖自己的cpu给一些HPC用户,后来intel是退出了。
4.HDFS只支持追加写,设计中没有考虑修改写、截断写、稀疏写等复杂的posix语义,目的并不是通用的文件系统,一般作为hadoop ecosystem的存储引擎;HDFS在bigdata领域使用很广泛,但其实big data用s3也是可以的。
5.moosefs 比较接近GoogleFS的c++实现,通过fuse支持了标准的posix,算是通用的文件系统,社区不是太活跃;
7.还有一些专有的文件系统,比如早年的fastDFS,tfs,BeeFS。大致思想跟facebook Haystack比较像,一个专有的图片存储系统的原型,适合小文件和worm场景(write once read many)。一般大型网站,搞视频流媒体之类,都会有一套类似的解决方案。
8. SeaweedFS, 最初是meta的haystack的一个开源实现,后续通过fuse实现了文件系统的posix接口,主要面向小文件做了很多优化。京东开源了一个ContainerFS,主要是给k8s做共享存储,跟seaweed有些故事,容器跑一些无状态的app为主,存储需求也就是一些小文件为主的静态资源和log之类。
9. JuiceFS也是一个很有意思的fs,metadata就用分布式kv store,持久化存储就用各种s3对象存储,DFS里面比较复杂的另个东西都用现成的,坚决不造轮子且利用好现有的轮子。创始人在dabatrics待过,最初设计目标是通过fuse提供posix接口的通用文件系统,给BigData做共享存储池。目前一个新方向是给AI云和DL分布式训练框架提供一个文件存储池。AI云的样本数据肯定要共享存储池,像coco这种超级大数据集,总不能谁用谁存一份吧。另一方面,dl框架的存储io部分,都是python通过posix接口去读写文件,在api兼容性方面fs比s3有优势。更重要的是分布式dl框架做的事情跟传统的hpc程序很像,会反复读文件的一个局部的数据,相对于s3接口,fs接口可以提供transparent cache,还可以提供一些预读之类高级特性,这个场景下,fs的确相对s3有很大的优势。
