The Google File System [SOSP‘03] 论文阅读笔记

news2024/11/26 19:26:24

原论文:The Google File System

1. Introduction

  • 组件故障是常态而非例外
    • 因此,我们需要持续监控、错误检测、容错和自动恢复!
  • 按照传统标准,文件数量巨大
  • 大多数文件都是通过添加新数据而不是覆盖现有数据来改变的,因此文件内的随机写入几乎不存在
    • 因此,追加成为性能优化和原子性保证的重点!

2. Design Overview

2.1 Architecture
  • 组成:单个master、多个chunkservers、多个clients
  • master维护所有文件系统元数据
  • 文件被分成固定大小的块
  • clients和chunkservers都不缓存文件数据
2.2 Single Master
  • 设计目标:尽量减少其参与读写的次数,以免master成为性能瓶颈
  • clients会在一定时间内缓存最新访问的chunkservers的信息
2.3 Large chunk size as 64 MB
  • 优点
    • 减少clients与master交互的需要,对同一数据块的读取和写入只需向master发出一次初始请求,以获取数据块位置信息
    • 在一个大块上,clients更有可能对一个给定的块执行许多操作,它可以通过长时间保持与chunkservers的持久 TCP 连接来减少网络开销
    • 减少存储在主服务器上的元数据的大小
  • 缺点
    • 数百台机器同时访问的单块热文件时导致某个chunkserver超负荷运行
      • 解决方案:允许clients从其他clients读取数据
2.4 Metadata
  • 元数据主要包括:文件与chunk的命名空间(记录日志)、文件与 chunk 之间的映射关系(记录日志)、每个 chunk replica 所在的位置
  • 元数据存储在内存中,每个chunk有大概64字节的元数据
  • 控制所有块的放置,通过定期的 HeartBeat 消息监控chunkservers的状态来记录chunk的位置
  • 操作日志
    • 只有在本地和远程将相应的日志记录刷新到磁盘后,才能响应client操作。
    • 为了尽量减少启动时间,master会使用紧凑型 B 树,在日志增长超过一定大小时,对其状态进行检查点。
    • 在不延迟的情况下创建新的检查点时,主站会切换到新的日志文件,并在单独的线程中创建新的检查点。
2.5 Consistency Model
  • 修改的类型
    • 一致的:如果所有client无论从哪个副本读取数据,都能始终看到相同的数据,那么文件区域就是一致的。
    • 确定的:所有client都能看到上一次修改的所有完整内容,且这部分文件是一致的,那么文件区域就是确定的。
  • 数据修改后的文件区域状态
    • 当修改成功,且不受并发写入器的干扰时,则该文件区域是确定的
    • 如果有若干个写入操作并发地执行成功,那么这部分文件会是一致的但会是不确定的,在这种情况下,client所能看到的数据通常不能直接体现出其中的任何一次修改
    • 失败的写入操作会让文件进入不一致的状态
  • GFS 通过主服务器与所有主服务器之间的定期握手来识别故障的主服务器,并通过校验和检测数据损坏情况。

3. System Interaction

3.1 Chunk Lease

在clients对某个 chunk 做出修改时,GFS 为了能够处理不同的并发修改,会把该 chunk 的 Lease 交给某个 replica,使其成为 primary,primary 会负责为这些修改安排一个执行顺序,然后其他 replica 便按照相同的顺序执行这些修改。Chunk Lease 在初始时会有 60 秒的超时时间。在未超时前,primary 可以向 Master 申请延长 Chunk Lease 的时间,必要时 Master 也可以直接撤回已分配的 Chunk Lease。

3.2 Read and Write Control and Data Flow

