Misc of GFS

为什么分布式存储很难实现?

Performance -> Sharding
Fault -> Tolerance
Tolerance -> Replication
Replication -> Consistency
Consistency -> Low Performance

GFS 简介

aimfeature
BIG & FASTsingle data center
Global内部使用
shardingBig Sequential access
automatic recovery

Master: 管理文件元信息, 管理 Chunk server
Client: 读写请求
Chunk server: 存储 chunk

  1. 每个大文件拆分多个为 64MB 大小的块,可以保存在不同的 chunk 节点中
  2. 每个块在三台 chunk 节点上进行备份 [跨机房, 跨机架]
master 节点的元数据

  • 用来管理 chunk 信息的表
  • 用来记录每个 chunk 节点和其上的数据块之间的映射
    |list of chunk servers |[ v 易失]|
    version [ nv 非易失]
    primary [ v ]
    lease [ v ]
  • log 文件,用来记录数据的变更,并会生成 checkpoint 用来恢复 master 节点(使用log记录会更加快速,而不是使用 b-tree 会存在寻找插入位置的过程导致较慢,有趣的角度)
客户端读取一个文件的步骤

  1. client 发送文件名称和偏移量给主服务器 master
  2. master 根据偏移量找到第一个需要的数据块的句柄;
    master 把保存了该数据块的 chunk 服务器列表发送给 client
  3. client 缓存 chunk 服务器列表,用以多次重复访问
    client 从最近的 chunk 服务器请求数据块
  4. [数据信息] chunk 服务器从磁盘读取文件并返回给 client
如何保证 GFS 的强一致性:GFS 并没有实现,成本过于高昂

  • primary 节点需要过滤重复的写入请求,防止数据出现多次
  • 从节点必须正确执行 primary 节点给与的任务
  • 使用两阶段提交保证任务被每个节点成功执行了
GFS 存在的缺陷

只有一个 master 节点,并且不支持自动回复,出错需要人工干预 [ Raft 可以]
由于他可能会执行重复的追加操作,有些客户端不能很好地处理这种情况
单个 master 节点需要处理大量的请求,这是很困难的

GFS的写入流程
  1. client 向 master 请求持有 lease 的 chunk(primary replica)位置和其他 replicas 的位置(如果没有 chunk 持有 lease,那么 master 会授予其中一个 replica 一个 lease)
  2. master 返回 primary 的信息和其他 replicas 的位置,然后 client 将这些信息缓存起来(只有当 primary 无法通信或者该 primary replica 没有 lease 了,client 才会向 master 再次请求)
  3. client 会将数据发送到所有的 replicas,每个 chunkserver 会把数据存在 LRU 缓存中
  4. 在所有的 replicas 都收到了数据之后,client 会向 primary 发送写请求。primary 会给它所收到的所有 mutation 分配序列号(这些 mutation 有可能不是来自于同一个 client),它会在自己的机器上按序列号进行操作
  5. primary 给 secondaries 发送写请求,secondaries 会按相同的序列执行操作
  6. secondaries 告知 primary 操作执行完毕
  7. primary 向 client 应答,期间的错误也会发送给 client,client 错误处理程序(error handler)会重试失败的 mutation

在这里插入图片描述

课程(mit 6.824 gfs) Summary

case study of performance, fault-tolerance, consistency
specialized for MapReduce applications
good ideas:
global cluster file system as universal infrastructure 通用基础设施:全局集群文件系统
separation of naming (master) from storage (chunkserver) 命名和存储分离
sharding for parallel throughput 分片以实现并行吞吐量
huge files/chunks to reduce overheads 大 文件/块 以减少额外开销
primary to sequence writes 主机 顺序写
leases to prevent split-brain chunkserver primaries 租约
not so great:
single master performance
ran out of RAM and CPU
chunkservers not very efficient for small files
lack of automatic fail-over to master replica
maybe consistency was too relaxed

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值