分布式文件存储MinIO SeaweedFS FastDFS对比总结

 

首先,看下这几篇文章:

 

总体思路:

分布式文件存储选型考虑点

 

专题分析:

1、SeaweedFS

    参见我的这篇文章《分布式文件存储SeaweedFS试用对比总结》

2、MinIO

    参见我的这篇文章《分布式文件存储MinIO试用对比总结》

3、FastDFS

    参见我的这几篇文章《FastDFS的一些缺点(强烈需要注意)》《FastDFS集群部署和使用

 

4、还有一些我没仔细看过的,简单分析一下

比如:

    Ceph:https://github.com/ceph/ceph

    GlusterFS:https://github.com/gluster/glusterfshttps://www.gluster.org

    MooseFS:https://github.com/moosefs/moosefs

    GridFS:https://docs.mongodb.com/manual/core/gridfs/

    简单看了下MooseFS社区,不够活跃,而且有些高级功能要Pro版才有。

    而GridFS,是MongoDB的一部分,不像是专业的分布式文件系统。

 

    总之,目前来看,开源的分布式文件存储,目前就4选一吧:MinIO、SeaWeedfs、GlusterFS、Ceph!

 

    但是据说,GlusterFS小文件存储不如SeaWeedfs,参见:https://blog.csdn.net/karamos/article/details/80130751

 

    另外,有人不建议用Ceph:“After working with Ceph for 11 months I came to conclusion that it utterly sucks(糟糕透了) so I suggest to avoid it.”,参见:https://stackoverflow.com/questions/17425153/distributed-file-systems-gridfs-vs-glusterfs-vs-ceph-vs-hekafs-benchmarks,另外我发现SeaWeedfs居然是2013年开始的,也算非常老牌的了,毕竟2012年Golang才发布第一版!

 

    SeaWeedFS官方有与Ceph的对比,参见:

https://github.com/chrislusf/seaweedfs#compared-to-other-file-systems

https://github.com/chrislusf/seaweedfs/issues/120

 

    综合了很多意见,我优先选择了 MinIO 和 SeaweedFS进行试用。

 

MinIO 和 SeaweedFS 简单对比

    MinIO是N个磁盘,可以任意损坏N/2个,而数据不会丢失,但是这种情况下只能读,不能写,如果有N/2+1个磁盘完好,则可以读写。实际磁盘空间占用,我的测试结果为:一个31,294,295 b的文件,10个磁盘的情况下,每个磁盘分到恰好6258955 b,占用总磁盘空间是单个文件size的恰好2倍。另外,我还测过4个磁盘的情形,总size也是单个文件的2倍。

    而SeaweedFS的说明如下:

    SeaweedFS implemented RS(10,4), which allows loss of 4 shards of data with 1.4x data size. Compared to replicating data 5 times to achieve the same robustness, it saves 3.6x disk space.

    If up to 4 shards are down, the data is still accessible with reasonable speed.

    翻译:SeaweedFS允许10个分片,挂掉4个,而数据仍然可以读,数据size为单个的1.4倍。如果要通过全量复制达到相同的效果,允许挂掉一个,那就需要4+1=5个分片。

    换句话说,一个10M的文件,SeaweedFS将其存放在10个分片上,一共才占用14M的空间,达到的效果是可以挂掉4个分片。而如果要通过全量复制的方式,要5个分片,占用的空间为50M。节省了36M磁盘空间,节省了36/50=72%,同样,分片越多,节省得越多。

    和MinIO对比一下,MinIO要达到挂掉4个分片可以,只需要8个分片,但是占用空间为20M,节省了60%的空间。这方面不如SeaweedFS的72%,但是可以节省2个分片。

    另外,说一下我遇到的问题,MinIO在10个分片的时候,启动非常慢,也可能是我虚拟机的配置非常低问题(1cpu+1G内存,带动10个分片的MinIO),但是侧面也说明MinIO资源占用非常低,1G内存居然可以带动10个分片!

 

SeaweedFS

    SeaweedFS将磁盘进行了分组,分为DataCenters、Racks(机架),Servers和Hard Drive,从而保证了更高的可用性。像MinIO那样,volume是没有分组的,文件分布没有权重,感觉是要差一点。

    SeaweedFS兼容Amazon S3的大多数常用API,同样SeaweedFS也支持命令行管理文件,以及HTTP API,且支持将虚拟文件系统挂载到操作系统上(FUSE),这样的话,操作文件甚至比Browser更方便有木有!

    另外,SeaweedFS支持两个集群之间的数据全量或实时同步(借助Kafka等MQ),这在跨数据中心同步文件时很重要。同时,这个功能可以将数据实时备份到云存储(Amazon S3, Google Cloud Storage, Azure,阿里云等)。

    还支持纠删码(Erasure Coding for warm storage),貌似是很牛逼的功能。

 

    说下SeaweedFS的缺点吧:中小型文件效率非常高,但是它的单卷最大容量被程序限制到30GB,对超大文件(比如500MB以上),我感觉它的设计不是很占优势。我建议存储的文件以100MB以内的为主(当然,有少数较大的文件也没任何问题)。

 

    具体参见我的这篇文章《分布式文件存储SeaweedFS试用对比总结》

 

 

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
分布式Minio是一个可以将多块硬盘组成一个对象存储服务的解决方案。它通过在不同的节点上分布硬盘,避免了单点故障的问题。分布式Minio严格遵守read-after-write一致性模型,确保所有读写操作的一致性。要启动一个分布式Minio实例,你只需要将硬盘位置作为参数传递给minio server命令,并在所有其他节点上运行相同的命令。所有运行分布式Minio的节点应共享一个共同的根凭证,以便节点之间的连接和信任。建议在执行Minio服务器命令之前,将root用户和root密码导出为环境变量MINIO_ROOT_USER和MINIO_ROOT_PASSWORD,并在所有节点上导出。如果没有导出,可以使用默认凭据minioadmin/minioadmin。Minio将创建每组2到16个驱动器的纠删码集。您提供的驱动器总数必须是这些数字之一的倍数。分布式Minio选择最大的EC集大小,并将其划分为给定的驱动器总数或节点总数,以确保均匀分布,即每个节点参与每组相同数量的驱动器。每个对象都被写入单个EC集,因此它们分布在不超过16个驱动器上。建议所有运行分布式Minio设置的节点是同质的,即操作系统相同、磁盘数量相同、网络互连相同。分布式Minio需要新的目录,如果需要,可以与其他应用程序共享驱动器。您可以通过使用Minio独有的子目录来实现此目的。例如,如果您已将卷安装在/export下,则可以将其作为参数传递给Minio服务器/export/data。运行分布式Minio实例的服务器之间的时间间隔应小于15分钟。为了确保服务器之间的时间同步,建议启用NTP服务。在Windows操作系统上运行分布式Minio被认为是实验性的,请谨慎使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值