在这里插入图片描述

  • 文件读取流程

    • 根据指定的filename和读取位置offset,client可以根据固定的 chunk size来计算出该位置在该文件的哪一个 chunk 中
    • client向master 发出请求,其中包含要读取的文件名以及 chunk index
    • master 向client响应该 chunk handle 以及其所有 replica 当前所在的位置。client会以filename和 Chunk index为键缓存该数据
    • client选取其中一个 replica 所在的 chunkserver 并向其发起请求,请求中会指定需要读取的 chunk 的 handle 以及要读取的范围
      在这里插入图片描述
  • 文件写入流程

    • client向 master 询问目前哪个 chunkserver 持有该 chunk 的 Lease
    • master 向client返回 primary 和其他 replica 的位置
    • client将数据推送到所有的 Replica 上。chunkserver 会把这些数据保存在缓冲区中,等待使用
    • 待所有 replica 都接收到数据后,client发送写请求给 primary。primary 为来自各个client的修改操作安排连续的执行序列号,并按顺序地应用于其本地存储的数据
    • primary 将写请求转发给其他 replica,replicas按照相同的顺序应用这些修改
    • replicas 响应 primary,表示已经完成操作
    • primary 响应client,并返回该过程中发生的错误(若有)
  • 文件追加流程

    • client将数据推送到每个 replica,然后将请求发往 primary
    • primary 首先判断将数据追加到该块后是否会超过块的大小上限:如果是,primary 会为该块写入填充至其大小达到上限,并通知其他 replica 执行相同的操作,再响应client,通知其应在下一个块上重试该操作
    • 如果数据能够被放入到当前块中,那么 primary 会把数据追加到自己的 replica 中,返回追加成功返回的偏移值,然后通知其他 replica 将数据写入到该偏移位置中
    • 最后 primary 响应client
    • 如果追加操作在部分 replica 上执行失败时,primary 会响应client,通知它此次操作已失败,client便会重试该操作。重试操作可能会使得部分数据重复,但GFS的一致性模型不保证每个replica保持完全一致
  • 快照:Copy on Write

    • 快照就是几乎可以瞬间复制一个文件或目录得到一个副本,同时最大限度地减少对正在进行的突变的干扰。
    • 在 master 接收到快照请求后,它首先会撤回这些 chunk 的 Lease,使得接下来其他client对这些 chunk 进行写入时都会需要请求 master 来获知 primary 的位置,master 便可利用这个机会创建新的 chunk
    • 当 chunk Lease 撤回或失效后,master 会先写入日志,然后对自己管理的命名空间进行复制操作,复制产生的新记录指向原本的 chunk
    • 当有client尝试对这些 chunk 进行写入时,master 会注意到这个 chunk 的引用计数大于 1。此时,master 会为即将产生的新 chunk 生成一个 handle,然后通知所有持有这些 chunk 的 chunkservers 在本地复制出一个新的 chunk,应用上新的 handle,然后再返回给client

4. Master Operation

4.1 Namespace Management and Locking
  • GFS 在逻辑上将其命名空间表示为一个将完整路径名映射到元数据的查找表。通过前缀压缩的方法来减少内存开销。
  • 每一个master operation在执行之前都会首先获得一个锁
  • 通过分别在目录、文件上加相应操作的读写锁实现并发控制。
  • 读写锁会在实际需要时才进行创建,一旦不再需要时就被销毁。所有的锁获取操作按照一个相同的顺序进行,以避免发生死锁:锁首先按 Namespace 树的层级排列,同一层级内则以路径名字典序排列。
4.2 Replica Placement
  • 两个目标:最大化数据可靠性和可用性、最大化网络带宽利用率
  • 将chunk replicas分布存储在多个racks中,保证单rack容错能力
  • 创建chunk replicas的三个原因:创建 chunk、为 chunk 重备份、replicas均衡
  • replica 放置策略
    • 把新的replicas放置在磁盘使用率低于平均水平的chunkservers中
    • 限制每个chunkserver中最新创建的replica的数量
    • 将chunk replicas分布存储在多个racks中
  • 当为 chunk 重备份时
    • 时机:当可用的replicas数量低于用户预期时,有两种情况:某些replicas发生故障、用户预期提高
    • 制定优先级
      • 优先备份距离用户预期较大的replicas
      • 优先备份存活文件的replicas(而不是已被删除的)
      • 加速备份阻塞用户进程的chunk
    • 过程由master指定chunkserver来完成
    • 为防止clone流量超过client流量,master会限制集群和每个chunkserver的active clone操作次数,同时每个chunkserver会限制其用在clone操作上的带宽
  • master阶段性做replicas均衡
    • 检查当前replica的分布状态,将一些replica转移到条件更好的磁盘中来实现负载均衡,同时均衡磁盘利用率
4.3 Garbage Collection
  • 当一个文件被删除时,master立即完成日志记录
  • lazily delete,删除文件实际上是将文件重命名为一个隐藏文件,该文件包含一个删除时间戳,并不是立即释放资源。
  • master会定期扫描,删除“过期”的隐藏文件以及不可达的chunk,并删除相应的元素据和从命名空间中删除,同时chunkserver也会通过与master确认来删除master没有存储相应元数据的chunk。
  • 删除文件在“过期”前可以被恢复和读取
  • 定性为regular background activities,可以在master空闲时进行
  • Stale Replica Detection via a chunk version number

5. Fault tolerance

