【Google三驾马车系列】GFS原理总结

news/2024/5/20 15:12:13/文章来源:https://blog.csdn.net/Tong_jy/article/details/127298400

这里写自定义目录标题

  • GFS基本框架
  • 容错机制
    • Master 的容错机制 :操作日志 + Checkpoint + ShadowMaster
    • ChunkServer的容错机制:复制多个副本 + checksum
  • 一致性问题
    • 元数据的一致性
    • Chunk的强一致性
  • 其它重要的技术点总结
    • 如何避免单一master的性能瓶颈
    • 垃圾延迟删除机制和孤儿Chunk的回收机制
    • 快照机制
    • 旧版本侦测
    • chunk副本被创建的三种情况
    • Master的多个操作如何避免冲突
  • HDFS VS GFS

GFS基本框架

一个GFS集群包含单个master和多个chunkserver。GFS文件以若干个大小为64MB的chunk存储在chunkserver磁盘上。当客户端请求访问该文件时,首先向Master请求相关chunk所在的chunkserver地址和chunk句柄,使用句柄找到(通常是最近的)chunkserver完成数据访问工作。
在这里插入图片描述

在GFS的框架中,master需要维护所有文件系统元数据,包括文件和chunk的命名空间、文件到chunk的映射、chunk的位置,而且都保存在内存中。其中前两种还会进行持久化保存,存储在master本地磁盘并且拷贝到远程机器。chunk的位置会在master启动时或者周期性向所有chunkserver获取并更新。此外,master还需要负责chunk租赁管理、孤儿chunk的垃圾回收、chunkserver之间的chunk迁移等工作,具体的下面会详细介绍。

容错机制

Master 的容错机制 :操作日志 + Checkpoint + ShadowMaster

Master每次更新元数据前都需要先写操作日志(WAL),持久化到本地磁盘并拷贝到多个副本成功后,才启动真正的写操作。

为了避免日志过大而引发启动缓慢问题,Master会定期进行日志回收,原理是将当前内存状态冻结并持久化存储到磁盘上,称为Checkpoint。然后,回收该时刻之前的所有日志。若系统此时重启,只需要将Checkpoint加载入内存后.重放Checkpoint点之后的日志即可在内存中重构最新状态。

设置shadow master,持续地读取某个master副本的操作日志,并重放到自己内存,保持与master一致;在master宕机是可以提供可读访问。

ChunkServer的容错机制:复制多个副本 + checksum

为了确保可靠性,每个chunk在多个chunkserver上创建副本(默认三份)。

每个chunk被分为多个64KB的块,每个块对应一个32位的checksum,保存在内存中。读取块副本时,ChunkServer会将读取的数据与校验和进行比较,如果不匹配就会向客户端返回错误。客户端将向其他副本重试读请求,而master则会尽快从其他副本克隆数据创建新的chunk;当新克隆的副本准备就绪,Master命令发生错误的chunkserver删除异常副本,保证了集群的数据完整性。

一致性问题

所有客户端从任何副本上读到的数据都是相同的(consistency)。

元数据的一致性

元数据只会由master统一进行修改,不涉及分布式,所以只需要使用锁机制隔离各个并发的操作,依次执行保证一致性。

Chunk的强一致性

使用租赁机制维护跨副本的一致性写顺序。首先,master在chunk各副本中选择一个Primary,授予租赁权,负责为chunk的所有写操作制定顺序(串行化),所有副本在实施写操作时都必须遵循此顺序。具体的流程描述如下:

  • (1,2)客户端向Master获取持有租赁权的chunkserver及其副本的位置信息;客户端缓存这些数据以便后续的操作。只有在Primary不可用,或者Primary回复信息表明它已不再持有租赁权时,客户端才需要重新跟 Master 节点联系。
  • (3)客户端将数据推送给所有副本。任何一个chunkserver收到数据后就立刻推送给最近的未收到数据的chunkserver,最大化每个机器的网络带宽。
  • (4)确认各副本的数据就位后,发送写请求到Primary。 如果此时有多个客户端向其发送写请求,Primary会为每个请求分配唯一的递增序号。
  • (5,6)Primary将写请求推送到所有Secondary副本,请求中已带有分配的序号。每个Secondary副本都会严格按顺序依次实施写操作。完成后“通知”Primary。
  • (7)所有副本都完成后,由Primary回复给客户端。任何副本遭遇的任何错误,都会被传递给客户端,客户端会认为该请求失败,重新尝试步骤3-7,实在不行就重试整个流程。

在这里插入图片描述

其它重要的技术点总结

