分布式文件系统选型小记

Q&A

分布式文件系统是什么?

  • 分布式文件系统(Distributed File System,DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,是通过计算机网络与节点(可简单的理解为一台计算机)相连。

为什么要使用分布式文件系统?

  • 提高扩展能力,避免单点故障。

如何找到适合自己的分布式文件系统?

  • 对分布式文件系统进行相关调研选型。

本文主要是介绍分布式文件系统的选型,关于定义和为何使用,请查询相关资料。

需求说明

目前要找的文件系统至少满足以下条件:

  • 写相对多、读相对多、从不修改、基本不删除
  • 能够存储海量大于100M的文件
  • 非常稳定、高可用、可扩容、可运维部署
  • 上手简单、易维护、社区相对活跃

常用分布文件系统概述

第一轮筛选

常用分布式文件系统有:GFS、TFS、BFS、HDFS、Ceph、MinIO、MogileFS、MooseFS、FastDFS、GridFS等。

1.GFS(Google File System)
Google公司为了满足本公司需求而开发的基于Linux的专有分布式文件系统。但是Google并没开源,我们暂时不考虑。

2.TFS是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,可为外部提供高可靠和高并发的存储访问。TFS为淘宝提供海量小文件存储,通常文件大小不超过1M,所以我们暂时也不考虑。

3.BFS是一个高吞吐量、低延迟、高容错性、高效维护简单的小文件系统,是基于facebook haystack 用golang实现。 bfs 更适合图片存储,小文件存储所以暂时不考虑。

参考链接:https://www.toutiao.com/i6272104949560115714/

4.MooseFS
支持FUSE,相对比较轻量级,对master服务器有单点依赖,用perl编写,性能相对较差,由于可能会实时访问所以暂时也不考虑。

参考链接:
https://moosefs.com
https://www.cnblogs.com/hjc4025/p/9956988.html

5.MogileFS
由memcahed的开发公司danga一款perl开发的产品,目前国内使用mogielFS的有图片托管网站yupoo等。MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上。

参考链接:https://github.com/mogilefs

6.HDFS(Hadoop Distributed File System)
Hadoop 实现了一个分布式文件系统,简称HDFS。Hadoop是Apache Lucene创始人Doug Cutting开发的使用广泛的文本搜索库。它起源于Apache Nutch,后者是一个开源的网络搜索引擎,本身也是Luene项目的一部分。Aapche Hadoop架构是MapReduce算法的一种开源应用,是Google开创其帝国的重要基石。

7.FastDFS
由淘宝的余庆先生所开发的一个轻量级、高性能、纯C语言开发的开源分布式文件系统。它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。适合以文件为载体的在线服务,如视频网站等等。

参考链接:https://github.com/happyfish100/fastdfs

8.Minio
是一个基于Go语言的对象存储服务。它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。区别于分布式存储系统,minio的特色在于简单、轻量级,对开发者友好,认为存储应该是一个开发问题而不是一个运维问题。

参考链接:
https://docs.min.io/cn
https://blog.csdn.net/tianshan2010

9.Ceph
是加州大学圣克鲁兹分校的Sage Weil攻读博士时开发的分布式文件系统。
由于 ceph 使用 btrfs 文件系统, 而btrfs 文件系统需要 Linux 2.6.34 以上的内核才支持。ceph目前还不足够成熟,它基于的btrfs本身也不成熟,它的官方网站上也明确指出不要把ceph用在生产环境中。

参考链接:
https://github.com/ceph/ceph
https://ceph.com

10.GridFS
MongoDB是一种知名的NoSql数据库,GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容,文件内容按一定大小分成若干块,每一块存在一个Document中,这种方法不仅提供了文件存储,还提供了对文件相关的一些附加属性(比如MD5值,文件名等等)的存储。

参考链接:
https://docs.mongodb.com/manual/core/gridfs/
https://www.jianshu.com/p/d135aa7dfe9c

几种备选分布式文件系统比较

存储系统 HDFS FastDFS MinIO Ceph GridFS
开发语言 Java C Go C++ C++
开源协议 Apache GPL V3 Apache V2 LGPL
存储方式 文件(偏大) 文件/快 文件 对象/文件块 块/文档
在线扩容/冗余备份/单点故障 支持/支持/存在 支持/支持/不存在 暂时不支持/支持/不存在 支持/支持/不存在 支持/支持/不存在
易用性 安装简单,官方文档专业化 安装简单,社区相对活跃 安装简单,无中文社区 安装简单,官方文档专业化 安装简单
优点 大数据批量读写,吞吐量高 支持主从文件,支持自定义扩展名;主备Tracker服务,增强系统的可用性 简约的对象存储服务器系统,这是一种轻量级、高度并发的解决方案 分布式,没有单点依赖,用C编写,性能较好 可以访问部分文件,而不用向内存中加载全部文件,从而保持高性能;文件和元数据自动同步

分类筛选

第二轮筛选

适合做通用文件系统的有:Ceph、MooseFS、MinIO;
适合做中小文件存储的文件系统有:Ceph、FastDFS、MinIO;
适合做大文件存储的文件系统有:HDFS、MinIO、Ceph、GridFS;
轻量级文件系统有:FastDFS、MinIO;
简单易用,用户活跃的文件系统有:HDFS、FastDFS;
综上:Ceph目前不够成熟稳定,官方也明确指出不要把ceph用在生产环境中,暂不考虑;
经初步筛选剩下的文件系统有:HDFS、FastDFS、MinIO、GridFS。

第三轮步筛选

MinIO:上手简单,适合存储大容量非结构化的数据, 基本满足当前业务需求但是目前没有中文社区。
FastDFS:功能精简,支持在线扩容、冗余备份,部分支持跨集群同步,不存在单点故障,性能较好。但是不支持FUSE挂载和POSIX访问接口。
HDFS:适合批量数据处理.可以部署在廉价的机器上。可以部署在廉价的机器上,但是不适合大量小文件,通过牺牲响应延时来换取高的吞吐量。
GridFS:能够简化技术栈,如果已经使用了MongoDB,那么使用GridFS,就不需要其它独
立的存储工具了(很遗憾我们当前还没有引入MongoDB),不过性能不如直接访问文件系统快。无法修改文档。如果要修改GridFS里面的文档,只能是先删除再添加(对我们当前业务没有影响)

综述

目前提供的建议选型参考为FastDFS或MinIO,
如果想减少技术栈的话可以考虑HDFS或GridFS,
如果不在乎响应时间可以考虑HDFS。

END

分布式文件系统选型小记相关推荐

  1. 主流分布式文件系统选型,写得太好了!

    上一篇:深夜看了张一鸣的微博,让我越想越后怕 作者:张轲1983 来源:https://www.jianshu.com/p/fc0aa34606ce 一.概述 分布式文件系统是分布式领域的一个基础应用 ...

  2. 分布式文件系统对比与选型参考

    一.分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.分布式文件系统的设计基于客户 ...

  3. Moosefs分布式文件系统的搭建与维护

    一.文件系统选型 在一般的生产环境中,NFS共享存储算是比较常用的,简单.方便,但随着业务的不断扩展,数据量也是承爆发式的增长,因而对存储这些数据的文件系统要求也越来越高了,分存式.可扩展.大容量,这 ...

  4. [转]Unix下针对邮件,搜索,网络硬盘等海量存储的分布式文件系统项目(关于GFS、MogileFS分布式文件系统邮件列表)

    Unix下针对邮件,搜索,网络硬盘等海量存储的分布式文件系统项目 :Google是当前最有影响的Web搜索引擎,它利用一万多台廉价PC机构造了一个高性能.超大存储容量.稳定.实用的巨型Linux集群. ...

  5. Unix下针对邮件,搜索,网络硬盘等海量存储的分布式文件系统项目

    :Google是当前最有影响的Web搜索引擎,它利用一万多台廉价PC机构造了一个高性能.超大存储容量.稳定.实用的巨型Linux集群. http://bbs.chinaunix.net/forum/v ...

  6. 安卓文件系统服务器端概要设计,分布式文件系统概要设计.docx

    <分布式文件系统概要设计.docx>由会员分享,提供在线免费全文阅读可下载,此文档格式为docx,更多相关<分布式文件系统概要设计.docx>文档请在天天文库搜索. 1.分布 ...

  7. 【网课平台】Day3.网关与分布式文件系统

    文章目录 一 .媒资模块环境搭建 1. 网关gateway 2.Nacos 3.搭建gateway 二.分布式文件系统 2.1 文件系统 2.2 分布式文件系统 2.3 MinIO 四.上传图片 4. ...

  8. 2021年大数据Hadoop(七):HDFS分布式文件系统简介

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 HDFS分布式文件系统 ...

  9. 分布式文件系统(FastDFS)安装 配置

    [TOC] 百度百科: FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文 ...

最新文章

  1. MacBook Air写代码真香!包邮送一台!
  2. Starting MySQL... ERROR! The server quit without updating PID file 问题解决
  3. hive动态分区shell_Hive动态分区 参数配置及语法
  4. 【Android 逆向】Android 逆向通用工具开发 ( Android 端远程命令工具 | Android 端可执行程序的 main 函数操作 | TCP 协议服务器建立 | 接收客户端数据 )
  5. python语言:装饰器原理
  6. js便利json 数组的方法
  7. mysql更新数据 update格式和alter对比
  8. 前端学习(2532):Vuex中action
  9. 12-Java读写CSV格式文件(opencsv)
  10. 实现Windows Phone 8多媒体:视频
  11. spring 监听器
  12. [数据结构] 三十二叉堆
  13. java idisposable_IDisposable实现 - 'if (disposing)'应该怎么做
  14. rm -rf 真是删库跑路的一把好手
  15. 动态规划问题——当一脸懵逼后的心路历程
  16. (八)相机对焦功能实现
  17. 思科—计算机网络课程设计—第一章路由概念测试
  18. OpenGL shader笔记
  19. 最多K次交换冒泡排序
  20. 安装Android应用至SD卡

热门文章

  1. yii2手动添加插件PHPExcel
  2. C++后端开发程序员应该彻底搞懂的【libevent网络库】,libevent组件构成以及编程要领丨Linux服务器开发丨服务端编程
  3. linux下进程间管道通信,Linux下进程间通信方式-管道
  4. android键盘怎么打韩文,教你如何打韩文---韩语键盘及打字技巧
  5. 【Linux服务器开发系列】手写用户态协议栈,udpipeth数据包的封装,零拷贝的实现,柔性数组
  6. python c 混合编程 用c循环_python 与 c/c++混合编程
  7. postek二次开发_详解Visual Basic脚本在BarTender中的应用
  8. azw3 python数据分析 活用pandas库_Python数据分析 活用Pandas库 数据科学教程数据分析入门图书 Python编程入门数据处理...
  9. 面试中经常问到的几个问题,快来看看能答对几道吧
  10. 你想知道的网易云音乐推荐架构解析,都在这里!