云计算之存储即服务 - 分布式文件系统

来源:互联网 发布:c语言怎么表示阶层 编辑:程序博客网 时间:2024/05/21 07:13

我们知道,文件系统是负责存储和管理文件内容和元数据的软件系统,本地文件系统是将文件内容和元数据都保存在本地服务器上,而分布式文件系统是通过网络将这些数据保存在多个远程服务器上。通过分布式文件系统提供的接口,用户可以透明地操作存储在网络上的文件。在大数据(Big Data)日益盛行的今天,分布式文件系统是其必不可少的存储单元。

相对于传统的文件系统,分布式文件系统具有很多优势。首先,由于不受本地存储空间的限制,它可以通过动态增删存储服务器来实现高伸缩性;第二,数据可以在多台服务器上进行冗余备份,提高了分区容忍性,避免了单点失效,提高了可靠性和可用性;第三,支持大规模数据访问,由于每个用户读写数据只需要在特定的几台存储服务器上进行,所以总的工作负载被分散到所有的存储服务器上,不会存在单点性能瓶颈。此外,分布式文件系统也能提供多用户/组的访问控制、存储配额和文件加密等特性。

从分布式文件系统的架构来看,我们大致可以将其分为三类:客户-服务器架构、主从式集群架构和对等式集群架构。客户-服务器架构最早出现,它通过网络实现了文件系统客户端与文件存储和管理的分离,其典型代表是SUN公司开发的NFS文件系统,也是目前使用最广泛的分布式文件系统之一。主从式集群架构是客户-服务器架构的增强,它实现了客户端、元数据存储和管理与文件内容存储和管理三者的分离,主节点负责维护和管理文件系统的元数据和管理,比如命名空间和存储节点,若干个从节点负责维护和管理文件内容,客户端与主节点通信获取需要访问文件的相关信息,比如存储文件内容的从节点的联系地址,然后客户端和相关从节点通信,访问文件具体内容,这类架构的典型代表是GFS,稍后我们还将对它进行重点剖析。对等式集群架构中,没有了主节点,每个节点都参与管理和存储数据,节点的底层采用了分布式哈希P2P存储系统,实现了数据存储持久化,节点还维护了相应的操作日志,通过查找所有节点的操作日志实现了读数据的一致性,在节点上写数据是通过追加方式记录在自己的操作日志上,这样就避免了使用全局锁,这类架构的代表是由麻省理工大学开发的Ivy分布式文件系统。

我们将从分布式文件系统的组件按照功能划分为:接口(客户端)、文件内容存储及管理和元数据存储及管理三个方面来介绍。

分布式文件系统提供的接口既可以是和服务器端本地文件系统兼容的,也可以是不兼容的。目前,主流的操作系统基本都采用了抽象的文件系统接口,分布式文件系统只要定义了这些抽象文件系统所要求的接口操作,就能够实现和本地文件系统的兼容,比如NFS就能够挂载到Linux的VFS文件系统上,用户就可以像访问本地文件系统一样来访问网络文件系统。当然,采用私有接口的也不少,通常是命令行、应用编程接口开发包或者web服务,比如GFS和HDFS采用了应用编程接口和命令行,而Amazon S3采用了web服务接口。

元数据存储和管理包括了文件系统命名空间、访问控制信息、文件与块之间的映射关系以及节点联系地址。文件系统命名空间维护了文件系统的目录结构和文件与目录的位置关系,对文件的创建和删除请求都会影响命名空间,因此需要有相应同步的机制来处理多个请求,比如用读写锁。访问控制信息规定了哪个用户或组拥有对文件或目录所有权和读写权。在存储文件的时候,分布式文件系统通常会将文件切割成若干个块,然后将每一个块拷贝到多个存储节点上,这样既可以实现文件的冗余备份,也能够分散对文件不同部分的读写请求,因此负责元数据存储和管理的节点还需要给文件块编号索引和维护文件与块之间的映射关系,以及协调如何放置文件块到存储节点上。负责元数据存储和管理一般是主节点,它需要知道从节点(存储节点)的联系地址,从节点启动的时候会向主节点主动汇报,以后通过心跳信息保持更新。

文件内容存储及管理包括文件内容的存储和校验,向负责元数据存储及管理的节点汇报节点信息和存储信息,以及和客户端通信实现对文件内容的读写操作。通常,负责文件内容存储及管理的节点会将文件块存储在自己本地的数据持久化层中,但也可能将其存储在网络上,同时它还需要负责对文件块生成校验值,用来检测文件块是否损坏,这在建立在普通PC架构上的分布式文件系统尤其重要,因为底层硬件随时可能发生故障。此外,负责文件内容存储及管理的节点还需要定期向元数据节点汇报自己的负载量,剩余存储空间,以及存储的文件块信息等,元数据节点根据搜集到的信息来分配新的存储任务和平衡节点间的存储负载。在多数时间里,客户端读写文件内容都是和存储节点进行交互的,在对文件内容进行操作之前,客户端只需要从元数据节点获取文件名和相应的存储节点,然后直接和存储节点进行数据传输。

最后,让我们来了解一些其他知名的分布式文件系统。Lustre是一个开源的分布式文件系统,它采用了集群式架构,被广泛应用在高性能计算领域。Frangipani是一个伸缩性很好的高性能分布式文件系统,该系统采用了两层的服务体系架构:底层是一个分布式存储服务,该服务能够自动管理可伸缩、高可用的虚拟磁盘;在这个分布式存储服务上层运行着Frangipani分布式文件系统。JetFile是一个基于P2P的组播技术、支持在Internet这样的异构环境中分享文件的分布式文件系统。Ceph是一个高性能并且可靠的分布式文件系统,它通过把数据和对数据的管理在最大程度上分开来获取极佳的I/O性能。一些互联网公司也根据自己应用的特点,开发了适合自己的大规模分布式文件系统,比如Facebook Haystack,它非常适合存储海量图片文件。


[声明: 内容摘自<云计算宝典>一书,本博主是该内容的创作人员]