GFS google file system谷歌文件系统

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36372879/article/details/84348459

GFS

GFS 也就是 google File System,Google公司为了存储海量搜索数据而设计的专用文件系统。
GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。
在这里插入图片描述

master节点

master节点只存放元数据:

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

chunk server节点

chunk server节点是数据存放节点,也是数据操作节点,客户端只与master节点交换元数据,数据操作都是在chunck server节点上进行的。

持久保存数据与非持久保存数据

  • master持久保存日志数据,日志的序号表示时间
  • master非持久保存chunk server的位置信息,只是采用定期轮询的机制,只要chunk服务器才能最终确定某个chunk是否在硬盘上

GFS master复制机制

  • 一个逻辑的master采用两台物理主机
  • master状态复制,复制操作日志和check point文件
  • “影子”master机制

GFS读取数据流程

  1. 客户端将文件名和程序字节偏移转换成chunk索引,进而把文件名和chunk索引发送给master
  2. master将chunk标识和副本的位置信息发送给客户端,同时客户端用文件名和chunk索引作为key 缓存,然后发送客户端请求到其中一个副本chunksever(一般最近的)
  3. 该chunkserver读取chunk数据返回客户端

实际过程中,客户端通常在一次请求中查询多个chunk信息,master节点的回应也可能包含了被请求chunk后续chunk的信息。

GFS写数据流程

租约机制:master建立租约,并将其授权给某个副本作为primary,由primary确定数据修改的顺序,其他的副本照做
在这里插入图片描述

  • 客户机向master询问哪个节点持有租约,以及其他副本的位置,如果没有chunk是租约,那么久算则其中的一个副本建立租约
  • master将主chunk的标识符以及其他副本(secondary副本)的位置返回给客户机,客户机缓存这些数据
  • 客户机将数据推送到所有的副本上(可以按照任意顺序)
  • 当所有的副本都确认收到数据后,客户机发送写请求给primary chunk服务器,primary chunk为接收到的所有的操作分配连续的序列号
  • 主chunk把写请求传递到二级副本,每个二级副本按照主chunk分配的序列号以相同的顺序进行操作
  • 二级副本恢复主chunk完成
  • 主chunk恢复客户机

记录追加 原子性操作

在这里插入图片描述
追加操作超过chunk尺寸

  • 填充当前chunk
  • 通知secondary做同样的操作
  • 通知客户机向新的chunk追加

追加操作不会超过chunk尺寸

  • 主chunk追加数据
  • 通知二级chunk写在相同的位置上
  • 如果失败,重新操作,成功则返回偏移

失败的追加操作可能导致chunk间字节不一致,但是最终追加成功之后,所有副班返回的偏移是一致的。

猜你喜欢

转载自blog.csdn.net/weixin_36372879/article/details/84348459