常用分布式文件系统(对象存储)对比-SeaweedFS、Minio
作者:mmseoamin日期:2024-03-04

常用分布式文件系统,相对比较热门的有Minio,SeaweedFS,FastDFS,ceph。主要对比一下Minio,SeaweedFS。

什么是SeaweedFS?

SeaweedFS是一种简单的、高度可扩展的分布式文件系统。SeaweedFS是一个非常优秀的由 Go语言开发的分布式存储开源项目。它是用来存储文件的系统,并且与使用的语言无关,使得文件储存变得非常方便,它有两个优势:

  • 存储数十亿的文件!
  • 查看文件速度快!

    SeaweedFS设计用来有效地存储处理小文件,较大文件可以分块拆分为小文件进行上传。所有文件的元数据不存储在Master节点,而是分散存储在Volume(逻辑卷,存储数据的逻辑结构)中,Master节点只保存卷 ID到卷服务器的映射,这样一来,Master节点的查询压力就被分散到volume节点了。这些文件卷服务器各自管理各自的元数据,存储在卷服务器上的所有文件元信息都可以从内存中读取,而无需访问磁盘。所以这样在高并发的情况下减少了主节点的压力和网络通信,同时定位文件也更迅速。其主要应用场景是存储海量的图片信息并且可以快读定位。

    SeaweedFS是使用Go语言开发的,Github主页为:https://github.com/chrislusf/seaweedfs,使用SeaweedFS可以通过源码编译,需要提前安装Go环境;也可以使用编译好的二进制包,不依赖Go环境直接执行。Githup地址: https://github.com/chrislusf/seaweedfs   

    Seaweedfs: 海藻是一个简单和高度可扩展的分布式文件系统,可以快速存储和服务数十亿个文件!

    SeaseedFS对象存储具有O(1)磁盘寻道、透明云集成,SeaseedFS Filer支持跨DC主动-主动复制,Kubernetes,POSIX,S3 API,加密,热存储擦除编码,FUSE mount,Hadoop,WebDAV。

    SeaweedFS架构:

    常用分布式文件系统(对象存储)对比-SeaweedFS、Minio,第1张

    • master service【主服务】和Volume service【卷服务】一起提供分布式对象存储服务,支持用户配置数据的复制和冗余策略。
    • 可选的Filer service【过滤器】和S3 service【S3服务】是对象存储之上的附加层,可以根据需要进行部署
    • 可选的Filer可以支持目录和POSIX属性。Filer是一个独立的线性可扩展的无状态服务器,具有可定制的元数据存储,例如MySql, Postgres, Redis, Cassandra, HBase, Mongodb, Elastic Search, LevelDB, RocksDB, Sqlite, MemSql, TiDB, Etcd, CockroachDB, YDB等。
    • 这些服务中的每一个都可以作为一个或单独的实例在各种实际服务器上运行。

      SeaweedFS主要组件功能

      • master:负责管理所有的卷服务器(volume servers),分配文件ID,维护集群的元数据和状态。
      • volume:负责存储实际的文件内容,以及文件的大小,修改时间等属性。
      • filer:负责提供一个类似POSIX的文件层次结构,以及支持多种接口,如WebDAV,Hadoop等。
      • S3:负责提供一个兼容S3 API的网关,以及支持云端备份和分层存储等功能


        与Minio的区别
        SeaweedFS和minio都是开源的分布式对象存储系统,它们都支持S3 API,并且可以用于存储和处理大量的数据。但是它们也有一些区别,主要有以下几点:

        • SeaweedFS使用了一个独特的文件ID机制,将文件元数据和文件内容分开存储,从而避免了元数据瓶颈,并且可以实现O(1)的磁盘寻址minio则使用了传统的文件名和目录结构来组织文件,但是也提供了一些高级功能,如加密,压缩,版本控制等。
        • SeaweedFS提供了一个filer组件,它可以在master和卷服务器之间提供一个类似POSIX的文件层次结构,以及支持WebDAV,Hadoop等多种接口。minio则主要依赖于S3 API来访问和管理文件,但是也提供了一些其他工具,如mc命令行客户端,minio console web界面等。
        • SeaweedFS支持云端备份和分层存储,可以将冷数据迁移到云端存储服务,如AWS S3,Google Cloud Storage等。minio则支持多云复制和联邦模式,可以将数据在不同的云端存储服务之间同步和迁移。
        • SeaweedFS支持纠删码(Erasure Coding),可以在卷级别提高数据的可靠性和容错性。minio则支持分布式纠删码(Distributed Erasure Coding),可以在集群级别提高数据的可靠性和容错性。
        • MinIO没有针对大量小文件进行优化。文件只是按原样存储在本地磁盘上。再加上用于擦除编码的额外元文件和碎片,它只会放大LOSF问题。
        • MinIO读取一个文件需要多次磁盘IO,而SeaweedFS是O(1),即使对于擦除编码的文件也是如此。
        • MinIO具有全时擦除编码。SeaweedFS在热数据上使用复制以获得更快的速度,并可选择在热数据上应用擦除编码。
        • MinIO没有类似posix的API支持。
        • MinIO对存储布局【存储布局】有特定的要求导致不能灵活调整,在SeaweedFS中,调整只需启动一个指向主卷的卷服务器即可。

          MinIO的缺点:

          - 仅支持EC,会存在io放大的问题,特别是在大量小文件的场景下

          - 扩容不太友好,对等扩容时需要全集群停止服务

          - 支持的文件数量有限,基于本地文件系统设计,在对象数变多以后,inode的查找都会变得很耗时

           

          SeaweedFS的缺点:S3的适配不完全: 实现了大部分的常用接口,部分非常用接口未实现,比如Canned ACL等


          总的来说,SeaweedFS和minio都是优秀的分布式对象存储系统,它们各有各的优势和特点,选择哪一个取决于你的具体需求和场景。

          Minio

          minio应该是目前最火的开源的对象存储,github 3w4的star数。

          minio的优点包括: 

          • - 友好的UI 
          • - 部署比较简单,很容易上手 
          • - 支持文件级别的自愈,在节点故障时无需人工干预 
          • - 全EC存储,成本相对比较低 
          • - 中大文件性能比较好 
          • - 基于文件系统设计,无需额外的存储来存储元数据

            同样minio的缺点也相对明显 

            • - 仅支持EC,会存在io放大的问题,特别是在大量小文件的场景下 
            • - 扩容不太友好,对等扩容时需要全集群停止服务 
            • - 支持的文件数量有限,基于本地文件系统设计,在对象数变多以后,inode的查找都会变得很耗时

              minio是一款有明显优缺点的产品,在我们的需求背景下,minio不能够很好的满足,特别是不能够支持我们10亿+对象存储需求,而且在现有的架构设计下,也不太好改造,然后通过与社区共建的方式来满足我们海量小文件的需求。

              SeaweedFS

              越来越火的对象存储开源方案,github star数1w5+,且增长速度比较喜人,社区也比较活跃。

              SeaweedFS官方介绍的核心点有2个 

              - to store billions of files! 

              - to serve the files fast!

              SeaweedFS是一个简单且高度可扩展的分布式文件系统,两个目标: 1、存储数十亿的文件! 2、查看文档快!

              核心优点包括: 

              - 性能比较强大: 核心理论依据是基于 Facebook's Haystack design paper,该paper的目标也是解决facebook内部图片视频等数据的存储查询问题 

              - 架构设计比较灵活: 系统设计参照了Facebook’s Tectonic Filesystem,特别是几个核心组件的设计,抽象的比较好,非常方便扩展不同的实现,并且整体架构上可以水平扩容,没有明显的瓶颈点 

              - 功能齐全: 存储比较关心的冷热分离,EC存储,TTL等功能都有支持 

              - 部署简单: 部署非常简单,很容易上手

              相比于优点,也会有些不足 - S3的适配不完全: 实现了大部分的常用接口,部分非常用接口未实现,比如Canned ACL等。 - 项目背景: 相比于minio等开源产品后面都是强大的商业化公司,该项目核心的作者只有 chrislusf 大神

              MinIO

              MinIO 是GlusterFS创始人之一Anand Babu Periasamy发布的开源项目,基于Apache V2 license 100% 开放源代码。MinIO采用Golang实现,客户端支持Java、Python、Javacript、Golang语言等。在中国,阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品。

              设计的主要目标是作为私有云对象存储的标准方案。非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据、容器和虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T。

              Minio它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/ VM映像。对象的大小可以从几KB到最大5TB。

              HDFS(Hadoop Distributed File System)

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


              FastDFS是一款类似GoogleFS的开源分布式文件系统,是纯C语言开发的。FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

              HDFS:存在单点故障。交互式应用,低延迟很难知足。设计中没有考虑修改写、截断写、稀疏写等复杂的posix语义,目的并不是通用的文件系统,一般作为hadoop ecosystem的存储引擎。不支持多用户并发写相同文件。

              FastDFS:当一个storage中的某一目录挂载的磁盘损坏的话,不能进行自动恢复,需要手动恢复比较麻烦。不支持FUSE、POSIX。不支持断点续传。对跨公网的文件同步,存在较大延迟,需要应用做相应的容错策略。同步机制不支持文件正确性校验,降低了系统的可用性。