分布式存储

分布式文件系统调研

2021-03-23  本文已影响0人  Minority

数据存储方式

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

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

块存储

块存储一般体现形式是卷或者硬盘(比如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的接口)

FastDFS

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

CephFS

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

GlusterFS

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

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
上一篇下一篇

猜你喜欢

热点阅读