分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,也就是集群文件系统,可以支持大数量的节点以及PB级的数量存储

目标

搭建文件系统是为了实现服务的高可用性,在线线性扩容,统一的接口调用等

场景

文件小、上传/下载量大(最好做下统计,包括每秒上传文件量,上传文件总大小,每天的增长量)、单机存储(虽然做了group),扩容麻烦

市面上的分布式文件系统

FastDFS、MogileFS、TFS、HDFS

注:GoogleFS以及FastDFS、mogileFS、HDFS、TFS等类GoogleFS都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务,都不能mount使用

各产品介绍:

FastDFS:

FastDFS是为互联网应用量身定做的分布式文件系统,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,非常适合用来存储用户图片、视频、文档等文件,适合对于互联网应用

开发语言:C

优点:

架构设计无单点失败问题,cluster中服务器无需采用raid服务,避免出现类似hadoop设计的cluster中前端mapreduce宕机,整个系统失效的问题 使用socket通信方式,相对于MogileFS的HTTP方式,效率更高。并且使用sendfile传输文件,采用了内存零拷贝,系统开销更小,文件传输效率更高 使用异步组间备份,但不会有读取数据不一致的问题(通过master调度解决,可能短时间造成单台slave负载增大) 采用分组结构,和公司系统相似

缺点:

文件存储不能对大文件拆分(hadoop可以实现),所以如果单个文件超过一台存储物理机的存储空间,就不能使用此系统存储 文件系统的存储格式不是原文存储,就算你登陆到文件服务器也无法获取到系统中的数据,必须经过一定的接口才能获取 不支持自定义文件名,文件名是存储成功以后根据存储位置生成的一个file_id,可通过文件名映射解决此问题 文档:由国人开发出来,有问题可以直接问作者(余庆,QQ群:212801927),网上资料比较齐全,论坛:http://bbs.chinaunix.net/forum.php?mod=forumdisplay&fid=240&filter=typeid&typeid=424

MogileFS

开发语言:Perl

架构设计无单点失败问题,cluster中服务器都需采用raid服务,避免出现类似hadoop设计的cluster中前端mapreduce宕机,整个系统失效的问题

缺点:

  • 使用HTTP通信方式
  • 用Perl开发,性能方面相对FastDFS略差
  • 文件存储不能对大文件拆分(hadoop可以实现),所以如果单个文件超过一台存储物理机的存储空间,就不能使用此系统存储
  • 文件系统的存储格式不是原文存储,就算你登陆到文件服务器也无法获取到系统中的数据,必须经过一定的接口才能获取
  • FastDFS从V1.14开始支持相同文件内容只保存一份,这样可以节省存储空间,提高文件访问性能
  • FastDFS从V1.18开始支持下载文件时,允许指定文件偏移量和大小(断点续传)
  • 文档相对比较缺乏

结论:FastDFS优于MogileFS

TFS

开发语言:C++

优点:

  • 淘宝开发,专门用于海量小图片存储
  • 架构设计无单点失败问题
  • 使用同步备份
  • 高可用(每个图片默认保存三份)
  • 无缝扩容(可随时增加机器不影响旧的文件存储)
  • 低成本(普通PC server即可,不必要使用磁盘阵列)
  • 可自定义文件名接口,但必须加两个标识

缺点:

  • 小众?市面上使用竟然很少?论坛资料几乎无?
  • 文档:http://tfs.taobao.org/

HDFS:

开发语言:Java

重量级,大文件的存储,适合那些有着超大数据集的应用程序,主要解决并行计算中分布式存储数据的问题,如果其单个数据文件通常很大,可采用了分块(切分)存储的方式

结论:结合公司场景,PASS

扩展阅读: