GFS

论文原文

Google File System (GFS) 是谷歌实现的一款分布式文件系统。在分布式场景下的文件系统的设计目标与传统的文件系统是有所不同的:

  1. 故障或失败应该是常态,而不是异常。GFS 是由数百台或数千台廉价机器组成的,并且还有相当大的客户端访问量,所以组件的数量和质量几乎保证了组件无法一直保持正常工作,所以容错( fault tolerance)和自动恢复(automatic recovery)尤为重要。

  2. 相比传统文件系统,分布式场景下,文件数量是巨大的。工作负载一般是由数十亿对象组成的 TB 级数据集,传统文件系统直接管理数十亿个 KB 级小文件会导致元数据爆炸,尽管可以支持,但会显著降低性能。所以 IO 操作的参数以及块大小应该重新设计。

  3. 大多数的文件都是追加写,而不是覆盖写。随机写的操作基本是不存在的。数据一旦写入,文件就只能被读取,而且通常只能按顺序读取。各种数据都具有这些特征,一些可能构成被数据分析程序扫描的大型存储库;有些可能是运行应用程序连续生成的数据流;鉴于这种对大 型文件的访问模式,追加成为性能优化和原子性保证的重点,而在客户端缓存数据块则相对没那么重要(预取?)。

  4. 同时设计应用程序和文件系统 API 大大提高了灵活性,从而使整个系统受益。自己设计应用程序肯定更加了解怎样的 API 使用起来是更方便的。


评论