如何避免单一master的性能瓶颈

  • 客户端只会询问master自己应该访问哪个chunkserver,且客户端会缓存该信息(以GFS文件名和chunk序号作为key)直至过期,减少对master的访问;
  • 客户端通常会在一个与master的请求中顺带多索要些其他chunk的信息,且master也可能将客户端索要的chunk后面紧跟的其他chunk信息主动回复回去,避免未来可能发生的client-master交互。
  • chunk大小设置为64MB,在尽可能减少客户端与master交互的同时,允许master在内存中缓存元数据。但是隐患是可能导致热点chunk所在的chunkserver负载过大而瘫痪,可以通过调整它的复制级别解决,多复制几份拷贝分担压力。

垃圾延迟删除机制和孤儿Chunk的回收机制

当一个文件被删除时,master不会立刻回收资源,只是将文件重命名为一个带删除时间戳的名字。在master对文件系统命名空间执行常规扫描时,才删除超过3天的隐藏文件。此时该文件在内存中的元数据才会被清除。

此外,对于孤儿chunk的回收的实现,chunkserver会在与master的心跳消息交换中报告其chunk子集,master会识别出元数据中没有的chunk并回复给chunkserver,由chunkserver执行删除操作。

快照机制

快照机制能够快速地为一个文件或整个目录树创建一个副本,主要通过使用写时拷贝技术实现。具体地说,

  • master收到快照请求后会立马撤回相关文件对应的chunk副本上的租赁权。
  • 撤回租赁后在内存状态快速复制源文件和源目录树的元数据,并将复制得到的元数据映射到相同的chunk上。
  • 在下一次客户端需要写入该chunk©时,会向Master请求租赁权持有者,master检查该chunk的引用计数,如果大于1,会新建chunk句柄C’,然后要求所有包含chunk©的副本的chunkserver都为C’创建一份新副本。
  • 创建完成后master才会回复客户端。

旧版本侦测

每当master授予一个新的租赁给某个chunk,都会增长chunk版本号并通知各副本。如果某个副本当前不可用,它的chunk版本号不会被更新。chunkserver向master汇报时master能够检测到旧副本的存在,旧副本会在垃圾回收的时候被删除。

chunk副本被创建的三种情况

chunk创建、restore(chunk的副本数量未达到复制级别,需要补充新副本)、重(chong)负载均衡(对必要的副本进行迁移来达到更均衡的磁盘利用率和负载,如新加入chunkserver时)。

Master的多个操作如何避免冲突

如快照和创建新文件。使用命名空间的区域锁机制。命名空间可以理解为是完整的路径名到元数据的映射查找表。每个操作都会为其涉及的节点申请读锁或着写锁,如果两个操作发生锁冲突就会串行执行。为了避免死锁发生,操作必须按特定的顺序申请锁:首先按照命名空间树的层级排序,在相同层级再按字典序。

HDFS VS GFS

简单的说,HDFS是以GFS为基础的工程实现,主要有三方面的区别:

  • 【写入模型】GFS 允许同一时刻多个客户端并发写入或追加同一文件;HDFS同一个文件同一个时刻只允许一个客户端写入或追加。相应的,HDFS不需要使用租赁机制来控制并发写操作的执行顺序。
  • 【快照】HDFS不支持快照功能,只是运用最基础的复制。
  • 【垃圾回收】GFS采用惰性回收策略,而HDFS采用的是直接删除的方式。惰性回收提供应用程序错误操作的回滚机会,且资源的回收在Master空闲时完成,能提升GFS的性能。但延迟回收可能会占用很大的存储空间。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Keithley吉时利2182A/Keysight是德34420A纳伏表测量软件-纳伏表软件

1、软件概述 纳伏表程控软件用于需要更高精度的电压测量和温度测量的应用,操作简便、绘制测量波形图直观。 2、软件功能 ◆纳伏表程控软件可以满足GPIB、RS-232两种连接方式。 ◆纳伏表程控软件可以满足CH1、CH2两通道选择。 ◆纳伏表程控软件可以满足多量程及分辨率…

(附源码)计算机毕业设计ssm河南美丽乡村旅游信息网

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

支付模块-微信支付

目录 接口实现 第一步:当点击立即购买生成订单 第二步:根据订单id查询订单信息 第三步:生成微信支付的二维码 第四步:查询订单支付状态 前端实现 ​编辑 1.点击支付 2.订单详情页 接口实现 像这种微服务B2C模式的&#…

【牛客刷题】每日一练——最小K个数

✨hello,进来的小伙伴们,你们好耶!✨ 🍅🍅系列专栏:【牛客刷题】 ✈️✈️本篇内容: 最小K个数! ⛵⛵作者简介:一名双非本科大三在读的科班Java编程小白,道阻且长,你我同…

《漂浮城堡历险记》的云端之旅

《漂浮城堡历险记》是 The Sandbox 游戏制作基金支持的项目之一。让我们告诉你更多关于这个 The Sandbox 元宇宙独有的、令人上瘾的奇幻游戏的信息吧。它已在 The Sandbox Alpha 第 3 季中上线了! 关于体验 在《漂浮城堡历险记》这个冒险战斗游戏中,玩家…

