Google论文之 Google File System
摘要
GFS 文件系统,一个面向大规模数据密集型应用的、可伸缩的分布式文件系统。GFS 虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服务。
1. 简介
GFS的设计思路:
- 首先,组件失效被认为是常态事件,而不是意外事件。
- 其次,以通常的标准衡量,我们的文件非常巨大。
- 第三,绝大部分文件的修改是采用在文件尾部追加数据,而不是覆盖原有数据的方式。对文件的随机写入操作在实际中几乎不存在。一旦写完之后,对文件的操作就只有读,而且通常是按顺序读。
- 第四,应用程序和文件系统 API 的协同设计提高了整个系统的灵活性。
2. 设计概述
2.3结构
一个 GFS 集群包含一个单独的 Master 节点、多台 Chunk(块) 服务器(相当于HDFS的datanode),并且同时被多个客户端访问,如图 1所示。
![](https://img.haomeiwen.com/i8053597/4b2479e9d0d8d8c4.png)
GFS 存储的文件都被分割成固定大小的 Chunk。在 Chunk 创建的时候,Master 服务器会给每个 Chunk 分配一个不变的、全球唯一的 64 位的 Chunk 标识。Chunk 服务器把 Chunk 以 Linux 文件的形式保存在本地硬盘上,并且根据指定的 Chunk 标识和字节范围来读写块数据。出于可靠性的考虑,每个块都会复制到多个块服务器上。缺省情况下,我们使用 3 个存储复制节点,不过用户可以为不同的文件命名空间设定不同的复制级别。
Master 节点管理所有的文件系统元数据。这些元数据包括名字空间、访问控制信息、文件和 Chunk 的映射信息、以及当前 Chunk 的位置信息。Master 节点还管理着系统范围内的活动,比如,Chunk 租用管理、孤儿 Chunk的回收、以及 Chunk 在 Chunk 服务器之间的迁移。Master 节点使用心跳信息周期地和每个 Chunk服务器通讯,发送指令到各个 Chunk服务器并接收 Chunk 服务器的状态信息。
GFS 客户端代码以库的形式被链接到客户程序里。客户端代码实现了 GFS 文件系统的 API 接口函数、应用程序与 Master 节点和 Chunk 服务器通讯、以及对数据进行读写操作。客户端和 Master 节点的通信只获取元数据,所有的数据操作都是由客户端直接和 Chunk 服务器进行交互的。
2.4单一master节点
单一的 Master 节点可以通过全局的信息精确定位Chunk 的位置以及进行复制决策。另外,我们必须减少对 Master 节点的读写,避免 Master 节点成为系统的瓶颈。客户端并不通过 Master 节点读写文件数据。反之,客户端向 Master 节点询问它应该联系的 Chunk 服务器。客户端将这些元数据信息缓存一段时间,后续的操作将直接和 Chunk 服务器进行数据读写操作。
2.5Chunk尺寸
选择较大的 Chunk 尺寸有几个重要的优点。首先,它减少了客户端和 Master 节点通讯的需求,因为只需要一次和 Mater 节点的通信就可以获取 Chunk 的位置信息,之后就可以对同一个 Chunk 进行多次的读写操作。这种方式对降低我们的工作负载来说效果显著,因为我们的应用程序通常是连续读写大文件。即使是小规模的随机读取,采用较大的 Chunk 尺寸也带来明显的好处,客户端可以轻松的缓存一个数 TB 的工作数据集所有的 Chunk 位置信息。其次,采用较大的 Chunk 尺寸,客户端能够对一个块进行多次操作,这样就可以通过与 Chunk 服务器保持较长时间的TCP 连接来减少网络负载。第三,选用较大的 Chunk 尺寸减少了 Master节点需要保存的元数据的数量。这就允许我们把元数据全部放在内存中。
采用较大的 Chunk 尺寸也有其缺陷。小文件包含较少的 Chunk,甚至只有一个 Chunk。当有许多的客户端对同一个小文件进行多次的访问时,存储这些 Chunk 的 Chunk 服务器就会变成热点。
2.6元数据
Master 服务器7存储 3 种主要类型的元数据,包括:文件和 Chunk 的命名空间、文件和 Chunk 的对应关系、每个 Chunk 副本的存放地点。所有的元数据都保存在Master 服务器的内存中。前两种类型的元数据8同时也会以记录变更日志的方式记录在操作系统的系统日志文件中,日志文件存储在本地磁盘上,同时日志会被复制到其它的远程Master服务器上。
同样的,每个文件的在命名空间中的数据大小通常在 64字节以下,因为保存的文件名是用前缀压缩算法压缩过的。
Master 服务器并不保存持久化保存哪个 Chunk 服务器存有指定 Chunk 的副本的信息。Master 服务器只是在启动的时候轮询 Chunk 服务器以获取这些信息。件。在灾难恢复的时候,Master 服务器就通过从磁盘上读取这个Checkpoint 文件,以及重演 Checkpoint 之后的有限个日志文件就能够恢复系统。Checkpoint 文件以压缩 B-树形势的数据结构存储,可以直接映射到内存,在用于命名空间查询时无需额外的解析。
2.7一致性模型
GFS 支持一个宽松的一致性模型,文件命名空间的修改(例如,文件创建)是原子性的。它们仅由 Master 节点的控制:命名空间锁提供了
原子性和正确性的保障。
3.系统交互
持续更新中。。。。。。