VFS GFS

VFS(virtual File System):虚拟文件系统

作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统,即为各类文件系统提供了一个统一的操作界面和应用编程接口。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质文件系统类型就可以工作的粘合层。

这是Linux文件系统对外的接口。任何要使用文件系统的程序都必须经由这层接口来使用它。

在古老的DOS操作系统中,要访问本地文件系统之外的文件系统需要使用特殊的工具才能进行。而在Linux下,通过VFS,一个抽象的通用访问接口屏蔽了底层文件系统和物理介质的差异性。

GFS(Google 文件系统)

GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,并提供容错功能。它可以给大量的用户提供总体性能较高的服务。

Google公司为了存储海量搜索数据而设计的专用文件系统

分布式文件存储系统

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

  • 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 - xybaby - 博客园 (cnblogs.com)

 图1还描述了应用读取数据的流程。

  1.应用指定读取某个文件某段数据,因为数据块是定长的,client可以计算出这段数据跨越了几个数据块,client将文件名和需要的数据块索引发送给master;

  2.master根据文件名查找命名空间文件-块映射表,得到需要的数据块副本所在的地址,将数据块的id和其所有副本的地址反馈给client;

  3.client选择一个副本,联系chunkserver索取需要的数据;

  4.chunkserver返回数据给client。

再来看看GFS是如何并发写(write)的,GFS必须将对数据块的修改同步到每一个副本。考虑一下多个应用同时修改同一数据块的情况,我们必须为修改操作定义统一的时序,不然多个副本会出现不一致的情况,那么定义时序由谁做呢?还记得前面提到的元数据缓存么,为了减少master的负担,client在获得副本位置后就不再和master交互,所以必然需要选出一个master代理来完成这个任务。事实上GFS采用了租约(lease)的机制master会将租约授权给某个副本,称为primary,由这个primary来确定数据修改的顺序,其它副本照做就是。

图2是写操作的控制流和数据流:

  1. client需要更新一个数据块,询问master谁拥有该数据块的租约(谁是primary);
  2. master将持有租约的primary和其它副本的位置告知client,client缓存之;
  3. client向所有副本传输数据,这里副本没有先后顺序,根据网络拓扑情况找出最短路径,数据从client出发沿着路径流向各个chunkserver,这个过程采用流水线(网络和存储并行)。chunkserver将数据放到LRU缓存;
  4. 一旦所有的副本都确定接受数据,client向primary发送写请求,primary为这个前面接受到的数据分配序列号(primary为所有的写操作分配连续的序列号表示先后顺序),并且按照顺序执行数据更新;
  5. primary将写请求发送给其它副本,每个副本都按照primary确定的顺序执行更新;
  6. 其它副本向primary汇报操作情况;
  7. primary回复client操作情况,任何副本错误都导致此次请求失败,并且此时副本处于不一致状态(写操作完成情况不一样)。client会尝试几次3到7的步骤,实在不行就只能重头来过了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值