5.1 High Availability,高可用性
  • fast recovery:无论是什么原因导致终止,master和chunkserver都可以记录终止时状态并在若干秒内恢复
  • chunk repilcation:默认三副本策略,每个块在不同rack的chunkserver上部署副本
  • master replication:master的操作日志和checkpoints备份在多个机器上,一个修改时成功的当且仅当在所有包含master的备份信息都已记录该修改操作。同一时间只会有一个 master 起作用。当 master 失效时,外部的监控系统会detect到这一事件,并在其他包含备份信息的地方重新启动新的 master 进程。此外还提供只读功能的Shadow Master:它们会同步 master 的状态变更,但有可能会有所延迟,其主要用于为 master 分担读操作的压力。
5.2 Data Integrity,数据完整性
  • 每个chunkserver通过校验和来判断存储的数据是否发生损坏,每个chunk会以64KB为单位进行分割,每单位数据都有一个32比特的校验和,校验和存储在内存中同时通过日志来实现持久性。
  • 当client向primary请求一个chunk时,如果该chunk未通过校验,则chunkserver会返回一个错误并向master报告该错误,然后client会通过其他replicas获得该chunk,master也会指示chunkserver从其他replicas复制得到另一个replica,然后删除原来未通过校验的数据。
  • 对于追加方式的数据写入:new_checksum = old_checksum OP appended_partial_checksum;对于覆盖写入,chunkserver 必须读取并校验包含写入范围起始点和结束点的校验和块,然后进行写入,最后再重新计算校验和,否则可能覆盖写入前chunk已损坏的信息。
  • 在空闲时,chunkserver 会周期地扫描并校验不活跃的 chunk replica 的数据,以确保某些 chunk replica 即使在很少被读取的情况下,其数据的损坏依然能被检测到。

一些参考:Google File System 论文详析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1565262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot实现教师人事档案管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线商城系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本ONLY在线商城系统就是在这样的大环境下诞生,其可以帮助管理…

GD32F470 GY-906 MLX90614ESF BAA BCC DCI IR红外测温传感器模块温度采集模块移植

2.12 MLX90614红外无接触测温传感器 MLX90614 系列模块是一组通用的红外测温模块。在出厂前该模块已进行校验及线性化,具有非接触、体积小、精度高,成本低等优点。被测目标温度和环境温度能通过单通道输出,并有两种输出接口,适合于…

齐力控股集团现已加入2024年第13届生物发酵展

参展企业介绍 齐力控股集团专业生产高精度卫生级不锈钢设备配件及管道所有连接件、锻造、精加工一站式服务。产品广泛适用于制药、饮料、乳制品、啤酒、生物化工等领域。所有产品均按3A、SMS、DIN、RJT、IDF、DS等标准制造,所有产品均达到GMP药典要求。我们是一家有…

数字乡村创新之路:科技引领农村实现高质量发展

随着信息技术的快速发展,数字乡村建设已成为推动农村高质量发展的重要引擎。数字乡村通过科技创新,不仅改变了传统农业生产方式,也提升了乡村治理水平,为农民带来了更加便捷的生活。本文将从数字乡村的内涵、科技引领农村高质量发…

AAA Stylized Projectiles Vol1

28种具有命中和闪光效果的独特投射物:咒语、火球、箭、子弹、激光等等! 该资产包括: -28种独特的投射物(咒语、火球、箭头、子弹、激光等),与AAA魔术圈、盾牌和3D激光包风格相同 -27种独特的命中效果 -25个闪光效果 -96个纹理 -7个多用途粒子着色器 -演示场景拍摄脚本 -实…

2月白酒行业线上(京东天猫淘宝)电商数据分析:知名酒企全线飘红,同比增长120%!

2024年2月,白酒行业迎来了一波销售热潮。 从鲸参谋数据来看,在综合电商平台(京东天猫淘宝)白酒销售累计卖出约624万件,同比去年涨幅63%;销售额累计约49亿元,同比去年涨幅123%。白酒行业在整体酒…

JS继承与原型、原型链

在 JavaScript 中,继承是实现代码复用和构建对象关系的重要概念。本文将讨论原型链继承、构造函数继承以及组合继承等几种常见的继承方式,并提供相应的示例代码,并分析它们的特点、优缺点以及适用场景。 在开始讲解 JavaScript 的继承方式之…

VUE——概述

vue是前端框架&#xff0c;基于MVVM思想。 引入 从官网下载vue文件 <script src"js/vue.js"></script> 定义vue对象 new Vue({el: "#x",//vue接管区域&#xff0c;#表示选择器&#xff0c;x是id名字data: {message: "y"} })案例…

