只知道HDFS和GFS?你其实并不懂分布式文件系统( 五 )


 
2、文件删除
 
实时删除还是延时删除? 实时删除的优势是可以快速释放磁盘空间;延时删除只是在删除动作执行的时候,置个标识位,后续在某个时间点再来批量删除,它的优势是文件仍然可以阶段性地保留,最大程度地避免了误删除,缺点是磁盘空间仍然被占着 。在分布式文件系统中,磁盘空间都是比较充裕的资源,因此几乎都采用逻辑删除,以对数据可以进行恢复,同时在一段时间之后 (可能是 2 天或 3 天,这参数一般都可配置),再对被删除的资源进行回收 。
 
怎么回收被删除或无用的数据? 可以从文件的 meta 信息出发——如果 meta 信息的“文件 - 数据块”映射表中包含了某个数据块,则它就是有用的;如果不包含,则表明该数据块已经是无效的了 。所以,删除文件,其实是删除 meta 中的“文件 - 数据块”映射信息 (如果要保留一段时间,则是把这映射信息移到另外一个地方去) 。
 
3、面向小文件的分布式文件系统
 
有很多这样的场景,比如电商——那么多的商品图片、个人头像,比如社交网站——那么多的照片,它们具有的特性,可以简单归纳下:
 

  • 每个文件都不大;
  • 数量特别巨大;
  • 读多写少;
  • 不会修改 。
 
针对这种业务场景,主流的实现方式是仍然是以大数据块的形式存储,小文件以逻辑存储的方式存在,即文件 meta 信息记录其是在哪个大数据块上,以及在该数据块上的 offset 和 length 是多少,形成一个逻辑上的独立文件 。这样既复用了大数据块系统的优势和技术积累,又减少了 meta 信息 。
 
4、文件指纹和去重
 
文件指纹就是根据文件内容,经过算法,计算出文件的唯一标识 。如果两个文件的指纹相同,则文件内容相同 。在使用网络云盘的时候,发现有时候上传文件非常地快,就是文件指纹发挥作用 。云盘服务商通过判断该文件的指纹,发现之前已经有人上传过了,则不需要真的上传该文件,只要增加一个引用即可 。在文件系统中,通过文件指纹可以用来去重、也可以用来判断文件内容是否损坏、或者对比文件副本内容是否一致,是一个基础组件 。
 
文件指纹的算法也比较多,有熟悉的 md5、sha256、也有 google 专门针对文本领域的 simhash 和 minhash 等 。
 
十一、总结
 
分布式文件系统内容庞杂,要考虑的问题远不止上面所说的这些,其具体实现也更为复杂 。本文只是尽量从分布式文件系统所要考虑的问题出发,给予一个简要的分析和设计,如果将来遇到类似的场景需要解决,可以想到“有这种解决方案”,然后再来深入研究 。
 
同时,市面上也是存在多种分布式文件系统的形态,下面就是有研究小组曾经对常见的几种分布式文件系统的设计比较 。
 
只知道HDFS和GFS?你其实并不懂分布式文件系统

文章插图
 
几种分布式文件系统的比较
 
从这里也可以看到,选择其实很多,并不是 GFS 论文中的方式就是最好的 。在不同的业务场景中,也可以有更多的选择策略 。
 
作者 | 张轲
来源丨https://www.jianshu.com/p/fc0aa34606ce
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn

【只知道HDFS和GFS?你其实并不懂分布式文件系统】


推荐阅读