分布式文件系统调研

数据存储方式

文件、块和对象是三种以不同的方式来保存、整理和呈现数据的存储格式。这些格式各有各的功能和限制。文件存储会以文件和文件夹的层次结构来整理和呈现数据;块存储会将数据拆分到任意划分且大小相同的卷中; 对象存储会管理数据并将其链接至关联的元数据。

三者的本质差别是使用数据的“用户”不同:

  • 文件存储的用户是自然人
  • 块存储的用户是可以读写块设备的软件系统,例如传统的文件系统、数据库
  • 对象存储的用户则是其它计算机软件

块存储

分布式文件系统调研_第1张图片

块存储一般体现形式是卷或者硬盘(比如windows的c盘),数据是按字节来访问的,对于块存储而言,对里面存的数据内容和格式是完全一无所知的。好比上面图中,数据就像玉米粒一样堆放在块存储里,块存储只关心玉米粒进来和出去,不关心玉米粒之间的关系和用途。

块存储只负责数据读取和写入,因此性能很高,适用于对响应时间要求高的系统。比如数据库等。

文件存储

文件存储一般体现形式是目录和文件(比如C:\Users\Downloads\text.doc),数据以文件的方式存储和访问,按照目录结构进行组织。文件存储可以对数据进行一定的高级管理,比如在文件层面进行访问权限控制等。好比上面图中,数据像玉米粒一样组成玉米棒子,再对应到不同的玉米杆上,要找到某个玉米粒,先找到玉米杆,再找到玉米棒子,然后根据玉米粒在玉米棒子上的位置找到它。

文件存储可以很方便的共享,因此用途非常广泛。比如常用的NFS、CIFS、ftp等都是基于文件存储的。

对象存储

对象存储一般体现形式是一个UUID,数据和元数据打包在一起作为一个整体对象存在一个超大池子里。对于对象访问,只需要报出它的UUID,就能立即找到它,但访问的时候对象是作为一个整体访问的。好比上面图中,数据的玉米粒被做成了玉米罐头,每个玉米罐头都有一个唯一出厂号,但是买卖罐头,都一次是一盒为单位。

从设计之初衷(一般的对象存储都是基于哈希环之类的技术来实现),对象存储就可以非常简单的扩展到超大规模,因此非常适合数据量大、增速又很快的视频、图像等。

分布式文件系统比较及部分原理

存储系统 CephFS GlusterFS TFS HDFS MooseFS FastDFS MogileFS
开发语言 C++ C C++ Java C C Perl
系统性能 很高
数据存储方式 对象/文件/块 文件/块 文件 文件 文件/块 文件
集群节点通信协议 私有协议(TCP) 私有协议(TCP)/ RDAM(远程直接访问内存) TCP TCP TCP TCP HTTP
专用元数据存储点 占用MDS 占用NS 占用MDS 占用MFS 占用DB
在线扩容 支持 支持 支持 支持 支持 支持 支持
冗余备份 支持 支持 支持 支持 支持 支持 不支持
单点故障 不存在 不存在 存在 存在 存在 不存在 存在
跨集群同步 不支持 支持 支持 不支持 不支持 部分支持 不支持
易用性 安装简单,官方文档专业化 安装简单,官方文档专业化 安装复杂,官方文档少 安装简单,官方文档专业化 安装简单,官方文档多 安装简单,社区相对活跃 未知
适用场景 单集群的大中小文件 跨集群云存储 跨集群的小文件 Mapreduce使用的文件存储 单集群的大中文件 单集群的中小文件 未知
FUSE挂载 支持 支持 未知 支持 支持 不支持 不支持
访问接口 POSIX POSIX 不支持POSIX 不支持POSIX POSIX 不支持POSIX 不支持POSIX

TFS

