分布式文件系统(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