目录
GFS-为什么
分布式平台遇到的瓶颈
谷歌做为搜索巨头,每天要处理巨量数据并储存下来。其数据特征是体积大,需要储存在多块廉价硬盘中。但由于数据易损坏丢失或者难以高效下载数据,已有的分布式系统已无法满足其需求。
GFS解决的问题
GFS运行在廉价的普遍硬件设备,面向大规模数据服务。多点备份防止数据丢失,提供灾难冗余能力。可根据实际需求增加或减少集群规模,具有可伸缩性。单一master节点、分布式分块储存,可以高效地获取数据。
GFS-是什么
GFS的基本原理
一个GFS集群包含一个Master节点,多个多台Chunk服务器,可同时被多个客户端访问。
(Chunk的翻译为厚块; 厚片; 大块; 相当大的量; 话语组成部分; 组块;GFS中指将大文件拆分为许多固定大小的Chunk块。一台Chunk服务器可以储存几十到几百个Chunk。)
其三者如图所示。储存大文件时,将其拆分为多个Chunk,存入一个或多个Chunk服务器。存入时master节点并不储存原本数据,它只记录每个Chunk的位置。
客户端(client)获取数据时先访问master节点,获得文件(chunk)储存地址,然后访问对应chunk服务器获得文件。
Chunkserver和master的实际关系
GFS中master节点只有一个,但chunk服务器有多个。随着文件数量的变化,可能会增加减少chunk服务器的数量。
GFS的理论框架
灾难冗余的实现
每个Chunk存放在三台服务器上,防止某个数据(Chunk)丢失后无法找回。
为什么是三呢?
笔者猜测是因为如果chunk只有一个备份,即总共两个相同的Chunk,那么两个Chunk数据不同时无法确定哪个是被损坏那个,哪个是未损坏的。而有三个时发生损坏的那个数据和另两个不同,而另两个未损坏的数据是一致的。这保证的灾难冗余的能力。
master节点瓶颈的应对措施
所有数据的下载都需要先从master节点获取地址,而master节点只有一个,很容易成为性能的瓶颈。所有设计时要重点考虑如何减少客户端、chunk服务器对master节点的访问。具体措施见GFS论文。
为何只设置一个master节点
GFS集群中的“单一Master节点”指 GFS系统中只存在一个逻辑上的Master组件。
单一的Master节点的策略大大简化了我们的设计。单一的Master节点可以通过全局的信息精确定位Chunk的位置以及进行复制决策。
Chunk尺寸
Chunk的大小是关键的设计参数之一。我们选择了64MB,这个尺寸远远大于一般文件系统的Block
size。选择较大的Chunk尺寸有几个重要的优点。
首先,它减少了客户端Master节点通讯的需求,因为只需要一次和Mater节点的通信就可以获取Chunk的位置信息,之后就可以对同一个Chunk进行多次的读写操作.
其次,采用较大的Chunk尺寸,客户端能够对一个块进行多次操作,这样就可以通过Chunk服务器保持较长时间的TCP连接来减少网络负载。
第三,选用较大的Chunk尺寸减少了Master节点需要保存的元数据的数量。这就允许我们把元数据全部放在内存中.
GFS-怎么样
在后来若干年发展起来的TFS(Taobao File System)、TFS(Team Foundation Server),都能看见GFS的影子。足以说明GFS对分布式发展趋势的预测的正确性。
Google并未提供GFS的源码,它是一个理想化模型。但这个模型又好像往哪个分布式系统都能套。或许正因因如此,它才格外地有魅力。