分布式文件系统是一个比较活跃的研究方向,国内外很多大学、研究机构和企业着手开发自己的分布式文件系统,如中科院计算所的蓝鲸分布式文件系统(BWFS)、电子科技大学的分布式文件系统(DPFS)、IBM的GPFS、Sun的Lustre等,这些系统支持I/O密集型应用,通常用于高性能计算或大型数据中心,对硬件设施要求较高;Google的GFS及其开源实现HDFS通常用于提供海量数据的存储和访问能力;还有一些常用的比较轻量级的分布式文件系统,如MogileFS和FastDFS主要用于存储Web应用的资源文件。但同时也存在一些问题需要进一步研究,如HDFS和MooseFS存在单元数据服务器依赖,如何改进元数据管理系统或者增加元数据管理服务器;MogileFS和FastDFS的管理节点包含多个调度服务器,如何使多个调度服务器达到负载均衡;GFS和Lustre通过锁服务来保证数据一致性,但同一时间不允许多个用户对文件的同一部分进行写操作;分布式文件系统的可靠性也是一个大问题,现有的容错机制通过备份日志恢复元数据管理服务器,增加备用元数据管理服务器,采用磁盘阵列以及备份文件等,都有一定的局限性。将来,通用分布式文件系统和专用分布式文件系统的分工将越来越明显,通用分布式文件系统提供标准API接口,不需要开发者修改上层应用就能使用,而且支持用户空间文件系统(Filesystem in Userspace,FUSE),用户管理共享的分布式文件系统如同管理本地文件系统一样方便,还将向大型化发展,提供更廉价的存储服务,云存储就是一个很好的代表;与此相反,专用分布式文件系统提供专有API,对开发者要求熟悉掌握其API,但其系统复杂度较低,而且提供较高的性能,在Web应用、高性能计算等方面有较大的需求,这两种分布式文件系统是未来的发展趋势。开源社区也开发出了一批基于Linux/Unix操作系统的分布式文件系统,正是这些开源项目大大促进了分布式文件系统的发展和应用。
1、分布式文件系统
分布式文件系统是指文件系统管理的物理存储资源不一定直接存储在本地节点上,而是通过计算机网络与节点相连,支持多个用户共享文件和存储资源。可以分为通用分布式文件系统和专业分布式文件系统,相比起来通用分布式文件系统对开发者来说具有友好性强的优势,系统复杂性相对较高,性能一般;而专用分布式文件系统的开发者友好性较差,系统复杂性较低,性能较高。因此,根据专用性和通用性的原则,在选择分布式系统的时候需要考虑有关分布式系统的应用环境。
1.1 HDFS分布式文件系统
HDFS是一种基于Java的适用于海量数据存储的开源分布式文件系统。它可以部署在低成本的硬件上,能够高容错、可靠地存储PB级的数据,还可以与MapReduce编程模型很好地结合,为应用程序提供高吞吐量的数据访问。HDFS的架构如图1所示。

HDFS主要用于保存大文件,用户通过API访问文件系统。存储文件时,每个文件被分成若干个数据块,块大小默认是64MB,先把数据块缓存在本地,大小累积到64MB时才联系NameNode,写人到DataNode,同时,在其他节点采用流水线方式备份文件,默认是3份。文件删除时,移动到回收站,在配置的时间内可以迅速恢复。HDFS提出的自动均衡方案,可以自动地将数据从一个数据节点移动到空闲的数据节点。而且,HDFS提供的接口可以很容易地将数据从一个平台移动到另外一个平台。
HDFS只有单个管理服务器,所有对文件的请求都要经过它,当请求过多时,肯定会有延时,所以HDFS不太适合于那些要求低延时访问的应用程序。
由于管理服务器把文件系统的元数据放置在内存中,文件系统所能容纳的文件数目是由管理服务器的内存大小来决定,所以HDFS不太适合处理大量小文件。而且Hadoop只支持单用户写,不支持并发多用户写。
1.2 Lustre分布式文件系统
Lustre是首个基于对象存储的开源分布式文件系统,用来解决海量存储问题,最多可支持10000个客户端,PB级的存储量,IOOGB/S的传输速度,具有完美的安全性和可管理性。Lustre文件系统一般运行在高性能计算机系统之上,其性能优越,被越来越广泛地应用。Lustre架构如图2所示。