基于深度学习的机载激光扫描森林单株茎的检测、分割与模型拟合

Abstract 精确测量树木的结构特征,如高度、直径、宽度和锥度,是森林资源调查的重要组成部分。目前,地面和空中激光雷达都被用来产生点云数据,通过这些数据可以确定清单指标。陆地/地面扫描通常提供每平方米数千个点的点云分辨率&…

(附源码)计算机毕业设计ssm核酸结果查询系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【 java 多线程】同步锁 (Lock) 解决线程的安全问题

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

计算机网络课程设计——中小型网络工程设计

文件地址:https://github.com/Recursiondzl/Computer-Network 摘 要:本次计算机网络实践,完成了中小型网络工程设计与实现对计算机网络知识进行了系统的复习,实践能力获得了巨大的提升。 中小型网络工程设计与实现中,使用路由器…

DDD初步简单理解

概述 最近有一个项目要使用DDD模式来写,大致整理一下笔记。 问题:为什么要使用DDD?大概要怎么使用DDD? 目录 概述 MVC和DDD比较 实例介绍 简洁代码逻辑示例 总结 MVC和DDD比较 MVC(module,view&#xff0c…

最适合跑步用的耳机有哪些、精选五款最优秀的跑步耳机推荐

越来越多的人选择在运动的时候佩戴蓝牙耳机,身为健身教练,也有很多人会让我们推荐蓝牙耳机,那么现在到底市面上哪些机型是最适合跑步的时候用的呢?我趁着最近有空搜集了一些资料跟我使用过的经验,给大家整理了一份最值…

揭秘EVM Opcodes

1. 引言 本文主要源自Macro团队的Gilbert在ETHNewYork 2022分享 Demystifying EVM Opcodes,同时结合evm.codes来理解。 学习EVM Opcodes,可成为更好的Solidity工程师。 更好的Solidity工程师,意味着: 1)理解Solidity…

【新手向】Rock5B官方Debian系统设置中文环境(简单设置)和远程桌面连接

一、环境与说明 Rock5B的系统:官方Debian11(2022-10-01版本) 前面的两篇文章都是在2022-09-19版本镜像中操作的,2022-10-01版本内置了中文字体,不要自己下载了。目前Rock5B的硬件版本是v1.42,大概在23年初…

一致性哈希原理

一致性哈希原理 分布式系统将数据分布到不同的节点来存储,比如一个分布式KV(key-value)缓存系统,某个key应该到哪个节点上获得,最直观的方法是使用哈希算法(hash(key)%n),对key进行…

python--绘制WRF模式近地面风场以及辐射

使用python自动化绘制WRF模式输出的风场以及辐射 本脚本主要用来自动化处理WRF模式数据,可以根据自己指定的时间范围以及时间步长绘制相应的数据 1 导入库 import cmaps import numpy as np import glob from netCDF4 import Dataset import matplotlib.pyplot a…

【C++】从零开始的CS:GO逆向分析3——写出一个透视

【C++】从零开始的CS:GO逆向分析3——写出一个透视本篇内容包括:1. 透视实现的方法介绍2. 通过进程名获取进程id和进程句柄3. 通过进程id获取进程中的模块信息(模块大小,模块地址,模块句柄)4. 读取游戏内存(人物ViewMatrix,敌人坐标,敌人生命值,敌人阵营)5. 三维坐标…

Java项目本地部署搭建实战SpringBoot高校宿舍管理系统源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套Java开发的SpringBoot高校宿舍管理系统源码。 技术架构 技术框架:SpringBoot2.0.0 Mybatis1.3.2 Mysql5.7 layui运行环境:jdk8 IntelliJ IDEA maven3 宝塔面板 …

触摸屏分类和触摸屏校准原理

一、触摸屏分类 常用触摸屏分两种 1、电阻触摸屏校正原理:导电ITO层及整个电路电阻值会随时间电压等轻微偏移,为了更精确与LCD显示屏上的功能图案相对应,重新校正计算标准位置。不校正可能会线性偏移,好的触摸屏一般无需校正&am…

【面经】360大数据开发面经

30 分钟,不做题。 欢迎点击此处关注公众号,每天分享大数据开发面经 介绍实习项目 会涉及平台开发吗 平时常用的语言 回答了 Java。 Python 用过吗 Java 实现一个单例要注意什么 懒汉式: public class Singleton {private static Sing…

钢铁行业经销商商城系统:完善钢材管控方案,轻松实现控价和防伪

钢铁工业是全球经济发展的核心,也是现代社会可持续发展的核心。根据数据显示,2020年中国钢材产量为13.25亿吨,同比增长9.96%;生铁产量为8.88亿吨,同比增长9.77%;粗钢产量为10.53亿吨,同比增长5.72%。 图片来源&#xf…