The Google File System 论文阅读

2003年USENIX,出自谷歌,开启分布式大数据时代的三篇论文之一

总体设计

假设

  1. 硬件损坏是常态,而非意外。例如磁盘损坏,断电,断网。所以持续的监控,错误诊断,错误恢复要纳入系统设计之中
  2. 文件很大,GB级别的文件很常见。如果又要兼顾大文件,又要兼顾小文件,就不太做得到了。因此设计假设和参数设置需要好好考虑
  3. 大部分文件是追加写的方式更新,覆盖写的情况不多。写了的文件通常也是大量顺序读,少量随机读。同一个客户端通常读连续区域
  4. 联合设计应用和文件系统的API能增加系统的灵活性
  5. 为了应对并发请求,例如同时追加一个文件,或者多路合并,原子性和最小的同步开销是必不可少的
  6. 高持续带宽比低延迟更重要

接口

目录结构树的设计,支持 create、delete、open、close、read、write

支持 snapshot 和 record append 操作。snapshot 复制一个文件或者目录。record append 允许多个客户端同时将数据追加到同一文件,同时保证每个客户端追加的原子性

2.3架构

在这里插入图片描述
整个 GFS 系统由一个 master、多个chunkserver 组成,可以供多个客户端链接。运行在 Linux 机器上,普通用户权限。

文件被分为固定大小的 chunk,每个 chunk 创建的时候,master会分配一个全局唯一的64bit标识,成为 chunk handle。每一个 chunk 都是 Linux 机器上的普通文件,存放在 chunkServer 上,并且默认有3个副本,保存在不同的 chunkServer 上。

master 节点保存所有的原信息,包括命名空间,访问权限控制,文件到 chunk 的映射表、chunk当前位置。控制系统级别的活动、例如 chunk租约管理、chunk跨节点迁移、垃圾chunk回收等。master节点周期性的和 chunkServer 进行心跳通信,既下达指令、又能收集chunkServer的状态。

客户端和 master 沟通元信息,存数据块的读写会直接和 chunkServer 通信。不管是客户端还是 chunkServer,都不进行任何缓存。

2.4 单master结构

单master使得设计简单、并且在 chunkServer 操作时候,知道全局信息。但也因此必须将 master 从读写任务中剥离出来,不然会成为瓶颈。客户端和 master 通讯,知道要和哪个 chunkServer 交换数据之后,直接和 chunkServer 交互后面的步骤。

客户端还有个工作,把文件名和应用程序指定的字节偏移量转换为一个文件内的块索引。然后,它向master发送一个包含有文件名和块索引的请求。之后客户端从最近的一个副本中读取。之后对相同块的读取就不再需要客户端和master的交互了,直到缓存信息过期或者文件被重新打开。

2.5 Chunk Size

64M的 chunk 大小,Linux 机器上的普通文件,惰性申请空间,避免内部碎片。

大chunk的几个好处:减少客户端和master的交互次数。客户端可以在一个大chunk上执行多种操作,客户端和chunkServer保持长连接节省网络开销。减少元数据的数据量。

大 chunk 的劣势是,小文件浪费存储空间,并且一个文件一个 chunk。如果访问同一个,可能造成热点。热点的一个潜在的长期解决方案是允许客户端在这种情况下从其他客户端读取数据。

2.6 Metadata

master存储了三种主要类型的元数据: 文件和块命名空间,文件到块的映射,以及每个块的副本的位置,但只是到 chunkServer,具体位置由 chunkServer 保存。

数据读取流程:
在这里插入图片描述
写入数据时,优先最近传输一份完整数据到 chunkServer,然后内网里面 chunkServer 之间传递,提高带宽利用率,提升整体吞吐。

对磁盘的不信任还体现在每一个大 chunk内区分为很多小区块,每个区块也有一个校验和。读取之前,chunkServer 会校验,确保不把错误的数据传播出去。如果发现自己错误了,也及时报告 master,好从别的地方拉取正确的数据过来。并且还会配合闲时扫描校验,把非活动块的情况也摸排清楚。

数据流和控制流分开
重视快速恢复,默认在非正常关闭的时候也要保存好当前状态,周期性保存

