常用分布式文件系统,相对比较热门的有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的区别
SeaweedFS和minio都是开源的分布式对象存储系统,它们都支持S3 API,并且可以用于存储和处理大量的数据。但是它们也有一些区别,主要有以下几点:
MinIO的缺点:
- 仅支持EC,会存在io放大的问题,特别是在大量小文件的场景下
- 扩容不太友好,对等扩容时需要全集群停止服务
- 支持的文件数量有限,基于本地文件系统设计,在对象数变多以后,inode的查找都会变得很耗时
SeaweedFS的缺点:S3的适配不完全: 实现了大部分的常用接口,部分非常用接口未实现,比如Canned ACL等
总的来说,SeaweedFS和minio都是优秀的分布式对象存储系统,它们各有各的优势和特点,选择哪一个取决于你的具体需求和场景。
Minio
minio应该是目前最火的开源的对象存储,github 3w4的star数。
minio的优点包括:
同样minio的缺点也相对明显
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。不支持断点续传。对跨公网的文件同步,存在较大延迟,需要应用做相应的容错策略。同步机制不支持文件正确性校验,降低了系统的可用性。