前提
GFS是一个面向大规模的数据密集型应用的、可扩展的分布式文件系统。即便是将GFS运行在十分廉价的设备上,它也能提供十分强大的容错能力,为大量的客户端提供高性能服务的服务。其设计是为了解决谷歌内部应用的负载情况以及技术环境为基础。
GFS诞生的初衷是为了满足谷歌快速增长的数据处理需求。GFS跟传统的分布式文件系统有着相同的设计目标(性能、可扩展性、可靠性以及可用性等等)。GFS与早期的文件系统的设想都有明显的不同,它使用了一种完全不同的设计思想。其主要包括以下两点
- 组件失效被认为是常态事件,而不是意外事件。当有大量的客户端对GFS进行访问时,将会导致GFS的部分组件无法进行工作或者这些组件无法从它们目前失效状态中恢复。所以在GFS中集成了错误检测、容错机制、自动恢复的机制。
- 用于存储大数据文件。系统中所存储的文件非常巨大。数GB的文件非常普遍,每个文件通常包含许多应用程序,例如web文档。
- 绝大部分文件的修改是采用在文件尾部追加数据,而不是覆盖原有数据的方式。我们对于文件的操作一般只有读,而且是顺序读。对于文件的随机写入操作基本上不存在。
- 使用文件系统API和应用程序的协同设计提高了整个系统的灵活性。引入了原子性的记录追加操作,从而保证多个客户端能够同时进行追加操作,不需要额外的同步操作来保证数据的一致性。(放松了GFS对于一致性模型的要求)
设计理念
GFS集群包含一个单独的Master节点(主节点)、多台块服务器(Chunkserver),并且可以同时被多个客户端进行访问。GFS存储的文件都将被分割成固定大小的块(Chunk)。在每个Chunk**(64MB&