关于文件存储的一些调研
背景
最近在做 如何做一个分布式截图服务 的准备,因此需要调研一下文件存储上都有些什么方案。
主要需要调研以下内容:
- 基础设施层,主要调研 机械硬盘、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、群晖
基础设施
文件系统
参考文档:
- 文件系统的实现
- 深入理解 ext4 等 linux 文件系统
- ext4 的 wiki
- github openzfs
- exfat 系统的一些讨论
- Linux下几种常用文件系统Ext4、XFS、ZFS以及Btrfs的简介及优缺点对比
应用层
minio
github 地址: minio
官方文档:minio
中文文档:minio
- 不使用中央式 meta 存储
- 底层采用文件存储
- 大量小文件性能较差
- 分布式通过 EC 方案保证高可用
- 集群内无法扩容,仅能通过扩充集群组联邦实现
- minio 作者也是 glusterFS 的创始人
- minio 采用的开源协议是 GNU AGPLv3,商用有隐患
可以参考的文档:
ceph
- 提供 块存储、文件存储、对象存储 三种方式
- 元数据存储在 MDS 组件集群中
- MON 组件负责集群信息同步和处理
- OSD 是集群中真正处理存储的模块 (一个磁盘区对应一个 osd daemon,多个 osd daemon 组成了 osd 集群)
- radosgw 对象存储网关,用来兼容 S3 和 swift 协议
- ceph 读写文件都是按照一个固定文件大小进行的,例如 2MB,因此对大量非常小的文件而言有较大空间和性能损耗
- 在 openstack 的后端存储统计中,ceph 占比 81%, lvm 8%,nfs 5%,glusterfs 1%
ceph 还是不错的,值得一试。
可以参考的文档:
glusterFS
- 通过挂载操作系统的 vfs 进行交互
- 通过 复制卷 的方式保证数据安全
- 和 lvm 类似,可以组条带化的方案提升性能
- 没有中央的 meta 管理,这点和 minio 一样,保持简单,对查询不友好
可以参考的文档:
fastdfs
项目代码地址: fastdfs
- 文件直接存储,没有做分块
- 大文件要做安全性只有通过复制集,存储量比较大
- C 语言开发
hdfs
- 适合大文件,流式读
- 具有强容错能力和扩展能力
- 不适合要求延时低的场景
- 不适合大量小文件
可以参考的文档:
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
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!