The Google File System 论文解读

1. 前言

Google File System (GFS) 是由 Google 设计并实现的、一个面向大规模数据密集型应用分布式文件系统,它满足所有分布式文件系统共有的 高性能伸缩性可靠性可用性 ,还以 Google 自身 应用程序技术环境 为基础进行了特有的设计 ,主要包括:

  • 因为 GFS 使用设备数多,将组件失效视为常态事件 。因此 持续监控错误检测灾难冗余自动恢复 的机制必须包括在 GFS 中 。
  • 数据增长,既要保证对小文件的管理,又要很好的对大文件进行管理,主要对大文件的管理进行了优化
  • 主要应用于 对文件尾部追加数据的修改,而非覆盖原有数据的方式,如 “生产者-消费者” 队列,或者其他多路文件合并操作 。一旦写完后,对文件的操作通常是顺序读
  • 采用了较弱的 一致性 要求,引用原子性的记录追加操作,保证多个客户端能够同时进行追加操作,不需要额外的同步操作来保证数据的一致性 。
  • 目标程序绝大多数要求高速率、大批量地处理数据,极少要求对单一读写操作有严格的响应时间要求 。即高性能的稳定网络带宽低延迟 更重要 。
  • 两种比较常见的读取方式:大规模的数据流读取小规模的随机读取
    • 大规模流失读取 通常读取1MB以上数据 ,应用程序通常通过文件中的连续区域读取,大多连续附加数据到尾部
    • 小随机读取通常只有几个 Kbs 在某些任意偏移,不必很高效
    • 一旦写入,很少修改

2. 架构

GFS 提供了一套类似传统文件系统的 API接口函数 ,不符合POSIX,文件以 分层目录的形式组织,用 路径名 来标识 。支持:创建新文件、删除文件、打开文件、关闭文件、读和写文件,以及**快照(以低成本创建文件或目录树的副本)记录追加(允许多个客户端同时将数据附加到同一文件中,至少保证有一次有效的追加)**操作 。

2.1 架构设计

在这里插入图片描述

  • 一个 GFS 集群包含:一个 master 、多台 chunkserver 、同时被多个 client 访问

  • 每个文件被分为多个 chunk ,每个 chunk 大小为 64MB 。保证可靠性,每个 chunk 含有 3 个 副本,分别存于 3 个不同机架上的不同 chunkserver

  • master上存储元信息:命名空间、访问控制信息、文件和chunks的映射、chunks的位置,master会让chunk server通过HeartBeat交换信息

  • client和chunkserver都不缓存文件数据,易造成缓存一致性问题

  • 控制和数据信息分离

    • Clients interact with the master for metadata operations
    • Clients interact directly with chunkservers for all files operations
    • This means performance can be improved by scheduling expensive data flow based on the network topology

3. Chunk

3.1 chunk 大小与数量

  • chunk 大小为 64MB ,并被赋予一个独一无二的不可改变的chunk handle。之后会根据 chunk handle 和字节范围range来读写 chunk
  • 每个 chunk 副本都以普通 Linux 文件的形式保存在 chunkserver ,使用 惰性分配 策略避免了因内部碎片造成的空间浪费,(惰性分配:指直到使用一个资源的时候再去给它分配空间 )
  • 在master中用小于64bytes的元数据保存这块chunk,包括:
    • 当前chunk复制版本的位置
    • 引用计数,用于写时复制
    • 版本编号,用于检测陈旧的副本
  • 出于可靠性的考虑,每个 chunk 都会复制到多个 chunksever 上(多个机架),默认副本数为 3
  • 选择较大 chunk 尺寸的优点
    • 减少了客户端和 master 节点通信的需求
    • 用较大的 chunk 尺寸,客户端能够对一个块进行多次操作,这样就可以与 chunkserver 保持较长时间的 TCP 连接而减少网络负载
    • 减少了 master 节点需要的元数据的数量
  • 缺点:
    • 由于内部碎片而浪费空间
    • 小型文件由几个块组成,然后从并发客户端获得大量流量可能导致失控,可以通过增加复制系数来缓解这种情况

3.2 副本的位置 与 放置

  • GFS 集群是高度分布的 多层布局结构 。存储在多个 机架 上,可以:
    • 最大化数据可靠性和可用性:不仅可以预防硬盘损坏、服务器宕机引发的问题,还可以预防网络、电源故障失效,比仅部署在不同服务器上拥有更高的可靠性
    • 最大化网络带宽利用率:针对 chunk 的读操作,能够利用多个机架的整合带宽
  • master 创建一个 chunk 时,会选择在哪里放置初始的空的副本,主要考虑几个因素:
    • 希望在低于平均硬盘使用率的 chunkserver 上存储新的副本
    • 希望限制在每个 chunkserver 上 最近 chunk 创建操作的次数
    • 希望把 chunk 分布在多个机架上
  • 让master掌握块位置并评估整个系统的状态
  • 重要: chunk servers对它自己的磁盘上哪些块或没有块有最终决定权 ,不是master

3.3 chunk 容错复制 和 负载均衡

  • chunk 的有效副本数量少于用户指定的复制因素的时候 或者 副本损坏 或者chunkserver不可用时,master 会重新复制它,master 选择优先级最高的 chunk ,然后命令 chunkserver 直接从可用的副本克隆一个副本出来,选择新副本位置的策略和创建时的策略相同 。

  • 优先级因素

    • 优先复制副本数量和复制因素相差多的
    • 优先复制活跃的文件而非刚被删除的文件
    • 优先复制会阻塞 client 程序的chunk
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值