在测试NEFS(网易分布式文件系统)的过程中,经常会将之前的设计文档再拿出来反复的看一看,过程中就会不断地去琢磨有些既定的设计,为什么要这么设计,比如block块大小的选定,mds中partitioninfo信息为什么是定期去ps上获取,主从mds为什么要这样设计等等。虽然经常会问开发人员一些设计的思路,但是有些根因我认为还是要通过自己去挖掘才能知道更深层次的原因。 从设计角度而言,一般来说都是先会去分析下业界有什么比较成熟的文件系统,并且评估下是否符合当前我们的应用场景,不符合的点如何优化。 作为一个完全自研的分布式文件系统而言,业界优秀的分布式文件系统的经验肯定也不可或缺。从这个角度来说,作为一个分布式文件系统的QA,也需要去深入学习一下业界成熟的分布式文件系统的一些架构及设计思路,扩展广度,从而发现我们自身的一些设计出发点,或者一些优化点的起源,从而更加深入的了解我们自研的分布式文件系统设计原理,发掘潜藏的隐患,提出优化点。 业界的比较成熟的分布式文件系统有很多,经过筛选以及开发同学的建议,选取了GFS(谷歌分布式文件系统),HDFS(Hadoop分布式文件系统),ceph(开源分布式文件系统)三个作为今年的研究点去学习。每一个分布式文件系统不管从架构、设计思路、实现细节各方面来说水都很深,因此也需要花费很多业余的精力去学习和不断地提出疑问。好在这几个前人的经验也相对比较丰富,踩在巨人的肩膀上就没那么难了。 本篇首先对GFS(谷歌分布式文件系统)做一个初步的简析,初步分为上,中,下三篇,本篇内容重点介绍GFS系统架构以及设计要点,让读者有一个初步认识,在中下篇中继续对GFS的一些原理及流程进行深入分析,对高可用、数据完整性、可靠性等设计点进行阐述。
GFS(谷歌分布式文件系统)为google提供基础的海量数据存储服务。它是一个面向大规模数据密集型应用的、可伸缩的分布式文件系统。GFS虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了高性能的服务。
GFS是针对谷歌应用的特点按照以下思路去设计:
GFS提供了一套类似传统文件系统的API接口函数,文件以分层目录的形式组织,用路径名来标识。GFS支持常用的操作,如创建新文件、删除文件、打开文件、关闭文件、读和写文件。但是要理解一点:文件块被存储在linux硬盘上,GFS只是一个管理器而已,这些文件操作API也只是个对这些抽象文件的管理而已。也就是说GFS层级比底层文件系统以及虚拟文件系统层次要高。 注:这点跟NEFS也比较像,NEFS也是对文件粒度进行管理的,而不是针对块设备,因此也是在底层文件系统及虚拟文件系统之上。
使用论文中的原图如下: 如图所示,GFS主要由以下三个系统模块组成: • Master:管理元数据、整体协调系统活动。 • ChunkServer:存储维护数据块(Chunk),读写文件数据。 • Client:向Master请求元数据,并根据元数据访问对应ChunkServer的Chunk。
缺点: 1.对于小文件的场景,容易产生数据碎片。 2.小文件占用chunk少,对小文件频繁访问会集中在少数chunkserver上,从而产生小文件访问热点(这个问题在后续的可靠性篇章中有相关的解决方案)。
2.元数据管理
GFS的设计思路决定了它的主体框架及设计要点,例如文件非常大并且大部分是顺序写和读取,这样就可以设置chunk大小为一个比较大的值,因为小文件的场景本身就偏少,因此chunk中的由于小文件带来的数据碎片就可以相对忽略不计。另外chunkserver是不缓存chunk数据的,因为linux系统级缓存对于顺序读取来说效果已经很好了。针对于GFS大部分都是顺序读取的场景来说,不需要做进一步的优化。针对数据追加的优化才是针对顺序写的目标场景进行的好的优化设计点。 NEFS的目标场景跟GFS有一定的差别,NEFS上层对接的是NOS对象存储,基本都是大量的小文件(100MB以下),总体量比较大,对象个数比较多。而且大部分是顺序写,随机读场景,因此目标场景不一致导致结构和设计会有一定的差异。
Google大数据处理的3篇核心论文 《The Google File System》:http://research.google.com/archive/gfs.html 《MapReduce: Simplified Data Processing on Large Clusters 》:http://research.google.com/archive/mapreduce.html 《Bigtable: A Distributed Storage System for Structured Data》:http://research.google.com/archive/bigtable.html 百度百科:http://baike.baidu.com/subview/805525/13773509.htm
本文来自网易实践者社区,经作者崔晓晴授权发布。