Google File System学习笔记

1.什么是GFS

GFS(Google File System)是 Google 公司开发的一款分布式文件系统

2.GFS能解决什么?

新技术的出现,其首要目的还是要解决先前的不足部分。在文章的摘要部分,我注意到了这几个词:大规模数据、可伸缩、廉价硬件设备、高性能,随着互联网数据的不断扩充,只增加昂贵的硬件设施来扩充容量,那还是稍欠妥当的。

1.组件失效看成是一种常态,系统要能持续监控自身的状态,并且有能力迅速的侦测、冗余并恢复失效的组件

2.能存储一定数量的大文件

3.工作负载为大容量连续读、小容量随机读以及追加式的连续写

4.支持高效且原子的文件追加操作

5.高性能的稳定网络带宽远比低延迟重要

3.GFS集群

一个GFS集群包括一个master和多个chunk服务器,并且同时被多个客户端访问。

master:管理所有的名字空间、访问控制信息、文件和chunk的映射信息、位置信息和管理系统范围内的活动。也就是说,master知道某个确定的文件被分割为哪些chunk,以及这些chunk的存储位置

chunk:存储在GFS中的文件会被分割成多个固定大小(size)的chunk,每个chunk大小为64M。为什么确定为64M?这个大小可以减少客户机向master的交互次数,同时size较大时,多次读的可能是同一个chunk,那么客户机可以与chunkserver建立持久连接,减小不必要的开销,其次master保存的数据量会相应减小。当然,其缺点就是,size越大的时候,对于部分文件来说,他们就可能只被分割成一个chunk,那么之后所有的读的对象都是它,成为热点。综上 ,64M应该是Google得到的一个平衡点

​ 当chunk创建的时候,master会给它分配一个不变的、唯一标识的64位标识符;通常,一个chunk有3个副本

chunkserver:存储chunk

client:是运行在应用程序中的代码,通常以SDK形式存在。它向master询问文件被分割后的chunk相关信息,然后根据这些信息去对应的chunkserver获取数据。

4.master节点

为简化设计,GFS采用一个master进行全局管理。client并不是通过matser来读写数据的,而是相master询问应该联系哪一天chunkserver,后续的操作都将直接和chunkserver进行交互,另外GFS也支持在一个请求中获取多个chunk的位置信息,减少client和master的交互次数,避免master成为整个系统的瓶颈。

5.数据一致性

文章中第一句话提到“文件命名空间的修改(例如,文件创建)”是原子性的,原子性在Java多线程中有提到过,就是说一个操作或者多个操作要么全部执行且成功,要么就都不执行。

GFS是宽松的一致性模型,也就是说,它并不保证某个确定的chunk的所有副本都是相同的。在GFS中,元数据可以让matser为其添加互斥锁来解决并发修改的问题,所以其修改是原子性的。文件的读写会出现失败,那么各个副本的数据就可能不一致。

6.租约

目的是为了最小化master节点的管理负担。就是说,如果每次写文件都请求master节点,那么master会成为整个系统的瓶颈,那么master找到对应chunk的server,并且给其中的一个server授租约,拥有租约的server称为primary。在租约的有效期内,对这个chunk的写操作都由primary负责,而租约的有效期一般为60s,租约到期后,master可以给它或者其他chunkserver再授权。

7.快照

GFS通过快照来创建一个文件或者目录树的备份,它可以用于备份文件

8.容错机制

chunk有多个副本在多个服务器上,并且master和chunkserver都设计成在几秒钟内恢复状态和重启。那容错具体是怎么实现的?

首先GFS有一个保证数据完整性的chunksum,它被每一个chunkserver用来检验存储数据的完整性。每个 chunk 以 64kb 的块进行划分 ,每一个块对应一个 32 位的 chunksum,存到 chunkserver 的内存中,对于读操作,在返回给 client 之前,chunkserver 会校验要读取块的 chunksum,如果跟保存在内存中的不一致,那么就说明数据损坏,这时chunkserver会找到master恢复数据。

GFS是一个文件系统,那必须得了解到整体的读写流程

9.读取文件的过程

client把文件名和程序指定的字节偏移量转为文件名+chunk index,然后向master发送请求;matser根据从元数据查询对应的chunk,返回chunk handle(标识) + chunk location;client将收到的信息用文件名+chunk index 作为key缓存起来,之后client都不向master发送请求直到缓存的信息过期。client会选择网络上最近的chunkserver通信,并通过chunk 的标识和位置来读取文件数据

10.写文件的过程

1.写文件会和primary有关联,也就是授予租约的那台chunkserver

2.client向matser询问,这个chunk对应的primary,如果没有,则master选择其中一个进行授租约

3.master给client返回primary信息,只有当这些信息不可用或者租约过期的时候,client才会再次联系master

4.client将追加的记录发送到每一台chunkserver,直到确认所有的chunkserver都收到,然后client会向primary发送写的请求

5.primary完成写的请求之后,将写的请求转发给其他的chunkserver,让他们以同样的顺序写数据,完成后告诉primary

完成上述的步骤之后,primary会告诉client成功或者失败,失败则重复3之后的步骤

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值