导读谷歌三大核心技术之一 GoogleFileSystem(一)

GoogleFileSystem设计构想

为满足Google数据处理的需求,Google工程师设计并实现了GoogleFileSystem(GFS)。GFS与传统分布式文件系统类似,也需要满足高性能、可伸缩性、可靠性以及可用性。与传统分布式文件系统思路不不同的是:

  1. GFS认为组件失效是常态而非意外,GFS由大量廉价设备组成
  2. 文件数量异常巨大
  3. 绝大部分文件修改采用文件尾部追加数据而非覆盖原有数据
  4. 应用和文件系统协同设计

GFS架构设计

一个GFS包含一个单独的Master节点、多台Chunk服务器,并同时被多个客户端访问。
image

存储方式

GFS存储的文件被分割成固定大小的Chunk,Master分配给每个Chunk一个不变的64位唯一标识。每个Chunk备份到多个服务器上,以提高可靠性。

Master服务器

Master服务器管理所有Chunk的元数据,以管理各Chunk数据(类似于Linux文件系统的inode)。每个Chunk大小为64M,Chunk元数据大小为64字节,而且由于大多数文件包含多个Chunk因此可以将所有Chunk的元数据存储在Master的内存中,增强系统的简洁性、可靠性、高性能和灵活性。

Chunk信息

Master服务器不永久保存Chunk服务器有指定Chunk的副本的信息。因为在一个拥有数百台服务器的集群中,Chunk服务器加入集群、离开集群、更名、失效、以及重启的时候,Master服务器和Chunk服务器数据同步的问题会非常频繁。Master服务器在启动时候轮询Chunk服务器,并在之后定期轮询更新。

GFS的日志系统(灾备)

操作日志包含了关键的元数据变更历史记录。操作日志是元数据唯一的持久化存储记录,同时也是判断同步操作顺序的逻辑时间基线(类似LSN),必须确保日志文件的完整,确保只有在元数据的变化被持久化后,日志才对客户端是可见的。GFS把日志复制到多台远程机器,只有相应的日志记录写入到本地以及远程机器的硬盘后,才会响应客户端的操作请求。Master服务器会收集多个日志记录后批量处理,以减少写入磁盘和复制对系统整体性能的影响。

GFS灾难恢复

Master服务器在灾难恢复时,通过重演操作日志把文件系统恢复到最近的状态。为了缩短Master启动的时间,重演系统操作的日志量尽量的少。Master服务器在日志增长到一定量时对系统状态做一次Checkpoint(对数据库的快照)。在灾难恢复的时候,Master服务器就通过从磁盘上读取这个Checkpoint文件,以及重演Checkpoint之后的有限个日志文件就能够恢复系统。Checkpoint文件以压缩B-树形势的数据结构存储,可以直接映射到内存,在用于命名空间查询时无需额外的解析。Master服务器恢复只需要最新的Checkpoint文件和后续的日志文件。旧的Checkpoint文件和日志文件可以被删除。通常会多保存一些历史文件。Checkpoint失败不会对正确性产生任何影响,因为恢复功能的代码可以检测并跳过没有完成的Checkpoint文件。

资料
The Google File System – Research at Google
谷歌三大核心技术(一)Google File System中文版 译者:alex

原创文章,作者:easyTang,如若转载,请注明出处:http://www.178linux.com/74893

(13)
easyTangeasyTang
上一篇 2017-05-07 13:55
下一篇 2017-05-07 15:35

相关推荐

  • Linux shell之bash特性大全详解(持续更新ing)

    一、shell是什么?     Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中…

    Linux干货 2016-03-09
  • 马哥教育网络班22期+第二周课程练习

    Linux上文件可管理类命令,其常用的使用方法和相关示例 目录管理类命令 目录管理类命令包含:mkdir,rmdir mkdir 使用说明及格式 移除空目录 rmdir [OPTION]… DIRECTORY…   常见选项及说明 -p –parents 创建时如果父目录不存在,一并创建 -v –ve…

    Linux干货 2016-08-24
  • 网络班N22期第三周博客作业

    一、列出当前系统所有已经登录的用户名,且同一个用户登录多次只显示一次 [root@bogon ~]# w  15:17:44 up 15:28,  2 users,  load average: 0.00, 0.00, …

    Linux干货 2016-08-29
  • 正则表达式

    什么是正则表达式? 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为”元字符”)。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,许多程序设计语言都支持利用正则表达式进行字符串操作。正则表达式是烦琐的,但它是强大的,学会之后的应用会让你除…

    Linux干货 2017-06-01
  • 10yum源的配置

    yum仓库使用起来特别方便,然而使用之前当然是要配置的啦。下面就介绍一下怎么从0 配置一个yum仓库。 首先要创建yum仓库,当然不能使只给一台服务器用,那要给多个服务器用的话,就需要网络服务。yum仓库支持的网络服务有两种,FTP和HTTP。用yum主要用到的是数据传输,因此FTP更适合创建yum仓库,下面就以FTP为例,说明一下yum仓库的配置。 第一步…

    Linux干货 2016-11-04
  • N22+北京+张zhangzhang+第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who | cut -d" " -f1 | sort -u 2、取出最后登录到当前系统的用户的相关信息。 id `who | cut -d" " -f1 | tail -1` 3、取出当前系统上被用户当作其默认shell的最多的…

    Linux干货 2016-09-05