GFS(google file system)深度剖析

Google文件系统(GFS)采用主从式架构,通过master节点管理和chunkserver存储数据。其一致性模型分为一致性和已定义两种级别,保证了在多种操作场景下的数据一致性。系统交互中,master通过租约机制确保chunk操作序列化。快照采用COW策略,通过文件重命名实现。此外,GFS提供了文件锁、惰性删除策略和过期副本检测来确保高可用性和数据完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

架构

一致性模型

系统交互

快照

master节点管理

文件锁

文件删除

过期失效的副本检测

高可用

数据完整性


架构

gfs(google file system)包含一个master节点和若干个chunk server。master节点维护元数据,chunk server存储实际数据。访问gfs通过client进行,client通过lib的形式集成在用户程序中,先访问master节点获取要访问文件所在的chunk节点地址,然后访问chunk server操作数据。

一致性模型

gfs的数据一致性是针对多个chunk server保存的相同文件副本来说的,文件按照每64MB一个chunk的形式组织,一个文件可能占用多个chunk,每个chunk都复制多份保存在不同chunk server上,默认副本数量是3。对数据库有一定了解的同学对事务的一致性级别一定不会陌生,gfs对于文件的修改操作和数据库事务有相通之处,对于数据修改后文件的一段数据(region),定义如下两个一致性级别:

  • 一致的(consistency):所有client无论从哪个副本读一个region,读到的都是同样的内容
  • 已定义的(defined):region一致,且client能看到写入操作的全部内容

下面总结了所有操作的一致性级别:

  记录追加
串行成功 已定义 已定义,部分不一致
并行成功 一致未定义
失败 不一致

这里对写操作和记录追加两种修改方式分别做解释

对写操作,串行成功和失败的情况都很好理解,串行成功是最严格的一致性要求,成功后数据一定是一致的;gfs对失败操作没有类似数据库事务的回滚操作,可能在一个副本写入了数据其他副本没写入,或者每个副本写入的数据长度不一样,从而多副本之间的数据是不一致的。这里主要解释下并行成功的情况。并行写的情况发生在多个client写同一个文件区域,例如两个client同时写一个文件alibaba.txt,client A从文件偏移1000的位置开始写入100个字节,client B从文件偏移1050的位置开始写入100个字节,这样两个client的写入有50字节冲突,如图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值