关于文件存储的一些调研

背景

最近在做 如何做一个分布式截图服务 的准备,因此需要调研一下文件存储上都有些什么方案。

主要需要调研以下内容:

  • 基础设施层,主要调研 机械硬盘、ssd、闪存、网卡、lvm、raid
  • 本地文件系统及网络文件系统,主要调研 fat、exfat、ntfs (windows)、hfs(mac)、zfs、xfs、ext、nfs、smb
  • 分布式存储主要调研 oss、kodo、fastDFS、glusterFS、ceph、minio、longhorn、ipfs、hdfs
  • 相关应用主要参考 mongodb、etcd、群晖

基础设施

文件系统

参考文档:

应用层

minio

github 地址: minio
官方文档:minio
中文文档:minio

  1. 不使用中央式 meta 存储
  2. 底层采用文件存储
  3. 大量小文件性能较差
  4. 分布式通过 EC 方案保证高可用
  5. 集群内无法扩容,仅能通过扩充集群组联邦实现
  6. minio 作者也是 glusterFS 的创始人
  7. minio 采用的开源协议是 GNU AGPLv3,商用有隐患

可以参考的文档:

ceph

  1. 提供 块存储、文件存储、对象存储 三种方式
  2. 元数据存储在 MDS 组件集群中
  3. MON 组件负责集群信息同步和处理
  4. OSD 是集群中真正处理存储的模块 (一个磁盘区对应一个 osd daemon,多个 osd daemon 组成了 osd 集群)
  5. radosgw 对象存储网关,用来兼容 S3 和 swift 协议
  6. ceph 读写文件都是按照一个固定文件大小进行的,例如 2MB,因此对大量非常小的文件而言有较大空间和性能损耗
  7. 在 openstack 的后端存储统计中,ceph 占比 81%, lvm 8%,nfs 5%,glusterfs 1%

ceph 还是不错的,值得一试。

可以参考的文档:

glusterFS

  1. 通过挂载操作系统的 vfs 进行交互
  2. 通过 复制卷 的方式保证数据安全
  3. 和 lvm 类似,可以组条带化的方案提升性能
  4. 没有中央的 meta 管理,这点和 minio 一样,保持简单,对查询不友好

可以参考的文档:

fastdfs

项目代码地址: fastdfs

  1. 文件直接存储,没有做分块
  2. 大文件要做安全性只有通过复制集,存储量比较大
  3. C 语言开发

hdfs

  1. 适合大文件,流式读
  2. 具有强容错能力和扩展能力
  3. 不适合要求延时低的场景
  4. 不适合大量小文件

可以参考的文档:


Neither a lofty degree of intelligence nor imagination nor both together go to the making of genius. Love, love, love, that is the soul of genius.
Wolfgang Amadeus Mozart