云存储是在云计算(Cloud Computing)概念上延伸和发展出来的一个新的概念,是指通过集群应用、网格技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,协同对外提供数据存储和业务访问功能的一个系统。分布式文件系统是常规的分时系统中文件系统的分布式实现,支持物理上分散的多个用户共享文件和存储数据。它包含两个方面的含义,从客户使用的角度来看,它是一个标准的文件系统,提供了一系列API,由此进行文件或目录的创建、移动、删除以及对文件的读写等操作。从内部实现来看,分布式的系统则不再和普通文件系统一样负责管理本地磁盘,它的文件内容和目录结构都不是存储在本地磁盘上,而是通过网络传输到远端系统上。并且,同一个文件存储不只是在一台机器上,而是在一簇机器上分布式存储,协同提供服务。
分布式文件系统是一个比较活跃的研究方向,国内外很多大学、研究机构和企业着手开发自己的分布式文件系统,如中科院计算所的蓝鲸分布式文件系统(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要慢很多。
2、改进的HDFS
2.1 HDFS存在的问题
因为Namenode把文件系统的元数据放置在内存中,所以文件系统所能容纳的文件数目是由Name.Node的内存大小来决定。一般来说,每一个文件、文件夹和Block需要占据150byte左右的空间,所以,如果有100万个文件,每一个占据一个Block,就至少需要300MB内存;当扩展到数十亿时,对于当前的硬件水平来说就没法实现了,这样NameNode内存容量严重制约了集群的扩展。HDFS最初是为流式访问大文件开发的,如果访问大量小文件,需要不断从一个DataNode跳到另一个DataNode,处理大量小文件速度远远小于处理同等大小的大文件的速度,严重影响性能。其次,每一个小文件要占用一个Task,而Task启动将耗费大量时间甚至大部分时间都耗费在启动Task和释放Task上。还有一个问题就是,因为MapTask的数量是由Splits来决定的,所以用MR处理大量的小文件时,就会产生过多的Map Task,线程管理开销将会增加作业时间。举个例子,处理10000M的文件,若每个Sprit为1M,那就会有10000个MapTasks,会有很大的线程开销;若每个Split为100M,则只有100个Map Tasks,每个Map Task将会有更多的事情做,而线程的管理开销也将减小很多。
2.2 HDFS改进
本文将多个小文件打包成一个归档文件,这样在减少NameNode内存使用的同时,仍然允许对文件进行透明的访问。当一个文件到达时,判断该文件是否属于小文件,如果是,则交给小文件处理模块处理,否则,交给通用文件处理模块处理。小文件处理模块的设计思想是,先将很多小文件合并成一个大文件,然后为这些小文件建立索引,以便进行快速存取和访问。小文件处理模块的流程如图3所示。
(1)小文件的归档管理主要由周期性执行的MapReduce任务完成。有以下几个处理流程:扫描元数据信息表,统计未归档的对象信息,包括在HDFS中的URI(Uniform Resource Identifier,通用资源标志符)、对象大小等;根据配置的归档文件大小限制,对统计所得的对象进行分组;将每个分组中的对象文件合并到一个归档文件中;更新相关对象元数据信息表中的数据位置描述项;删除旧的对象文件。
(2)归档文件的压缩主要有以下几个处理流程:扫描已删除对象表,统计无效对象信息;对于未归档的无效对象文件,直接删除;将已归档的无效对象按照归档文件分组;统计涉及的归档文件的空间利用率;统计利用率低于阈值的每个归档文件中所有有效对象信息;将归档文件中的有效对象数据合并到一个新的归档文件中;更新相关对象元数据信息表中的数据位置描述项;删除旧的归档文件。
(3)归档文件的再归档主要有以下几个处理流程:扫描归档文件列表,统计占用磁盘空间低于阈值的归档文件;根据归档文件大小配置参数,将统计所得归档文件分组;统计各分组归档文件涉及的对象;将每个分组中的归档文件合并到一个归档文件;将归档文件中的有效对象数据合并到一个新的归档文件中;更新相关对象元数据信息表中的数据位置描述项;删除旧的归档文件。
3、分布式文件系统对比
3.1实验环境
实验采用操作系统为CentOS5.4(Red Hat EntERPrise Linux 4.1.2)系统,文件系统软件分别为Hadoop-0.19.2、Lustre-1.47、FastDFS-1.23、MogileFS-2.44、MooseFS.1.6.13,内存和I/O性能测试软件分别为Ubench和IOzone。使用8台PC搭建环境,硬件实验平台中电脑CPU为Intel Core 2.66GHz,Memory为2G/4G,240G硬盘,通过100Mbps交换机局域网连接。数据集为1亿个1kB,2000万个5kB,200万个50kB,100万个200kB,20万个1MB,2万个10MB,1千个100MB文件。
3.2性能对比
现有的各种各样分布式文件系统具有不同的性能特点,它们的功能也不尽相同。为了在具体领域更好地掌握和应用适合的分布式文件系统,本文从文件系统的几个主要方面进行了详细的比较分析。分析结果如表1所示。
从表1中,可以清楚地看到分布式文件系统各自的特点。在支持操作系统方面,各个系统都支持Linux操作系统,部分系统还支持Unix操作系统;在系统类型方面,HDFS等专用分布式文件系统具有较好的性能和较低的复杂度,而通用分布式文件系统在访问方式上提供标准API,还支持FUSE,可以管理分布式文件系统如同管理本地文件系统一样;在容错方面,Lustre在存储服务器上使用磁盘阵列,启用备用元数据管理服务器;HDFS和MooseFS在存储服务器上备份文件,在元数据日志服务器上备份日志,用于恢复元数据服务器;FastDFS和MogilesFS也在存储服务器上备份数据,在多个调度服务器上采用负载均衡策略。它们也有很多相似的地方,比如都支持在Linux操作系统上部署,都采用全局的命名空间,都有很好的可扩展性等。
在元数据管理节点方面,FastDFS和MogileFS有多个调度服务器,并发访问能力比较突出,Lustre有两个元数据管理服务器,其中一个是活动服务器宕机后自动启动的后备服务器,有效地解决了单点依赖问题,而HDFS、MooseFS和改进HDFS只有一个元数据管理服务器,存在单点依赖问题,而且元数据都保存在内存中,当文件数量超过一定范围时,还会遇到内存瓶颈;在元数据占用内存方面,HDFS每个文件元数据占用内存大约150~200Byte之间,MooseFS每个元数据大约300Byte,而且随着文件数量增加内存占用也越大;Lustre元数据只占用4Byte左右,当文件数量超过2000万,内存占用也随之增大;改进HDFS内存占用与文件数量关系不大,随着文件数据增大稍微增长,当文件数量达到6000万,内存性能与Lustre持平。元数据内存占用情况如图4所示。
在文件存取方面,HDFS和MogileFS通常用来存储静态大文件,而MooseFS和改进HDFS可以存储各种文件,存储的文件一般不需要修改,只提供下载服务;FastDFS一般用于存储音频、视频和文档等,文件比较小,所以不分块存储文件,以文件为单位来存储;而Lustre以分条的方式存储文件,主要存储密集型数据,进行高性能计算;相对于HDFS,改进的HDFS平均读写速度增加了一倍左右,读速度略高于Lustre,但写速度略逊于Lustre。文件系统读写平均速度如图5所示。
4、结束语
云存储是近年来被广泛应用的新技术,可以广泛应用于一些重要的领域,如气象领域、视频分享网站等,因此分布式文件系统也引来了更多的关注,在学术界和工业界都有很多的分布式文件系统。如何选择合适的分布式文件系统是一个大问题,本文在架构、访问方式、文件存储方式等方面进行了详细的对比,并对HDFS在I/O性能方面进行了改进,根据这些信息,用户可以合理地选择分布式文件系统。虽然各个分布式文件系统有各自的优势和特点,但还有一些亟待解决的问题,下一步将进一步解决单元数据管理服务器依赖问题、多调度服务器负载均衡问题、系统容错机制和并发读写等。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/
本文标题:云存储文件系统对比