概述

​ GFS:一个可扩展的分布式文件系统,用于大型分布式数据相关应用,TB级的数据,成千上万的并发请求。

设计概览

假设

  • 组件的失效比异常更加常见
  • 多数的文件修改操作是追加数据而不是重写原来的数据/随机读写
  • GB及更大的单个文件是很常见的,对于小文件提供支持,但是无需专门考虑影响。
  • 系统主要负荷由大型顺序读写、小型随机读写构成。客户端应该对随机读写进行排序以提高性能。
  • 持续的高带宽比低延迟更重要

架构

  • GFS集群由一个master和多个chunk server组成,被多个客户端访问。
  • 文件被分割成64M的多个chunk,每个chunk 用唯一的块句柄来标识,句柄由master在创建块的时候进行分配。块服务器存储块,按照块句柄和块内偏移来读写块数据。
  • 每个文件块有多个备份(replicas),默认是3个
  • master维护GFS的元数据,包括名字空间(文件名、块句柄)、访问控制信息(权限管理),文件与块的链接(map<文件名,list of 块>,map<块,list of location>),管理块租借(primary chunk, version number),块的垃圾回收、块迁移等
  • master会定期与块服务器进行通信(ping),来收集、检查chunk server的状态
  • 客户端和块服务器都不会缓存文件数据
  • 中心化架构

单Master

  • 简化了设计,但是必须使得master在读写方面的占用最小化(防止成为热点,导致性能瓶颈)

    • 客户端本地缓存块句柄和块位置
    • Chunk Size 大小设置为64M

Chunk Size

  • 64MB的大小比一般的linux文件大

    • 降低了块的数量
    • 减小了master响应请求的压力
    • 减小了网络压力
    • 小文件(不足64MB),可能成为“热点”

元数据

  • master将元数据保存在内存中

    • 操作速度块
    • 通过操作日志来保证元数据安全性
      • 通过远程备份操作日志来保证操作日志安全性
    • 实践中不用担心OutOfMemory,因为元数据都很小(64Bit)
    • 更换更大的内存相比整个系统的代价而言微不足道
  • master不持久化块的位置,唯一持久化的信息是操作日志
    • 在每次重启的时候,结合操作日志,向chunk server发出对于块信息的请求。返回块位置、版本号等信息。
  • 操作日志包含关键元数据的变动记录,是GFS的核心
    • 操作日志定义了并发操作顺序的逻辑线。
    • 操作日志持久化了元数据
    • 使用checkpoint来减小日志规模
    • 通过多线程来减小创建checkpoint时的影响

一致性模型

  • 轻量(弱一致性)

    • 简洁而容易实现
  • 成功的操作一定是一致的,但是不一定是已定义的
    • 通过填入冗余字符,来使得可能产生未定义范围的操作,最终结果为已定义。
    • 通过写入校验和来检查写入记录的有效性(保证已定义)
  • 在 一系列成功变动后,变动的文件范围保证是已定义的
    • 将块的变动在所有的复本上按 相同的顺序进行记录
    • 使用块版本号来检测是否因为块服务器死机造成错过了某些变动,从而复本变成失效
    • 失效的复本将不再会涉及后续的变动,Master向客户端响应块的位置时也不会返回此复本的信息
  • 不保证一定会返回正确的数据
    • 但是一般不是无效的数据,更常见的是“过期”的数据

系统交互

块租约

  • 在一个chunk和它的副本中选出一个 primary chunk

    • 主块为块的所有变动选择一个序列顺序。所有的复本在应用变动时都遵从这个顺序。
    • 全局的变动顺序首先被Master选择 的租约签署顺序所定义,在一个租约中,则由主块赋予的序列号决定
    • 一个租约有60s的时间,可以主动解约与续约
      • 可以避免由于网络导致的“多个主块
    • 副本间强一致性——在某一个副本上的操作失效,则需要在所有块上重新执行该操作

数据流

  • 推送到网络拓扑中最近的结点
  • 原子性的记录追加
  • 数据流与控制流解耦

Master 操作

  • 加锁来支持在master上并行执行多个操作
  • 块创建、重新复制、重新负载均衡
    • 将新的复本放在磁盘空间使用率低于平均水平的块服务器 上。
    • 限制每台块服务器上的“最近”创建的数量
    • 在机架之间分布块的复本。一旦可用的块的复本数量低于用户指定的指标,Master就将重新创建块的副本
    • 使磁盘空间利用率平均化
  • 在一个文件被删除之后,GFS不能立刻回收可用的物理存储。回收在对文件和块进行例行垃圾回收时进行
  • 当一个文件被应用系统删除,文件会被重命名为一个隐藏的名字,包含删除的时间戳。如果这些文件已经存在了三天(间隔可以配置),Master会将其进行移除。(软删除以防止误删除)
  • 通过块版本号来区分当前副本与过期副本
    • 当 Master为一个块签署一个租约时,将会递增块的版本号,然后通知当前的复本。Master和这些复本都在它们的持久化状态中记录新的版本号。
    • 发生在客户端被通知之前 也就是 data flow 的第1步与第2步之间

容错

  • chunk 与master 复制

    • 保留多个块的副本
    • 操作日志和检查点在多个机器上复制
    • shadow master
  • Data Integrity
    • 由于磁盘可能会损坏,所以必须要有能够检查数据正确性的手段(对于chunk server而言)

      • 通过校验和来检查(上文也提到过)
      • 每个服务器独立维护CheckSum