vue两个特性和什么是MVVM

一、什么是vue 1.构建用户界面 用vue往html页面中填充数据&#xff0c;非常的方便 2.框架 框架是一套线成的解决方案 vue的指令、组件&#xff08;是对ui结构的复用&#xff09;、路由、vuex 二、vue的特性 1.数据驱动视图 2.双向数据绑定 1.数据驱动视图 数据的变化会驱动…

MySQL 8.0.13安装配置教程

写个博客记录一下&#xff0c;省得下次换设备换系统还要到处翻教程&#xff0c;直接匹配自己常用的8.0.13版本 1.MySQL包解压到某个路径 2.将bin的路径加到系统环境变量Path下 3.在安装根目录下新建my.ini配置文件&#xff0c;并用编辑器写入如下数据 [mysqld] [client] port…

【漏洞复现】用友NC-Cloud系统queryRuleByDeptId存在SQL注入漏洞

“ 如棠安全的技术文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的…

世优科技上榜2024年度《中国虚拟数字人影响力指数报告》

日前&#xff0c;第三期《中国虚拟数字人影响力指数报告》在中国网络视听大会上正式发布。本期《报告》由中国传媒大学媒体融合与传播国家重点实验室&#xff08;以下简称“国重实验室”&#xff09;、中国传媒大学数字人研究院编制&#xff0c;中国网络视听协会、人民日报智慧…

目标检测——铁路工人数据集

一、重要性及意义 提升铁路工作安全性。铁路工人常常需要在铁路轨道附近进行各种作业&#xff0c;如维修、检查等&#xff0c;这些工作往往伴随着较高的安全风险。一个准确的铁路工人检测系统能够在第一时间识别并警示工人或操作员的接近&#xff0c;从而避免潜在的碰撞事故&a…

能源照明运作机制与智能调控技术实现途径

随着城市化进程的加速&#xff0c;智慧城市已成为现代城市发展的重要方向。能源照明作为城市基础设施的重要组成部分&#xff0c;其运作机制与智能调控技术的实现对于提高城市能源利用效率、促进可持续发展具有重要意义。 能源照明是一个涵盖广泛、错综复杂的领域&#xff0c;它…

C++ Primer 总结索引 | 第十二章:动态内存

1、到目前为止&#xff0c;我们编写的程序中 所使用的对象 都有着严格定义的生存期。全局对象 在程序启动时分配&#xff0c;在程序结束时 销毁。对于 局部自动对象&#xff0c;当我们进入 其定义所在的程序块时被创建&#xff0c;在 离开块时销毁。局部static对象 在第一次使用…

文心一言 VS 讯飞星火 VS chatgpt (227)-- 算法导论16.3 9题

九、证明&#xff1a;对于一个由随机生成的8位字符组成的文件&#xff0c;没有任何压缩方法可以望将其压缩、哪怕只是压缩一位。(提示&#xff1a;比较可能的文件数量和可能的编码文件数量。) 文心一言&#xff1a; 确实&#xff0c;对于一个由随机生成的8位字符组成的文件&a…

蓝桥杯相关算法学习(Python)

一、排序 排序算法是指将一组数据按照某种规则重新排列&#xff0c;使得数据呈现出递增或递减的顺序。常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。 1.冒泡排序 解释&#xff1a; 冒泡排序通过不断交换相邻两个元素的位置&#xff0c;使…

如何辨别蜂蜜的好坏?具体看哪些指标?

蜂蜜的好坏是通过检测指标反应出来的。 衡量蜂蜜质量的指标很多&#xff0c;主要分五类。 第一类是蜂蜜的基础性检测。如&#xff1a;感官、水分、灰分、酸度、蜂蜜的真实性&#xff08;SM-X&#xff09;等&#xff1b; 第二类是营养成分检测。如&#xff1a;果糖与葡萄糖含…

GC Roots

JVM垃圾回收的时候如何确定垃圾&#xff1f; 在说GC Roots之前&#xff0c;我们先看看JVM是如何确定垃圾的&#xff0c;从而进行回收 什么是垃圾 简单来说就是内存中已经不再被使用的空间就是垃圾 如何判断一个对象是否可以被回收 引用计数法 Java中&#xff0c;引用和对象…

node res.end返回json格式数据

使用 Node.js 内置 http 模块的createServer()方法创建一个新的HTTP服务器并返回json数据&#xff0c;代码如下&#xff1a; const http require(http);const hostname 127.0.0.1; const port 3000;const data [{ name: 测试1号, index: 0 },{ name: 测试2号, index: 1 },…