Google File System架构

jopen 10年前

GFS是一个面向大规模数据密集型应用的,可伸缩的分布式文件系统。GFS可以运行在廉价的设备上,并且能够提供具有容灾、高性能的服务。


GFS架构:

一个GFS集群包括一个单点Master,多台Chunk服务器 (ChunkServer,下面也称块服务器),并且能够同时被多个客户端访问。如图1所示。所有的这些机器可以使普通的运行用户级线程的Linux机器。只要机器允许,我们完全可以将客户端与Chunk服务器放在同一台机器上。

Google File System架构


GFS上存储的文件被分割成固定大小的Chunk(块)。Chunk服务器把 Chunk以Linux文件的形式保存在本地磁盘上行,并根据指定的Chunk标识和字节范围来读写数据。处于可靠性的考虑,每个块会复制到多个 chunk服务器上。默认情况下,GFS被将块复制为3份,当然,用户可以指定这个参数。

Master节点管理着所有的文件系统元数据,包括命名空间、访问控制信息、文件和 Chunk之间的映射信息、以及当前chunk的位置信息。Master节点还管理着全系统范围内的活动,如块的租用管理、孤立块的回收、以及块在不同块服务器间的移动。Master使用心跳信息周期性的和每个Chunk服务器通讯,并发送指令到各个块服务器并接收各个块服务器的状态信息。

无论是客户端还是块服务器都无需对文件数据进行缓存。客户端无需缓存的原因,因为大部分程序需要以流的方式读取一个巨大的文件,再者,工作集可能会很大以至于无法进行缓存。块服务器无需缓存数据的原因,块一本地的方式保存,Linux文件系统缓存会把经常访问的数据缓存在内存中。


下面简单解释下在单点Master下一次简单的读取过程:

(1)客户端向Master发送请求,请求信息为(文件名,块索引)

(2)Master使用心跳信息监控块服务器的状态,并向其发送指令。

(3)块服务器需要周期性的返回自己的状态给Master,以确保能够接收Master的请求。

(4)Master将(块句柄,块位置)这一信息返回给客户端

(5)客户端使用文件名和块索引作为Key进行缓存信息。然后,客户端发送请求到其中的一个副本中(通常为最近的),该请求包括(块句柄,字节范围)。对这个块的后续操作,客户端无需再和Master进行通信,除非缓存信息过期或者文件被重新打开。

(6)块服务器将所需的块数据发送给客户端。

整个流程如下图所示:Google File System架构

来自:http://blog.csdn.net/tao_sun/article/details/17888785