The Google File System 翻译和理解

The Google File System摘要GFS 是一个可扩展的分布式文件系统,用于大型分布式数据密集型应用上 。它可以运行在便宜的普通硬件上,提供了高性能和一定的容错性 。
1. 分布式文件系统介绍GFS 与过去的分布式文件系统有很多相似之处,如性能、扩展性、可靠性和高可用性 。但对 GFS 的设计是由我们对应用负载和技术环节的探索所驱动的,它与之前的文件系统还是有设计上的明显区别 。
我们考虑下面一些设计分布式文件系统时的关键点:

  • 首先,组件出错是一个普遍情况,而不是异常事件 。我们几乎可以确定在一个大型文件系统中,有一部分机器不可用 , 一部分机器无法从错误中恢复 。造成错误的原因可能有:
    • 应用程序或操作系统的 bug 。
    • 人为错误 。
    • 磁盘、内存、网络等的错误 。
    • 等等 。
    因此,实时监控、错误检测、容错设计、错误恢复是这个系统不可或缺的一部分 。
  • 其次,文件是巨大的 。每个文件通常包含很多对象,例如网页文档 。当我们经常使用由数十亿个对象组成的、大小达到许多个 TB 且依然在快速增长的数据集时,即使文件系统不拒绝这样的需求,我们也必须重新审视设计的假设和参数,例如 IO 操作和存储块的大小 。
  • 第三,大多数文件通过追加数据而不是覆盖数据来进行操作 , 文件的随机写事实上并不存在 。这些文件写入后只用作读需求,且经常只是顺序读,各种数据共享这些属性 。
    • 一些组成了数据仓库,用于供数据分析程序使用;
    • 一些是正在运行的程序连续产生的数据流;
    • 一些是档案资料;
    • 一些是存储在一台机器上并在另一台机器上处理的中间数据(如 MapReduce 的中间键值对)
    对于上述这种文件的处理 , 在客户端缓存数据块已经没有意义,而追加操作成为了性能优化和原子性保证的焦点 。
  • 第四,应用程序和文件系统 API 在设计上的协作提高了整个系统的灵活性,从而优化了整个系统 。例如我们放松了 GFS 在一致性上的要求,这大大简化了文件系统,同时没有为应用程序引入额外的负担 。我们还采用了原子性的追加操作,以此使多个用户可以同时对一个文件进行追加操作,但又不用带来额外的同步开销 。
在 Google , 多个 GFS 集群以不同的目的进行部署,最大的一个集群包含了超过 1000 个存储节点,300TB 以上的磁盘存储,能让数百个不同机器上的客户端进行连续的频繁访问 。
2. 设计概要2.1 设想在根据需求设计文件系统的过程中,我们也会依照一些挑战和机会并存的假设进行设计 。在第一节提到的一些事实的基础上,我们在细节上展示我们的一些假设: