GFS分布式文件系统

GFS文件系统,一个面向大规模数据密集型应用的、可伸缩的分布式文件系统,运行在廉价的普遍硬件设备上,提供灾难冗余的能力,为大量客户机提供了高性能的服务。

GFS特点

  • 灾难冗余
    GFS组件的数量和质量导致在事实上,任何给定时间内都有可能发生某些组件无法工作,某些组件无法从它们目前的失效状态中恢复,因此GFS中集成了持续的监控、错误侦测、灾难冗余以及自动恢复的机制。
  • 存储大规模数据
    系统存储一定数量的大文件,数GB的文件非常普通,每个文件通常都包含许多应用程序对象,比如web文档。
  • 尾部追加数据
    绝大部分文件的修改是采用在文件尾部追加数据,而不是覆盖原有数据的方式。对文件的随机写入操作在实际中几乎不存在。
  • 支持多个客户端
    实现多客户端并行追加数据到同一个文件里。我们的文件通常被用于”生产者-消费者“队列,或者其它多路文件合并操作。通常会有数百个生产者,每个生产者进程运行在一台机器上,同时对一个文件进行追加操作。
  • 高性能
    程序绝大部分能够高速率的、大批量的处理数据,极少有程序对单一的读写操作有严格的响应时间要求。

GFS架构

在这里插入图片描述

读取流程

首先,客户端把文件名和程序指定的字节偏移,根据固定的Chunk大小,转换成文件的Chunk索引。然后,它把文件名和Chunk索引发送给Master节点。Master节点将相应的Chunk标识和副本的位置信息发还给客户端。客户端用文件名和Chunk索引作为key缓存这些信息。 之后客户端发送请求到其中的一个副本处,一般会选择最近的。请求信息包含了Chunk的标识和字节范围。在对这个Chunk的后续读取操作中,客户端不必再和Master节点通讯了,除非缓存的元数据信息过期或者文件被重新打开。

  • 单一Master节点
    采用单一的Master单一的Master节点可以通过全局的信息精确定位Chunk的位置以及进行复制决策。客户端并不通过Master节点读写文件数据。反之,客户端向Master节点询问它应该联系的Chunk服务器。客户端将这些元数据信息缓存一段时间,后续的操作将直接和Chunk服务器进行数据读写操作。

  • Chunk尺寸
    Chunk的大小为64MB。选择较大的Chunk尺寸优点有:
    第一,它减少了客户端和Master节点通讯的需求,因为只需要一次和Mater节点的通信就可以获取Chunk的位置信息,之后就可以对同一个Chunk进行多次的读写操作;
    第二,采用较大的Chunk尺寸,客户端能够对一个块进行多次操作,这样就可以通过与Chunk服务器保持较长时间的TCP连接来减少网络负载;
    第三,选用较大的Chunk尺寸减少了Master节点需要保存的元数据的数量。

  • 元数据
    文件和Chunk的命名空间
    文件和Chunk的对应关系
    每个Chunk副本的存放地点

  • 一致性模型
    GFS支持一个宽松的一致性模型。文件命名空间的修改)是原子性的。它们仅由Master节点的控制:命名空间锁提供了原子性和正确性的保障;Master节点的操作日志定义了这些操作在全局的顺序。
    在这里插入图片描述

系统交互

实现数据修改操作、原子的记录追加操作以及快照功能

  • 租约和变更顺序
    变更是一个会改变Chunk内容或者元数据的操作,比如写入或者记录追加操作。变更操作会在Chunk的所有副本上执行。我们使用租约机制来保持多个副本间变更顺序的一致性。Master节点为Chunk的一个副本建立一个租约,我们把这个副本叫做主Chunk。主Chunk对Chunk的所有更改操作进行序列化。所有的副本都遵从这个序列进行修改操作。因此,修改操作全局的顺序首先由Master节点选择的租约的顺序决定,然后由租约中主Chunk分配的序列号决定。

  • 数据流
    数据流和控制流分开,在控制流从客户机到主Chunk、再到所有二级副本的同时,数据以管道的方式,顺序的沿着一个精心选择的Chunk服务器链推送。目标是充分利用每台机器的带宽,避免网络瓶颈和高延时的连接,最小化推送所有数据的延时。

  • 原子的记录追加
    使用记录追加,客户机只需要指定要写入的数据。GFS保证至少有一次原子的写入操作成功执行,写入的数据追加到GFS指定的偏移位置上,之后GFS返回这个偏移量给客户机。
    如果记录追加操作在任何一个副本上失败了,客户端就需要重新进行操作。重新进行记录追加的结果是,同一个Chunk的不同副本可能包含不同的数据–重复包含一个记录全部或者部分的数据。GFS并不保证Chunk的所有副本在字节级别是完全一致的。它只保证数据作为一个整体原子的被至少写入一次。

  • 快照
    快照操作几乎可以瞬间完成对一个文件或者目录树做一个拷贝,并且几乎不会对正在进行的其它操作造成任何干扰。用户可以使用快照迅速的创建一个巨大的数据集的分支拷贝,或者是在做实验性的数据操作之前,使用快照操作备份当前状态,这样之后就可以轻松的提交或者回滚到备份时的状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值