分布式文件系统选型小记
分布式文件系统选型小记
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
分布式文件系统选型小记相关推荐
- 主流分布式文件系统选型,写得太好了!
上一篇:深夜看了张一鸣的微博,让我越想越后怕 作者:张轲1983 来源:https://www.jianshu.com/p/fc0aa34606ce 一.概述 分布式文件系统是分布式领域的一个基础应用 ...
- 分布式文件系统对比与选型参考
一.分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.分布式文件系统的设计基于客户 ...
- Moosefs分布式文件系统的搭建与维护
一.文件系统选型 在一般的生产环境中,NFS共享存储算是比较常用的,简单.方便,但随着业务的不断扩展,数据量也是承爆发式的增长,因而对存储这些数据的文件系统要求也越来越高了,分存式.可扩展.大容量,这 ...
- [转]Unix下针对邮件,搜索,网络硬盘等海量存储的分布式文件系统项目(关于GFS、MogileFS分布式文件系统邮件列表)
Unix下针对邮件,搜索,网络硬盘等海量存储的分布式文件系统项目 :Google是当前最有影响的Web搜索引擎,它利用一万多台廉价PC机构造了一个高性能.超大存储容量.稳定.实用的巨型Linux集群. ...
- Unix下针对邮件,搜索,网络硬盘等海量存储的分布式文件系统项目
:Google是当前最有影响的Web搜索引擎,它利用一万多台廉价PC机构造了一个高性能.超大存储容量.稳定.实用的巨型Linux集群. http://bbs.chinaunix.net/forum/v ...
- 安卓文件系统服务器端概要设计,分布式文件系统概要设计.docx
<分布式文件系统概要设计.docx>由会员分享,提供在线免费全文阅读可下载,此文档格式为docx,更多相关<分布式文件系统概要设计.docx>文档请在天天文库搜索. 1.分布 ...
- 【网课平台】Day3.网关与分布式文件系统
文章目录 一 .媒资模块环境搭建 1. 网关gateway 2.Nacos 3.搭建gateway 二.分布式文件系统 2.1 文件系统 2.2 分布式文件系统 2.3 MinIO 四.上传图片 4. ...
- 2021年大数据Hadoop(七):HDFS分布式文件系统简介
2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 HDFS分布式文件系统 ...
- 分布式文件系统(FastDFS)安装 配置
[TOC] 百度百科: FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文 ...
最新文章
- MacBook Air写代码真香!包邮送一台!
- Starting MySQL... ERROR! The server quit without updating PID file 问题解决
- hive动态分区shell_Hive动态分区 参数配置及语法
- 【Android 逆向】Android 逆向通用工具开发 ( Android 端远程命令工具 | Android 端可执行程序的 main 函数操作 | TCP 协议服务器建立 | 接收客户端数据 )
- python语言:装饰器原理
- js便利json 数组的方法
- mysql更新数据 update格式和alter对比
- 前端学习(2532):Vuex中action
- 12-Java读写CSV格式文件(opencsv)
- 实现Windows Phone 8多媒体:视频
- spring 监听器
- [数据结构] 三十二叉堆
- java idisposable_IDisposable实现 - 'if (disposing)'应该怎么做
- rm -rf 真是删库跑路的一把好手
- 动态规划问题——当一脸懵逼后的心路历程
- (八)相机对焦功能实现
- 思科—计算机网络课程设计—第一章路由概念测试
- OpenGL shader笔记
- 最多K次交换冒泡排序
- 安装Android应用至SD卡
热门文章
- yii2手动添加插件PHPExcel
- C++后端开发程序员应该彻底搞懂的【libevent网络库】,libevent组件构成以及编程要领丨Linux服务器开发丨服务端编程
- linux下进程间管道通信,Linux下进程间通信方式-管道
- android键盘怎么打韩文,教你如何打韩文---韩语键盘及打字技巧
- 【Linux服务器开发系列】手写用户态协议栈,udpipeth数据包的封装,零拷贝的实现,柔性数组
- python c 混合编程 用c循环_python 与 c/c++混合编程
- postek二次开发_详解Visual Basic脚本在BarTender中的应用
- azw3 python数据分析 活用pandas库_Python数据分析 活用Pandas库 数据科学教程数据分析入门图书 Python编程入门数据处理...
- 面试中经常问到的几个问题,快来看看能答对几道吧
- 你想知道的网易云音乐推荐架构解析,都在这里!