Lustre是一个全局文件系统,用户访问文件系统的文件数据时,通过客户端提供的标准POSIX(Portable Operating System Interface,可移植操作系统接口)接口先访问MDS,获取相关的元数据信息,然后直接与相应的OSS通信,取得文件的实际数据,这和HDFS非常相似。OST上的文件数据是以分条形式保存的,这和传统的基于块的存储方式有所不同。在Lustre文件系统中,MDS可以有两个,采用Active StandBy容错方式,当一个MDS不能正常工作时,另外一个MDS启动服务.Lustre还实现了部分文件锁,可以使多个客户端在同一时间写同一文件的不同区域,极大地提高了多用户对同一文件并发访问时系统的性能。
Lustre文件系统的性能和可扩展性都不错,但硬件设备要求比较高,而且Lustre目前还没实现MDS集群管理,虽然相比于HDFS的单主节点,Lustre的双MDS在可用性上提高了不少,但当系统达到一定规模时,MDS会成为Lustre系统的瓶颈。
1.3 FastDFS分布式文件系统
FastDFS是一个轻量级的开源分布式文件系统,主要用来解决大容量的文件存储和高并发访问的问题,特别适合大中型网站使用,用来存储资源文件,如图片、文档、音频、视频等。FastDFS采用了分组存储方式,一个组由多台存储服务器组成,同组存储服务器上的文件是完全一致的,文件上传、删除等操作可以在任意一台Storage Server上进行,同组内的Storage Server之间采用推送技术PUSH方式进行同步。
Tracker Server在内存中记录分组和Storage Server的状态等信息,不记录文件索引信息,占用的内存量很少。FastDFS不对文件进行分块存储,更加简洁高效,并且完全能满足绝大多数互联网应用的实际需要。FastDFS把简洁和高效做到了极致,比如一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力。当系统容量不足时,可以增加组来扩充存储容量。由于同组的Storage Server上的文件是完全一致的,所以一个组的存储容量为该组内存储服务器容量最小的那个。
1.4 MogileFS分布式文件系统
MogileFS是一个开源的分布式文件系统,可支持文件自动备份的功能,提供高可用性和高可扩展性,适合存储静态文件,就是一次保存,多次读取的资源。MogileFS系统的组件都可以运行在多个机器上,所以不存在单点失败。MogileFS可以根据不同的文件类型,复制满足这个类别的最少要求,如果数据丢失了,可以重新建立遗失的拷贝数,这样可以节约磁盘。MogileFS提供全局的命名空间,文件通过给定的Key来确定,客户端通过专有API访问MogileFS系统,对整个文件系统进行读写操作。
由于MogileFS系统不支持对一个文件的随机读写,因此只适合做一部分应用,如图片文件,静态HTML文件,只提供下载的文件,即文件写入后基本上不需要修改的应用,当然也可以生成一个新的文件覆盖原文件。
1.5 MooseFS分布式文件系统
MooseFS是一个具有容错功能的,高可用、可扩展的海量级分布式文件系统。MooseFS分布式文件系统支持FUSE,客户端通过FUSE内核接口挂接远程管理服务器上所管理的数据存储服务器,管理共享的文件系统如同管理本地文件系统一样。MooseFS可动态随时增加机器或者磁盘,提供回收站功能,可回收在指定时间内删除的文件,还可以对整个文件甚至正在写入的文件创建文件的快照。
MooseFS把文件系统的结构缓存到Master的内存中,文件越多,Master的内存消耗越大。当元数据服务器数据丢失或者损毁时,可从日志服务器恢复。与MogileFS相比,写操作时,同样备份数的情况下,MooseFS要慢较多。读操作时,当并发加大时,请求的成功率MooseFS比MogileFS要低,MooseFS的反应时间也比MogileFS要慢很多。