GFS分布式文件系统

GFS系统简介

回到顶部

  任何系统都是有自己适用的场景的,所以我们讨论一个系统的时候,首先得明确的是,这个系统是在什么样的环境下产生的,是为了什么目标而产生的,做了哪些假设或者限制。

  对于GFS,假设:

  • 系统是构建在普通的、廉价的机器上,因此故障是常态而不是意外

  • 系统希望存储的是大量的大型文件(单个文件size很大)

  • 系统支持两种类型读操作:大量的顺序读取以及小规模的随机读取(large streaming reads and small random reads.)

  • 系统的写操作主要是顺序的追加写,而不是覆盖写

  • 系统对于大量客户端并发的追加写有大量的优化,以保证写入的高效性与一致性,主要归功于原子操作record append

  • 系统更看重的是持续稳定的带宽而不是单次读写的延迟

GFS架构

  

  

  可以看见 GFS系统由三部分组成:GFS master、GFS Client、GFS chunkserver。其中,GFS master任意时刻只有一个,而chunkserver和gfs client可能有多个。

  一份文件被分为多个固定大小的chunk(默认64M),每个chunk有全局唯一的文件句柄 -- 一个64位的chunk ID,每一份chunk会被复制到多个chunkserver(默认值是3),以此保证可用性与可靠性。chunkserver将chunk当做普通的Linux文件存储在本地磁盘上。

  GFS master是系统的元数据服务器,维护的元数据包括:命令空间(GFS按层级目录管理文件)、文件到chunk的映射,chunk的位置。其中,前两者是会持久化的,而chunk的位置信息来自于Chunkserver的汇报。

  GFS master还负责分布式系统的集中调度:chunk lease管理,垃圾回收,chunk迁移等重要的系统控制。master与chunkserver保持常规的心跳,以确定chunkserver的状态。

  GFS client是给应用使用的API,这些API接口与POSIX API类似。GFS Client会缓存从GFS master读取的chunk信息(即元数据),尽量减少与GFS master的交互。

  

  那么一个文件读操作的流程是这样的:

  • 应用程序调用GFS client提供的接口,表明要读取的文件名、偏移、长度。

  • GFS Client将偏移按照规则翻译成chunk序号,发送给master

  • master将chunk id与chunk的副本位置告诉GFS client

  • GFS client向最近的持有副本的Chunkserver发出读请求,请求中包含chunk id与范围

  • ChunkServer读取相应的文件,然后将文件内容发给GFS client。

GFS副本控制协议

回到顶部

  在《带着问题学习分布式系统之中心化复制集》一文中,介绍过分布式系统中常用的副本控制协议。GFS为了可用性与可靠性,而且使用的都是普通廉价的机器,因此也采用了冗余副本机制,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值