GFS系统架构

news2024/11/15 8:18:36

GFS系统架构

针对上述观察,我们发现它们与早期文件系统的设计假设存在显著差异。为此,我们采取了以下解决方案:

  • 组件故障:我们接受故障为常态,系统设计以自我监控和快速恢复为原则,适应低成本硬件环境下的持续运行。
  • 文件规模:主要是文件大小超100MB。小文件兼容,不做优先。
  • 数据修改:倾向于追加而非覆盖,优化大规模顺序写入,随机写入仅有效支持。
  • API协同设计:应用程序与文件系统API的深度整合,提升了系统灵活性。我们重视持续高带宽,满足大规模数据处理需求,而非单一操作的低延迟。优先支持高吞吐优而非低延时。

GFS采用了一个Master节点和多个chunkserver节点的构成,Master节点负责维护整个文件系统的元数据,而实际的文件数据则以chunk为单位(块的大小固定不变,64字节)分散存储在各个chunkserver节点上(默认情况下,我们存储3个副本)。每个chunk都拥有一个独一无二的句柄(handle),这使得它们能够被Master节点准确识别。

The master maintains all file system metadata. This includes the namespace, access control information, the mapping from files to chunks, and the current locations of chunks. It also controls system-wide activities such as chunk lease management, garbage collection of orphaned chunks, and chunk migration between chunkservers. The master periodically communicates with each chunkserver in HeartBeat messages to give it instructions and collect its state.

Master节点负责维护所有的文件系统元数据,包括命名空间、访问控制信息、文件到数据块的映射以及数据块的当前存储位置。此外,它还控制系统级别的活动,如数据块租约管理、孤立数据块的垃圾回收和数据块在服务器之间的迁移。主节点会定期通过心跳消息与每个数据块服务器通信,以下达指令并收集状态信息。

客户端与文件数据的交互并不是直接通过Master节点进行的。相反,它采取了一种更为智能和间接的方式:客户端首先向Master节点发起询问,以获取需要联系的chunkserver节点信息。Master节点根据当前的文件系统状态和chunk分布情况,向客户端指明哪些chunkserver节点持有所需的数据块。

GFS的读取操作流程极为简洁:

  1. 客户端请求:客户端向Master节点发送请求,提供所需文件的名称和数据的偏移量。

  2. Master响应Master节点根据请求,回复客户端chunk的句柄和包含目标chunkchunkserver地址列表。客户端将这一结果缓存,以备后续使用。

  3. 客户端发起读取:客户端根据Master提供的信息,选择最近的chunkserver发起读取请求。

  4. chunkserver响应:被请求的chunkserver将请求的数据发送回客户端。

GFSchunk size设定为64MB,这一尺寸显著超越了传统文件系统的block size。这种设计选择带来了以下益处:首先,它减少了客户端与Master节点交互的需要。其次,它可以降低网络开销。第三,它减少了存储在Master节点上的元数据大小。

  1. First, it reduces clients’ need to interact with the master.
  2. Second, it can reduce network overhead.
  3. Third, it reduces the size of the metadata stored on the master.

Master节点负责维护三种关键类型的元数据,它们构成了GFS架构的核心:

  1. 文件和块的命名空间Master节点存储了文件系统的命名空间信息,这包括所有文件和目录的层次结构和名称。
  2. 文件到块的映射Master节点管理着从文件到存储块的映射关系,确保每个文件的数据能够被准确地定位到对应的chunk
  3. 块副本的位置信息Master节点还记录了每个chunk的副本位置信息,这涉及到数据的冗余存储和分布式部署,以确保数据的高可用性和容错性。

The first two types (namespaces and file-to-chunk mapping) are also kept persistent by logging mutations to an operation log stored on the master’s local disk and replicated on remote machines.

GFS中,命名空间和文件到chunk的映射这两种元数据是至关重要的,它们会被持久化存储到磁盘。任何对这些元数据的修改都会被详细记录在操作日志中,确保了数据变更的持久性和可审计性。

与此相反,chunk副本的位置信息则不会持久化存储。当Master节点启动或有新的chunkserver节点加入集群时,Master节点会主动与chunkserver节点通信,动态获取这些信息。

Master节点通过定期与chunkserver节点的心跳检测来获取chunk的位置信息,而不是将这些信息持久化存储。这种设计选择背后的原因是:

