分布式文件系统研究11:Google File System (1)
Google File System
前言
没什么好说的,传说中的文件系统,当代网络超大容量分布式文件系统设计的典范,Google的核心竞争力所在。Google的Search、GMail、 video、blog spaces等等都是用这个技术做的。Google目前的中国区总裁李开复就认为学计算机的学生都应该看看Google File System。
很佩服Google的开放精神,将GoogleFS的详细设计写成了Paper: The Google File System, ( http://labs.google.com/papers/GoogleFS-sosp2003.pdf) 作者是Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung。该论文长达15页,对Google FS介绍得非常详细,从设计时考虑的因素到详细的解决方案,以及测试和实际运行数据,都做了具体的说明,而不像IBM这么遮遮掩掩,从GPFS、 Storage Tank到TotalStorage SAN File System,一直都是小里小气的样子,生怕别人知道它做了啥。
在Google公开了GoogleFS的论文后(2003年),已经有开源的项目开始借鉴GoogleFS的设计思想,开发类似的新型大容量分布式文件系 统,如NDFS/ Hadoop等。
拍完GoogleFS的马屁,下面就该轮到详细的介绍一下GoogleFS了。目前关于GoogleFS最权威的资料就是上文提到的那片15页的技术论 文。本来想把论文翻译部分贴出来,结果发现网上早就有现成的翻译版本了,我就脸皮厚点,从chinaunix转载过来了,然后修正一些明显的错误,加上一 些自己的理解,放在这里了,嘿嘿。
简介
GoogleFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对海量数据进行访问的应用。它运行于廉价的普通硬件上,但提供了容错复制功能,可 以给大量的用户提供总体性能较高的可靠服务。
1、设计概述
(1)设计假设
GoogleFS与传统的分布式文件系统有很多相同的目标,但GoogleFS的设计受到了当前及预期的应用方面的工作量以及技术环境的驱动,因而形成了 它与传统的分布式文件系统明显不同的设想。这就需要对传统的选择进行重新检验并进行完全不同的设计观点的探索。
GoogleFS与以往的文件系统的不同的特点如下:
1、硬件错误(包括存储设备或是存储节点的故障)不再被认为是异常的情况,而是将其作为常见的情况加以处理。因为文件系统由成千上万个用于存储的机器节点 构成,而这些机器是由廉价的普通硬件组成并被大量的客户机访问。硬件的数量和质量使得一些机器随时都有可能无法工作并且有一部分还可能无法恢复。所以实时 地监控、错误检测、容错、自动恢复对系统来说必不可少。(我们就吃过很多次这种亏啊,呜呜)
2、按照传统的标准,文件都非常大,长度达几个GB的文件是很平常的。每个文件通常包含很多应用对象。因为经常要处理快速增长的、包含数以万计的对象、长 度达TB的数据集,我们很难管理成千上万的KB规模的文件块,即使底层文件系统提供支持。因此,设计中操作的参数、块的大小必须要重新考虑。对大型的文件 的管理一定要能做到高效,对小型的文件也必须支持,但不必优化。
3、大部分文件的更新是通过添加新数据完成的,而不是改变已存在的数据。在一个文件中随机的操作在实践中几乎不存在。一旦写完,文件就只可读,很多数据都 有这些特性。一些数据可能组成一个大仓库以供数据分析程序扫描。有些是运行中的程序连续产生的数据流。有些是档案性质的数据,有些是在某个机器上产生、在 另外一个机器上处理的中间数据。由于这些对大型文件的访问方式,添加操作成为性能优化和原子性保证的焦点。而在客户机中缓存数据块则失去了吸引力。
4、工作量主要由两种读操作构成:对大量数据的流方式的读操作和对少量数据的随机方式的读操作。在前一种读操作中,可能要读几百KB,通常达 1MB和更多。来自同一个客户的连续操作通常会读文件的一个连续的区域。随机的读操作通常在一个随机的偏移处读几个KB。性能敏感的应用程序通常将对少量 数据的读操作进行分类并进行批处理以使得读操作稳定地向前推进,而不要让它来来回回的读。
5、工作量还包含许多对大量数据进行的、连续的、向文件添加数据的写操作。所写的数据的规模和读相似。一旦写完,文件很少改动。在随机位置对少量数据的写 操作也支持,但不必非常高效。
6、系统必须高效地实现定义完好的大量客户同时向同一个文件的添加操作的语义。
(2)系统接口
虽然GoogleFS没有像POSIX那样实现标准的API,但它提供了一个相似地文件系统界面,文件在目录中按层次组织起来并由路径名标识。
(3)体系结构
一个GoogleFS集群由一个Master和大量的chunkserver构成,并被许多客户(Client)访问。如图1所示。Master和 chunkserver通常是运行用户层服务进程的Linux机器。只要资源和可靠性允许,chunkserver和Client可以运行在同一个机器 上。
图1 GoogleFS架构
文件被分成固定大小的块(block)。每个块由一个不变的、全局唯一的64位的chunk-handle标识,chunk-handle是在块创建的时 候由Master分配的。chunkserver将块当作Linux文件存储在本地磁盘并可以读和写由chunk-handle和位区间指定的数据。出于 可靠性考虑,每一个块被复制到多个chunkserver上。默认情况下,保存3个副本,但这可以由用户指定。
Master维护文件系统所有的元数据(metadata),包括名字空间、访问控制信息、从文件到块的映射以及块的当前位置。它也控制系统范围的活动, 如块租约(lease)管理,孤儿块的垃圾收集,chunkserver间的块迁移。Master定期通过HeartBeat消息与每一个 chunkserver通信,给chunkserver传递指令并收集它的状态。
By admin
read more