[1]: (https://zhuanlan.zhihu.com/p/522459187)[https://zhuanlan.zhihu.com/p/522459187] 翻译

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

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

相关文章

【文档智能 RAG】RAG增强之路-智能文档解析关键技术难点及PDF解析工具PDFlux

前言 在私域知识问答和企业知识工程领域,结合Retrieval-Augmented Generation(RAG)模型和大型语言模型(LLM)已成为主流方法。然而,企业中存在着大量的PDF文件,PDF解析的低准确性显著影响了基于…

open-amv开发环境搭建

open-amv是基于rv1103主控芯片的视觉开发板子 1.板子使用 板子使用type c作为调试口,同时供电,请在电脑上下载adb,当板子通过tpye c与电脑连接后,执行命令adb shell就会进入到板子的linux系统命令行。 2.编译环境 2.1 搭建doc…

ipad协议已更新

mmtls 24算法,by golang 其他/v1/other POST/v1/other/GetPeopleNearby 查看附近的人 POST/v1/other/GetQrCode 获取二维码 同步消息/v1/ws GET/v1/ws/GetSyncMsg 同步消息,ws协议 消息/v1/message POST/v1/message/AddMessageMgr 添加要发送…

什么是无杂散动态范围 (SFDR)?为什么 SFDR 很重要?

有多种不同的规格可用于表征电路线性度。SFDR 指标是一种常用的规范。该指标定义为所需信号幅度与感兴趣带宽内杂散的比率(图 1)。 图 1. 显示 SFDR 指标的图表。 对于 ADC,SFDR 展示了 ADC 如何在存在大信号的情况下同时处理小信号。作为一个…

如何阅读?从阅读中学阅读—《海绵阅读法》

大家好,我是老三,最近读了《海绵阅读法:如何吸收一本书的精华》,第一次阅读教如何阅读的书,整理一番读书笔记,分享给大家。 读书动机 我前一阵子写了篇文章,2024Q1,盘点我看过的54本…

[Java基本语法] 逻辑控制与方法

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀线程与…

一键解锁创意无界:高效AI生成古典肖像图片,轻松打造艺术化身

在数字化时代,创意与艺术的结合正逐渐改变我们的生活。你是否曾梦想过拥有一幅专属于自己的古典肖像画,却又苦于找不到合适的画师或高昂的费用而望而却步?现在,这一切都将成为现实! 进入首助编辑高手的AI魔法智绘图板块…

你能不能手敲出Spring框架?

Spring最成功的地方在于创始人Rod Johnson提出的IOC、AOP核心理念,反而不是其本身的技术。技术上今天可以有Spring春天,明天就可以有Autumn秋天。 核心理念有多重要?就如1871年巴黎公社的失败。公社在对抗法国zf和普鲁士占领军的背景下成立&…

英伟达开源 3400 亿巨兽:98% 合成数据训出最强开源通用模型,性能对标 GPT-4o

NVIDIA 最近开源了其大型语言模型 Nemotron-4 340B,这是一个具有划时代意义的模型,它使用了高达 98% 的合成数据进行训练,并且在性能上与 GPT-4 相当。Nemotron-4 340B 包括基础模型、指令模型和奖励模型,支持 4K 上下文窗口、50 …

回答网友的一个Delphi问题

网友想在grid 中 加一个水印,俺就给他写了个例子。先靠效果: 这个例子 包含下面几步: 1、创建背景 dg_bmp:Tbitmap.Create; w: Image1.Picture.Bitmap.width; h: Image1.Picture.Bitmap.height; dg_bmp.width: w*2; dg_bmp.height: …

从入门到高手的99个python案例(2)

51. 列表和数组比较 - 列表通用,NumPy数组高效。 import numpy as np normal_list [1, 2, 3] np_array np.array([1, 2, 3]) print(np_array.shape) # 输出 (3,), 数组有形状信息 52. Python的内置模块datetime - 处理日期和时间。 from datetime import…

数据库MySQL——从0到1入门教程

Q:为什么需要MySQL? A:网络服务中,我们需要存储、管理大量的数据,并确保数据的安全、实现增删改查操作的高效,因此需要一个系统用来专门管理数据,以实现上述的高性能要求,数据库管理系统应需而生 八股如下…

自动化数据驱动?最全接口自动化测试yaml数据驱动实战

前言 我们在做自动化测试的时候,通常会把配置信息和测试数据存储到特定的文件中,以实现数据和脚本的分离,从而提高代码的易读性和可维护性,便于后期优化。 而配置文件的形式更是多种多样,比如:ini、yaml、…

pdf structuredClone is not defined 解决

问题 部分手机系统的浏览器 pdf v2版本会出现 structuredclone is not defined 的报错,这是因为浏览器过低 解决 查看structuredClone的浏览器兼容性 structuredClone api 文档 polyfill 网站下方有个 polyfill的网址入口 可以解决低版本的兼容问题 相应网址…

笨蛋学算法之LeetCodeHot100_3_最长连续序列(Java)

package com.lsy.leetcodehot100;import java.util.Arrays; import java.util.HashSet; import java.util.Set;public class _Hot3_最长连续序列 {public static int longestConsecutive(int[] nums) {//创建set去重//对重复的数字进行去重Set<Integer> set new HashSet…

融合心血管系统(CVS)多视角信号的新架构新策略

随着深度学习的发展和传感器的广泛采用&#xff0c;自动多视角融合&#xff08;MVF&#xff09;在心血管系统&#xff08;CVS&#xff09;信号处理方面取得了进展。然而&#xff0c;普遍的MVF模型架构通常将同一时间步骤但不同视角的CVS信号混合成统一的表示形式&#xff0c;忽…

redis的四种模式部署应用

这里写目录标题 redis应用redis单机部署redis主从redis哨兵Cluster模式 redis应用 redis单机部署 关闭防火墙[rootzyq ~]#: yum -y install wget make gcc gcc-c ...... [rootzyq ~]#: wget https://download.redis.io/redis-stable.tar.gz --2024-01-01 19:41:14-- https:/…

TypeScript 进阶,深入理解并运用索引访问类型提升代码质量

欢迎回来继续我们的“TypeScript进阶技巧”系列。上次我们深入探讨了如何使用Extract和Exclude实用类型来优化TypeScript的类型处理&#xff08; 《如何利用 TypeScript 的 Extract 提升类型定义与代码清晰度》和 《如何利用 TypeScript 的 Exclude 提升状态管理与代码健壮性》…

论文阅读笔记:Cross-Image Relational Knowledge Distillation for Semantic Segmentation

论文阅读笔记&#xff1a;Cross-Image Relational Knowledge Distillation for Semantic Segmentation 1 背景2 创新点3 方法4 模块4.1 预备知识4.2 跨图像关系知识蒸馏4.3 Memory-based像素到像素蒸馏4.4 Memory-based像素到区域蒸馏4.5 整体框架 5 效果 论文&#xff1a;http…

Redis和Docker

Redis 和 Docker 是两种不同的技术&#xff0c;它们各自解决不同的问题&#xff0c;但有时会一起使用以提供更高效和灵活的解决方案。 Redis 是一个开源的内存数据结构存储系统&#xff0c;可以用作数据库、缓存和消息代理。它设计为解决MySQL等关系型数据库在处理大量读写访问…