TFS(Taobao File System)是由淘宝开发的一个分布式文件系统,其内部经过特殊的优化处理,适用于海量的小文件存储,目前已经对外开源。TFS采用自有的文件系统格式存储,因此需要专用的API接口去访问,目前官方提供的客户端版本有:C++/JAVA/PHP(没有C的接口)

  • 特点
    • 主备热切换
    • 所有元数据都是在内存中,处理效率非常高效
    • 系统架构也非常简单,管理也很方便
    • 具备负载均衡和冗余备份的功能;对小文件会采取合并策略,减少数据碎片
  • 优点
    • 针对小文件量身定做,随机IO性能比较高
    • 支持在线扩容机制,增强系统的可扩展性
    • 实现了软RAID,增强系统的并发处理能力及数据容错恢复能力
    • 支持主备热倒换,提升系统的可用性
    • 支持主从集群部署,其中从集群主要提供读/备功能
  • 缺点
    • TFS只对小文件做优化,不适合大文件的存储
    • 不支持POSIX通用接口访问,通用性较低
    • 不支持自定义目录结构,及文件权限控制
    • 通过API下载,存在单点的性能瓶颈
    • 官方文档非常少,学习成本高
  • 应用场景
    • 多集群部署的应用
    • 存储后基本不做改动
    • 海量小型文件

FastDFS

FastDFS是国人开发的一款分布式文件系统,目前社区比较活跃,提供了C、Java和PHP API。实现软RAID10,提升并发IO的性能、简单负载均衡及数据的冗余备份;同时通过线性的添加新的逻辑存储组,从容实现存储容量的线性扩容。文件下载上,除了支持通过API方式,目前还提供了apache和nginx的插件支持,同时也可以不使用对应的插件,直接以Web静态资源方式对外提供下载。内部的网络模型使用比较成熟的libevent三方库,具备高并发的处理能力。

  • 特点
    • Tracker服务器是整个系统的核心枢纽,其完成了访问调度(负载均衡),监控管理Storage服务器
    • FastDFS支持多个备用的Tracker,消除系统的单点故障
    • 只有同组的Storage才做同步
    • FastDFS在主从文件ID上做取巧,完成了关联关系的存储
  • 优点
    • 针系统无需支持POSIX(可移植操作系统),降低了系统的复杂度,处理效率更高
    • 支持在线扩容机制,增强系统的可扩展性
    • 实现了软RAID10,增强系统的并发处理能力及数据容错恢复能力
    • 支持主从文件,支持自定义扩展名
    • 主备Tracker服务,增强系统的可用性
    • 支持小文件合并存储
  • 缺点
    • 不支持POSIX通用接口访问,通用性较低
    • 对跨公网的文件同步,存在较大延迟,需要应用做相应的容错策略
    • 同步机制不支持文件正确性校验,降低了系统的可用性
  • 应用场景
    • 单集群部署的应用
    • 存储后基本不做改动
    • 小中型文件

CephFS

Ceph是一个可以按对象/块/文件方式存储的开源分布式文件系统,其设计之初,就将单点故障作为首先要解决的问题,因此该系统具备高可用性、高性能及可扩展等特点。该文件系统支持目前还处于试验阶段的高性能文件系统BTRFS(B-Tree文件系统),同时支持按OSD方式存储,因此其性能是很卓越的。

  • 特点
    • Ceph底层存储是基于RADOS(可靠的、自动的分布式对象存储),它提供了LIBRADOS/RADOSGW/RBD/CEPH FS方式访问底层的存储系统
    • 通过FUSE,Ceph支持类似的POSIX访问方式;Ceph分布式系统中最关键的MDS节点是可以部署多台,无单点故障的问题,且处理性能大大提升
    • Ceph通过使用CRUSH算法动态完成文件inode number到object number的转换,从而避免再存储文件metadata信息,增强系统的灵活性
  • 优点
    • 支持对象存储(OSD)集群,通过CRUSH算法,完成文件动态定位, 处理效率更高
    • 支持通过FUSE方式挂载,降低客户端的开发成本,通用性高
    • 支持分布式的MDS/MON,无单点故障
    • 强大的容错处理和自愈能力
    • 支持在线扩容和冗余备份,增强系统的可靠性
  • 缺点
    • 目前处于试验阶段,系统稳定性有待考究
    • ceph目前还不足够成熟,它基于的btrfs本身也不成熟,它的官方网站上也明确指出不要把ceph用在生产环境中
  • 应用场景
    • 全网分布式部署的应用
    • 对实时性、可靠性要求比较高官方宣传,存储容量可轻松达到PB级别

GlusterFS