A chunkserver has the final word over what chunks it does or does not have on its own disks.

  • 复杂性管理:如果选择持久化chunk位置信息,Master节点就需要不断同步与chunkserver节点之间的数据,以保持一致性。这在chunkserver节点频繁进行扩缩容、故障转移(failover)、重命名等操作时,会变得相当复杂。

  • 权威性来源chunkserver节点直接管理着存储在本地的chunk,因此它们拥有关于chunk位置和状态的最终话语权。例如,在chunk损坏或出现其他问题时,只有chunkserver节点能够提供最准确和及时的信息。

Not only is it the only persistent record of metadata, but it also serves as a logical timeline that defines the order of concurrent operations.

operation log不仅元数据的唯一持久记录,还充当了一个逻辑时钟,为系统内发生的事件提供了一个统一的时间戳序。

  • 一致性:当一个文件区域被修改后,如果所有客户端无论访问哪个副本(replica)都能看到相同的状态,这个区域就被认为是一致的。

  • 确定性:如果客户端不仅能看到一致的状态,还知道修改后的具体内容,那么这个状态就被称为确定的。

GFS has a relaxed consistency model that supports our highly distributed applications well but remains relatively simple and efficient to implement.

GFS对于一致性实现比较宽松,GFS通过以下机制确保文件区域在多次成功修改后保持确定性:

  1. 修改顺序:所有副本按照相同的顺序应用修改,确保了全局的一致性。

  2. 版本控制:使用chunk版本号来识别哪些副本已经过时,这些过时的副本将不会参与后续的读写操作,并最终被垃圾回收机制清除。

尽管存在一个小的时间窗口,客户端的缓存可能使其读取到过时的数据,但这种情况很少发生,因为:

  • 缓存更新:客户端通常会在缓存过期前与Master节点通信,以获取最新的chunk位置信息。

  • 副本恢复Master节点会在副本损坏或过时后迅速恢复新的副本,除非在极短的时间内所有副本都损坏了。即使在这种情况下,数据也只是丢失而不是被错误地写入,应用程序可以接收到确定的异常信号,而不是错误的数据。

本章节详细描述了GFS的架构,包括主服务器和块服务器如何协同工作以及元数据管理。

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

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

相关文章

基础算法--递推算法[信奥一本通]

本节所讲题源自【信奥一本通】C版:基础算法-第三章-递推算法 相信大家应该都接触过数列的概念。哎哟,一直在跟数组打交道,说数列感觉好陌生,哈哈。数列中的迭代法大家都还记得吗:通过反复应用特定规则,推导…

Linux系统中的Btrfs技术

在Linux操作系统中,文件系统扮演着至关重要的角色,负责管理数据存储、文件访问以及系统的稳定性。其中,Btrfs(B-tree file system)作为一种先进的文件系统技术,正在逐渐引起广泛关注和应用。本文将深入探讨…

【算法】深入浅出聚类算法:原理、应用与Java实现

一、引言 在数据分析和机器学习中,聚类算法是一种无监督学习技术,用于将数据集中的对象自动划分为多个子集,每个子集称为一个簇。聚类算法在多个领域有着广泛的应用,如图像处理、信息检索、市场细分、生物信息学等。本文将介绍聚…

匿名函数详解

lambda表达式&#xff1a; [](){} []捕获列表 () 函数的参数列表 {}函数的函数体 #include<iostream> #include<string> using std::cout; using std::endl; using std::string; void func() {cout << "hello func" << endl; }void tes…

【系统分析师】-WEB开发技术

目录 1、负载均衡技术 1.1、应用层负载均衡 1.2、传输层负载均衡 2、有状态和无状态问题 3、CDN内容分发网络 4、持久化技术 1、负载均衡技术 1.1、应用层负载均衡 1&#xff09;http 重定向 HTTP 重定向就是应用层的请求转发。用户的请求其实已经到了HTTP重定向负载均…

深度学习--负采样技术及其扩展详解

负采样技术及其扩展详解 负采样&#xff08;Negative Sampling&#xff09;是一种常用于自然语言处理和推荐系统中的技术&#xff0c;主要目的是优化模型的训练效率和效果。负采样技术的典型应用场景包括词向量训练&#xff08;如Word2Vec&#xff09;、推荐系统中的隐语义模型…

使用 Nuxt 的 showError 显示全屏错误页面

title: 使用 Nuxt 的 showError 显示全屏错误页面 date: 2024/8/26 updated: 2024/8/26 author: cmdragon excerpt: 摘要:本文介绍Nuxt.js中的showError方法用于显示全屏错误页面,包括其参数类型及使用方式,并演示了如何在页面中捕获并展示错误,还介绍了useError用于管理…

MySQL笔记-对mysql.sock.lock认识(2024-06-12)