​ 读了好几次这篇论文,可以说越读问题越多,越读收获越多。虽然有许多细节论文没有交代清楚,但是总的框架是十分清晰的。

​ 简洁、高效,贴近实际场景。GFS的设计正如论文开篇的假定一样:朴实却又只能如此。

​ 单个PC->性能->集群->容错->一致性->中心化、冗余->性能->去中心化

The Google File System(论文阅读笔记)的更多相关文章

  1. Google File System 论文阅读笔记

    核心目标:Google File System是一个面向密集应用的,可伸缩的大规模分布式文件系统.GFS运行在廉价的设备上,提供给了灾难冗余的能力,为大量客户机提供了高性能的服务. 1.一系列前提 G ...

  2. The Google File System论文拜读

    The Google File System Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung Google∗ 摘要 我们设计并实现了谷歌文件系统 ...

  3. The Google File System——论文详解(转)

    “Google文件存储系统(GFS)是构建在廉价服务器之上的大型分布式系统.它将服务器故障视为正常现象,通过软件方式自动容错,在保证系统可用性和可靠性同时,大大降低系统成本. GFS是Google整个 ...

  4. Google file system

    读完了Google file system论文的中文版,记录一下总结,懒得打字,直接上草图:

  5. 《The Google File System》论文阅读笔记——GFS设计原理

    一.设计预期 设计预期往往针对系统的应用场景,是系统在不同选择间做balance的重要依据,对于理解GFS在系统设计时为何做出现有的决策至关重要.所以我们应重点关注: 失效是常态 主要针对大文件 读操 ...

  6. 经典论文翻译导读之《Google File System》(转)

    [译者预读] GFS这三个字母无需过多修饰,<Google File System>的论文也早有译版.但是这不妨碍我们加点批注.重温经典,并结合上篇Haystack的文章,将GFS.TFS ...

  7. 《The Google File System》论文研读

    GFS 论文总结 说明:本文为论文 <The Google File System> 的个人总结,难免有理解不到位之处,欢迎交流与指正 . 论文地址:GFS Paper 阅读此论文的过程中 ...

  8. 《The Google File System》 笔记

    <The Google File System> 笔记 一.Introduction 错误是不可避免的,应当看做正常的部分而不是异常.因此需要设计持续监控,错误检查,容错,自动恢复的系统. ...

  9. 大数据理论篇HDFS的基石——Google File System

    Google File System 但凡是要开始讲大数据的,都绕不开最初的Google三驾马车:Google File System(GFS), MapReduce,BigTable. 为这一切的基 ...

  10. 谷歌三大核心技术(一)The Google File System中文版

    谷歌三大核心技术(一)The Google File System中文版  The Google File System中文版 译者:alex 摘要 我们设计并实现了Google GFS文件系统,一个 ...

随机推荐

  1. 2020年学习目标之一——emacs

    这两天在虚机里面安装了centos7(gnome),决定后续自己的学习一直在这个里面进行,对于编辑器我最后选择了emacs,新手一枚,不过正好也算是今年的一项学习目标吧,加油! (完)

  2. 跟着阿里学JavaDay07——Java基础语法(五)

    我们后面的笔记我,打算直接用程序,加注释进行记录.日后若本人有疑问,可进行网络查询加以整理回复 package com.cionda.JavaDemo.dept; public class JavaD ...

  3. HTML条件注释_关于IE条件注释

    普通的HTML注释形式是 <!-- 注释 --> 而IE5~IE9这5个版本的IE浏览器还另外支持一种特殊的if条件注释(感觉有点类似模板渲染时的语法结构) <!--[if IE]& ...

  4. [NOI Online #2 提高组]涂色游戏 题解

    题目描述 你有 1020 个格子,它们从 0 开始编号,初始时所有格子都还未染色,现在你按如下规则对它们染色: 编号是 p1 倍数的格子(包括 0号格子,下同)染成红色. 编号是 p2 倍数的格子染成 ...

  5. Problem C Emergency Evacuation 一道思维题

    题目描述 输入 输出 样例 样例输入 样例输入一 样例输入二 样例输出 样例输出一 9 样例输出二 1008 一句话题意:给你一个车厢和一些人,这些人都坐在座位上,求这些人全部出去的时间最小值. 分析 ...

  6. Linux系统中虚拟设备文件的各种实用用法

    大家好,我是良许. 大家知道,在 Linux 下,一切皆文件,对于设备文件也是如此.我们在工作的过程中,经常会看到 /dev/null 这个玩意,那它到底是什么呢? 专业地讲,/dev/null 是一 ...

  7. Howdoo欢迎Mitel成为内容发布支持者

    原文链接:https://medium.com/howdoo/howdoo-welcomes-mitel-as-a-launch-supporter-4c40027d4dd1 “Mitel很高兴能够成 ...

  8. [JAVA]枚举类型的应用

    本文介绍枚举类的概念和开发过程中枚举的用法. 枚举类使用enum关键字定义,enum默认继承自Enum类,由于java单继承的特点,enum类无法再继承其他父类 一.枚举类的特性 1.简单枚举类的定义 ...

  9. Edit Static Web File Http Header Metadata of AWS S3 from SDK | SDK编程方式编辑储存在AWS S3中Web类文件的Http Header元数据

    1.Motivation | 起因 A requirement from the product department requires download image from AWS S3 buck ...

  10. mui点击蒙版点击蒙版让其不自动关闭

    var mask = mui.createMask(callback);//callback为用户点击蒙版时自动执行的回调: mask.show();//显示遮罩 mask.close();//关闭遮 ...