GlusterFS是Red Hat旗下的一款开源分布式文件系统,它具备高扩展、高可用及高性能等特性,由于其无元数据服务器的设计,使其真正实现了线性的扩展能力,使存储总容量可 轻松达到PB级别,支持数千客户端并发访问;对跨集群,其强大的Geo-Replication可以实现集群间数据镜像,而且是支持链式复制,这非常适用于跨集群的应用场景。

  • 特点
    • 支持FUSE方式挂载,可以通过标准的NFS/SMB/CIFS协议像访问本体文件一样访问文件系统,同时其也支持HTTP/FTP/GlusterFS访问
    • 通过基于SSH的命令行管理界面,可以远程添加、删除存储节点,也可以监控当前存储节点的使用状态
    • 持集群节点中存储虚拟卷的扩容动态扩容;同时在分布式冗余模式下,具备自愈管理功能,在Geo冗余模式下,文件支持断点续传、异步传输及增量传送等特点
  • 优点
    • 支持POSIX(可移植操作系统),支持FUSE挂载通过多种协议访问,通用性比较高
    • 支持在线扩容机制,增强系统的可扩展性
    • 实现了软RAID,增强系统的并发处理能力及数据容错恢复能力
    • 强大的命令行管理,降低学习、部署成本
    • 支持整个集群镜像拷贝,方便根据业务压力,增加集群节点
    • 官方资料文档专业化,该文件系统由Red Hat企业级做维护,版本质量有保障
  • 缺点
    • 通用性越强,其跨越的层次就越多,影响其IO处理效率
    • 频繁读写下,会产生垃圾文件,占用磁盘空间
  • 应用场景
    • 多集群部署的应用
    • 中大型文件根据目前官方提供的材料,现有的使用GlusterFS系统存储容量可轻松达到PB

MooseFS

MooseFS是一个高可用的故障容错分布式文件系统,它支持通过FUSE方式将文件挂载操作,相对比较轻量级,同时其提供的web管理界面非常方便查看当前的文件存储状态。但其对master服务器有单点依赖,用perl编写,性能相对较差,国内用的人比较多。

HDFS

安装简单,官方文档专业化;大数据批量读写,吞吐量高;一次写入,多次读取,顺序读写;难以满足毫秒级别的低延时数据访问;不支持多用户并发写相同文件;不适用于大量小文件;适合存储非常大的文件。

MogileFS

依赖数据库,Trackers(控制中心):负责读写数据库,作为代理复制storage间同步的数据,除了API,可以通过与nginx集成,对外提供下载服务,

选型参考

  1. 按特性分类

    • 适合做通用文件系统的有:Ceph,Lustre,MooseFS,GlusterFS
    • 适合做小文件存储的文件系统有:Ceph,MooseFS,MogileFS,FastDFS,TFS
    • 适合做大文件存储的文件系统有:HDFS,Ceph,Lustre,GlusterFS,GridFS
    • 轻量级文件系统有:MooseFS,FastDFS
    • 简单易用,用户数量活跃的文件系统有:MooseFS,MogileFS,FastDFS,GlusterFS
    • 支持FUSE挂载的文件系统有:HDFS,Ceph,Lustre,MooseFS,GlusterFS
  2. 初步筛选

    • 考虑到GFS不开源,学习成本高,且相关特性资料不全面的情况下,暂时先不考虑使用GFS上文没写)
    • Ceph目前不够成熟稳定,很少有使用在生产环境的案例,暂时排除
    • Lustre对内核依赖程度过重,且不易安装使用,暂时排除(上文没写)
    • TFS安装复杂,且官方文档少,不利于以后的学习使用,暂时先排除
    • 经初步筛选剩下的文件系统有:HDFS、MooseFS、MogileFS、FastDFS、GlusterFS、GridFS
  3. 根据需求进一步筛选

    • 需求

      1. 需要搭建一部管理原始凭证的文件系统,原始凭证的文件类型主要是小文件(<100M),不会对文件进行变更,无写操作,读操作量大,且对安全性要求较高
      2. 随着系统在使用过程中数据量逐步庞大,文件的量会变得繁多,对文件读取速率要求尽可能高但不追求极致
      3. 文件系统需要有较完善的冗余备份与容错机制,功能尽量精简耐用,安装配置应简单且适合于国产环境部署
    • 分析

      1. 需要选择适合海量小文件存储的文件系统,适合的文件系统有:MooseFS,MogileFS,FastDFS
      2. 其次需要支持冗余备份,适合的文件系统有:MooseFS、FastDFS、GlusterFS
      3. 符合条件1,2且功能精简的文件系统有:FastDFS
      4. 符合条件1,2且功能全面的文件系统有:MooseFS

你可能感兴趣的:(分布式文件系统调研)