此篇博文记录到个人笔记的时间为2024-06-12。 背景 每次服务器非正常关机&#xff0c;或者制作的docker镜像有问题时或没手动停mysql时&#xff0c;运行 mysqld --userroot 时&#xff0c;mysql总会启动失败&#xff0c;查看/var/log/mysqld.log时会有如下报错信息&#xff…

你的软件系统安全吗

如果你的软件系统可以通过网络访问, 可以由多人操作, 可以访问或操作敏感数据, 或者可能暴露隐私, 等等, 请一定要保护你的系统. 那么你的软件系统安全吗? 一. 先问自己如下 4 个问题 1. What are we working on? 我们的系统在干啥? 例如电商系统: 我们在卖啥?提供什么售前…

【变化检测】基于Tinycd建筑物(LEVIR-CD)变化检测实战及ONNX推理

主要内容如下&#xff1a; 1、LEVIR-CD数据集介绍及下载 2、运行环境安装 3、Tinycd模型训练与预测 4、Onnx运行及可视化 运行环境&#xff1a;Python3.8&#xff0c;torch1.12.0cu113 likyoo变化检测源码&#xff1a;https://github.com/likyoo/open-cd 使用情况&#xff1a…

在vue2中,使用计算属性,具体代码如下:

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

爆改YOLOv8 | 利用CPA-Enhancer提高低照度物体检测(适用于雨,雪,雾天)

1&#xff0c;本文介绍 CPA-Enhancer通过链式思考提示机制实现了对未知退化条件下图像的自适应增强&#xff0c;显著提升了物体检测性能。其插件式设计便于集成到现有检测框架中&#xff0c;并在物体检测及其他视觉任务中设立了新的性能标准&#xff0c;展现了广泛的应用潜力。…

打包资料优化目录

这篇文章主要写一下这一次更新的几个地方&#xff0c;有对原来的代码及模型进行优化的部分&#xff0c;也有新增加的代码和模型&#xff0c;我就把几个比较典型的给列了出来。但是还有好多的更新没有在下面展示出来&#xff0c;因为一个个展示出来太复杂了。如果你对更新的内容…

mybatis框架搭建、mybatis打印日志设置、参数传递使用、myatis插件MyBatisX

一、框架 就是对技术的封装&#xff0c;将基础的技术进行封装&#xff0c;让程序员可以快速的使用&#xff0c;提高效率。 Java后端框架&#xff1a; mybatis&#xff1a;对jdbc进行封装 spring&#xff1a;对整个Java后端架构进行管理的 springweb&#xff1a;对web层&a…

用Python解决优化问题_整数规划模板

整数规划的基本概念 整数规划是一种数学优化方法&#xff0c;它是线性规划的一个扩展。在整数规划中&#xff0c;决策变量被限制为整数&#xff0c;而不是连续的值。这种类型的规划在许多实际应用中非常重要&#xff0c;例如资源分配、生产计划、物流配送等。整数规划可以分为…

R7RS标准之重要特性及用法实例(三十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

【数据库】深入浅出MySQL SQL优化:原因、定位、分析与索引失效

这是一张AI生成关于MySQL SQL优化的插图。图中展示了一个计算机屏幕&#xff0c;上面可以看到MySQL数据库模式。屏幕周围有代表优化的视觉隐喻&#xff0c;如齿轮、闪电和流线型形状。屏幕上的模式用色彩丰富的注释标出了改进区域&#xff0c;如索引和查询调整。整体风格现代且…

【源码+文档+调试讲解】数据结构课程网络学习平台

摘要 本文介绍了数据结构课程网络学习平台的开发全过程。通过分析企业对于数据结构课程网络学习平台的需求&#xff0c;创建了一个计算机管理数据结构课程网络学习平台的方案。文章介绍了数据结构课程网络学习平台的系统分析部分&#xff0c;包括可行性分析等&#xff0c;系统设…

Python处理JSON

Python处理JSON ####概念 序列化&#xff08;Serialization&#xff09;&#xff1a;将对象的状态信息转换为可以存储或可以通过网络传输的过程&#xff0c;传输的格式可以是JSON、XML等。反序列化就是从存储区域&#xff08;JSON&#xff0c;XML&#xff09;读取反序列化对象…

优化学习管理:Moodle和ONLYOFFICE文档编辑器的完美结合

目录 前言 一、什么是 Moodle 1、简单快速插入表单字段 3、免费表单模板库 4、开启无缝协作 三、在Moodle中集成ONLYOFFICE文档 四、在Moodle安装使用ONLYOFFICE 1、下载安装 2、配置服务器 3、在Moodle中使用ONLYOFFICE 文档活动 五、未来展望 写在最后 前言 在当今教育科技飞…