分布式文件系统

存储是分布式系统中很重要的一个方面, 常见的存储有包含了3种类型:

类型特点常见程序
结构化存储数据的表结构固定关系型数据库, 例如MySQL
半结构化存储表结构不固定非关系型数据库, MongoDB等
非结构化统存储BLOB类型数据, 例如图片,视频等文件形式GFS, HDFS等,一般是分布式文件系统或者对象存储

本文主要介绍分布式文件系统的分类以及主要特征。

元数据存储方式

根据元数据的存储方式, 可以分为:集中式元数据存储和分散式元数据存储。
集中式元数据的代表是HDFS,CephFS等, 它的优点是实现相对简单, 缺点是元数据服务器(MDS)容易成为系统瓶颈, MDS的异常会造成系统的瘫痪。
分散式元数据的代表是Gluster, 它与集中式是相反的, 优缺点很明显也是相反的。这种方式的写入很快, 但是一些查询操作很慢, 比如:ls或者list-directory等。

适合的存储的文件大小

像GFS,HDFS这样的文件系统, 其假定存储的文件比较大,通常是几G或者上T的文件, 并且存储的时候讲文件切分成64M大小的数据块, 这样做前提条件, 确保所有的文件块的元数据总量比较小, 可以将这些元数据加载到内存里面来提升系统的性能。
另外一些文件系统, 比如TFS或者HayStack, 则是对文件的大小没有限制, 实际上, 他们默认存入的数据都比较小, 并且在这种场景下作了很多的性能优化,
通常的做法就是将多个小文件合并成一个大文件, 在元数据MDS里面, 按照分层的方式, 在某个目录下面, 保存合并后的文件的元数据, 在该文件下面, 新添加一层, 记录组成该文件的各个小文件的元数据,本质上就是采用元数据分层的方式。

是否支持POSIX接口

对于支持了Posix接口的文件系统, 与操作的系统的接口一样, 使用起来比较方便, 而另一些没有兼容Posix接口, 提供了系统支持的有限的接口。 通常, 为了支持Posix接口规范, 系统要牺牲掉一些性能或者其他的方面, 但是系统可以无缝的适配以前单机上存储的应用程序。 不支持Posix的方式, 通常以SDK的方式, 提供比较有限的对外接口, 这样就可以针对自己的实现方式隐藏更多的实现细节。

是否基于FUSE工作

目前, 比较多的分布式文件系统都是基于fuse来实现的, fuse提供了与VFS相适应的内核态的调用, 用户只需要开发用户态的实现, 将工作的重点放在分布式的方面, 而与内核的交互就很简单。像常见的CephFS, GlusterFS都是基于Fuse来实现, 在这些系统里面, 都有一个client模块, 它用来与FUSE的内核相交互, 并且启动线程调用和接受libfuse接口传入的调用。FUSE的工作原理是通过/dev/fuse设备文件来与内核交互消息, 每当有消息从操作系统调用过来, fuse从/dev/fuse读取消息, 然后放进消息队列里面, 在libfuse端有如干个线程(动态调整), 负责消费消息队列里面的消息, 并且把处理的结果通过/dev/fuse返回给操作系统。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值