Storage Awesome
考虑因素
- 怎么用
- 确定使用方
- 用户 - 例如: S3
- 操作系统 - 例如: GFS, DRBD, NFS
- SaaS 服务 - 有 软件定义存储 的能力 - 租户、隔离、BYOD
- 选择网络接口协议
- 块 vs 文件 vs 对象
- 需要什么样的功能 - 快照、备份、加密
- SDS
- 特殊场景 - 小文件、批处理、机器学习、锁、实时性
- 确定使用方
- 有什么
- 网络带宽、网络延时
- 存储设备情况 - NVME、SATA、SAS
- SAN 环境?
- 面对什么样的威胁
- 磁盘损坏
- 网络异常
90% 的情况下都不需要分布式存储,单机使用 ZFS 可以把存储能力叠到很高。
基于单机存储也可以实现 SDS - 软件定义存储。
- Durability
- earendil-works/absurdGitHubearendil-works/absurd
- 关于 durability 的实验项目。
- earendil-works/absurdGitHubearendil-works/absurd
网络接口协议
- 对象存储协议 - KV, 不需要文件语义
- s3
- swift
- 文件服务 - 通用, 有文件语意, 不需要 POSIX
- webdav - 唯一 Web 环境可用的协议, 支持面广, 简单
- ftp,sftp,ftps
- 本地文件共享 - 对速度和使用环境有要求, 通常是 POSIX 兼容
- nfs
- smb,cifs
- afp
- 分布式文件 - 数据处理, 代码靠近数据
- hdfs
- 块设备协议
- iscsi
- nvme-tcp
- sata
- ide
- 操作系统接口
- fuse
- sshfs
- rdb
- SPDK, NVMe-oF
- virtio-fs
- 文件系统笔记分区类型代码 (Partition Type Codes)List of file systems - Wikipedia · See internal list ( command). · | Code | Description | · | 0700 | Microsoft basic data |打开:/notes/os/linux/fs
Awesome
- Distributed File Systems/Software Defined Storage
- ceph笔记Ceph适用场景 · 单独存储集群 · 大存储集群 - 100TB+ PB+ · 不适用场景 · 不太适合于直接部署到 k8s 小集群作为微服务存储使用 · 简单的分布式文件系统 · ceph/ceph · LGPL-2.1+LGPL-3.0, C++打开:/notes/service/storage/ceph
- LGPLv2.1
- by RedHat
- S3 - 对象存储
- POSIX - 文件存储
- RBD - 块存储
- RAOD - 底层
- 对网络带宽和磁盘带宽要求高
- glusterfs笔记Glusterheketi/heketi · RESTful based volume management framework for GlusterFS · #268 - 不兼容 alpine musl · Ceph · 基于对象 · 支持非结构化数据打开:/notes/service/storage/gluster - POSIX
- lustre
- GPLv2, LGPL, C
- 利用很多 ZFS 特性
- lustre/lustre-releaseGitHublustre/lustre-release
- ThinkParQ/beegfsGitHubThinkParQ/beegfs
- hdfs - 大数据, 计算->存储
- openio-sds
- longhorn
- ceph笔记Ceph适用场景 · 单独存储集群 · 大存储集群 - 100TB+ PB+ · 不适用场景 · 不太适合于直接部署到 k8s 小集群作为微服务存储使用 · 简单的分布式文件系统 · ceph/ceph · LGPL-2.1+LGPL-3.0, C++打开:/notes/service/storage/ceph
- S3笔记S3garage · MinIO · oxyno-zeta/s3-proxy · Apache-2.0, Go · Reverse Proxy with GET, PUT and DELETE methods and authentication打开:/notes/service/storage/s3
- minio笔记MinIO最后的 Apache-2.0 协议版本为 MinIO 6.7.4 · minio 是什么? · MinIO 全线产品 AGPL 协议 · 提供 S3 对象存储协议的服务 · 支持分布式高可用 · 支持用户、分组、策略、KMS · 支持 OpenID 和 LDAP打开:/notes/service/storage/minio - S3
- AGPLv3, Go
- 支持作为 S3 代理
- garage笔记garageDeuxfleurs/garage · AGPLv3, Rust · 分布式 S3-compatible object store · metadata + chunk · metadata - lmdb, sqlite · chunk - 1M打开:/notes/service/storage/s3/garage
- Rust
- versity/versitygwGitHubversity/versitygwversity/versitygw · Apache-2.0, Go · S3 Gateway · Local -> S3 · S3 -> S3 · Backend · posix · metadata · xattrs · --sidecar/VGWMETASIDECAR - 存储到一个额外目录笔记:versitygw
- Apache-2.0, Go
- S3 Gateway
- Local -> S3, S3 -> S3
- minio笔记MinIO最后的 Apache-2.0 协议版本为 MinIO 6.7.4 · minio 是什么? · MinIO 全线产品 AGPL 协议 · 提供 S3 对象存储协议的服务 · 支持分布式高可用 · 支持用户、分组、策略、KMS · 支持 OpenID 和 LDAP打开:/notes/service/storage/minio - S3
- S3 to FS/FUSE
- Barre/ZeroFSGitHubBarre/ZeroFS
- AGPLv3. Rust
- 9P/NFS/NBD on top of S3
- s3fs-fuseGitHubs3fs-fuse/s3fs-fuseusecache 会缓存整个文件而不是访问到的部分 · 和 自己维持缓存没区别 · s3fs 限制 - 有些限制来自 s3, 有些限制来自 fuse · 不能 append · stat 性能差 · 由于大多存储是最终一致,可能会导致 stale read - 部分 provider 支持 read-after-write consistency笔记:s3fs
- GPLv2, C++
- inotify 不会检测到外部修改
- 不支持原子 rename
- archiecobbs/s3backerGitHubarchiecobbs/s3backer
- GPLv2, C
- FUSE/NBD single file backing store via Amazon S3
- rclone mount
- kahing/goofysGitHubkahing/goofys
- Apache-2.0, Go
- 性能更好,更少的 POSIX 兼容
- 不怎么维护
- s3ql/s3qlGitHubs3ql/s3ql
- GPLv3, Python
- 自有存储格式
- Barre/ZeroFSGitHubBarre/ZeroFS
- Object Storage/对象存储
- Swift
- linkedin/ambryGitHublinkedin/ambry
- Apache-2.0, Java
- Distributed object store
- apache/ozoneGitHubapache/ozone
- Apache-2.0, Java
- for Apache Hadoop
- 文件存储/File Storage
- 9001/copypartyGitHub9001/copyparty
- MIT, Python, JS
- Portable file server with accelerated resumable uploads, dedup, WebDAV, FTP, TFTP, zeroconf, media indexer, thumbnails++
- juicefs笔记juicefsjuicedata/juicefs · Apache-2.0, Go · 元数据 和 数据 分离 · distributed POSIX fs · metadata - Redis, Postgres, MySQL, SQLite3, badger, TiKV打开:/notes/service/storage/juicefs
- moosefsGitHubmoosefs/moosefs
- GPLv2, C
- Alluxio/alluxioGitHubAlluxio/alluxio
- Apache 2.0, Java
- Tachyon
- UFS
- nfs
- NFSv3, NFSv4
- nfs-ganesha/nfs-ganeshaGitHubnfs-ganesha/nfs-ganesha
- NFSv3,v4,v4.1
- user mode
- smb
- cifs
- afp
- netatalk
lizardfsGitHublizardfs/lizardfs
- 9001/copypartyGitHub9001/copyparty
- 块存储/Block Storage
- GFS2
- Global File System 2
- Symmetric Shared-Disk
- 分布式锁管理器 (DLM) 来协调节点间的访问 - Pacemaker、 Corosync
- GFS2
- Drive/Cloud Storage/云盘
- nextcloud笔记NextCloudPrimary Storage · 可以使用 S3 或 Swift 作为主要存储 · lib/Files/ObjectStore · User Authentication with LDAP · The LDAP app is not compatible with the User backend using remote HTTP servers...打开:/notes/service/storage/nextcloud
- AGPLv3, PHP
- file sync and share platform
- cloudreve/CloudreveGitHubcloudreve/Cloudrevecloudreve/Cloudreve · GPLv3, Go, Gin, ent, React, Redux, Material-UI · file management and sharing system, supports multiple storage providers笔记:Cloudreve
- GPLv3, Go
- file management and sharing system, supports multiple storage providers
- nimbusdotstorage/NimbusGitHubnimbusdotstorage/Nimbus
- Apache-2.0, TS
- open source alternative to Google Drive, One Drive, iCloud, etc.
- nextcloud笔记NextCloudPrimary Storage · 可以使用 S3 或 Swift 作为主要存储 · lib/Files/ObjectStore · User Authentication with LDAP · The LDAP app is not compatible with the User backend using remote HTTP servers...打开:/notes/service/storage/nextcloud
国人开发/维护
- seaweedfs笔记seaweedfs默认构建的单 只支持 30G - 对分布式文件系统来说太小了 · weed 的 filer/s3 依赖 metadata - 维护 metadata db 增加复杂度,影响稳定性 · chrislusf/seaweedfs · Apache-2.0, Go打开:/notes/service/storage/seaweedfs - 快存储,小文件优化
- Apache-2.0, Go
- 对象存储+filter 提供文件存储
- S3 基于 filter 纬度
- 开发活跃,作者活跃
- juicefs笔记juicefsjuicedata/juicefs · Apache-2.0, Go · 元数据 和 数据 分离 · distributed POSIX fs · metadata - Redis, Postgres, MySQL, SQLite3, badger, TiKV打开:/notes/service/storage/juicefs
- Apache-2.0, Go
- AGPL-3.0 -> Apache-2.0
- 代理层
- metadata - Redis, TiKV, PG, MySQL
- data - S3, OSS, Ceph, MinIO
- 使用 S3 提供数据,但不会用 S3 结构,而是自己的逻辑结构,因此文件无法对应
- opencurve/curveGitHubopencurve/curve
- Apache-2.0, C++
- 块存储
- by 网易
- cubefsGitHubcubefs/cubefsApache-2.0, Go, C++ · by 京东, OPPO, 贝壳 · ChubaoFS -> CubeFS · CNCF 项目 · 提供 S3 接口 · POSIX · 多租户 · 兼容 Hadoop FileSystem 接口协议笔记:cubefs
- Apache-2.0, Go,C++
- by 京东, OPPO
- chubaofs -> cubeFS
- CNCF 项目
- 提供 S3 接口
- POSIX
- 多租户
- happyfish100/fastdfsGitHubhappyfish100/fastdfs
- GPL-3.0, C
- haiwen/seafileGitHubhaiwen/seafile
- GPL, C
- 🚧 开发不活跃
- 参考
协议库
- drakkan/sftpgoGitHubdrakkan/sftpgodrakkan/sftpgo · AGPL-3.0, Go · 协议支持 SSH, FTP, WebDAV · 存储支持 S3, Google Cloud Storage, Azure Blob, SFTP, HTTP/S · 提供 WebClient /web/client 和 WebAdmin /web/admin笔记:sftpgo
- AGPL-3.0, Go
- SFTP server with optional HTTP, FTP/S and WebDAV support - S3, Google Cloud Storage, Azure Blob
- wthorp/GoSMBGitHubwthorp/GoSMB
- SMB server written in Go
- hirochachacha/go-smb2GitHubhirochachacha/go-smb2
- SMB2/3 client
- smallfz/libnfs-goGitHubsmallfz/libnfs-go
- NFSv4 server
- vmware/go-nfs-clientGitHubvmware/go-nfs-client
- NFS client
- Cyberax/go-nfs-clientGitHubCyberax/go-nfs-client
- NFSv4 client
- willscott/go-nfsGitHubwillscott/go-nfs
- NFSv3 server
Fuse
- dokan-dev/dokanyGitHubdokan-dev/dokany
- Windows
- deadbeefsociety/sshfsGitHubdeadbeefsociety/sshfs
- sagemathinc/websocketfsGitHubsagemathinc/websocketfs
- like sshfs, but over a WebSocket
Sync/Transfer/Backup
- restic/restic笔记resticrestic/restic · BSD-2, Go · fast, secure, efficient backup · Linux, macOS, Windows打开:/notes/service/storage/backup/restic
- Fast, secure, efficient backup program
- 仓库 本地,SFTP, REST, S3, Minio, Wasabi, OSS, Swift
- 支持 rclone
- 支持加密
- 支持快照
- rsync笔记rsync数据量大,有条件的情况下,尽量用 rclone,支持并发。 · 3.x GPLv2 -> GPLv3 · macOS 带的还是 rsync 2.x - GPLv2 · librsync · GNU LGPL v2.1 · kristapsdz/openrsync打开:/notes/service/storage/backup/rsync
- rclone笔记rclonerclone/rclone · https://rclone.org/ · 默认配置文件 · 不支持 watch #249 · minio 的 mc 支持 mirror - 双向 watch · - · 可以用 mount · 不支持 fs 属性同步 #1202打开:/notes/service/storage/rclone
- zsync笔记zsyncrsync 算法 · 支持 http · 针对压缩文件进行优化打开:/notes/service/storage/backup/zsync
- AppImageCommunity/zsync2GitHubAppImageCommunity/zsync2
- sanoid
- unison www.cis.upenn.edu/~bcpierce/unison
- DeltaCopy www.aboutmyip.com/AboutMyXApp/DeltaCopy.jsp
Web Client
- mickael-kerjean/filestashGitHubmickael-kerjean/filestash
- AGPL-3.0, Go
- web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, MySQL
- filebrowser笔记filebrowserfilebrowser/filebrowser · Apache-2.0, Go, Vue · 简单的文件浏览器 · Need Maintainers · gtsteffaniak/filebrowser · 配置分为服务配置和系统设置 - 只有服务配置才能 JSON 传递打开:/notes/service/storage/client/filebrowser
- Apache-2.0, Vue
- Golang 后端
- TimboKZ/ChonkyGitHubTimboKZ/Chonky
- MIT, React
- 纯前端 UI 组件
- OpusCapita/filemanagerGitHubOpusCapita/filemanager
- Apache-2.0, JS
- prasathmani/tinyfilemanagerGitHubprasathmani/tinyfilemanager
- GPLv3, PHP
- kalcaddle/KodExplorerGitHubkalcaddle/KodExplorer
- PHP, JS
- kalcaddle/kodboxGitHubkalcaddle/kodbox
关联信息
反向链接、本文链接的其他页面和外部资料。
反向链接
- 存储服务笔记 · Awesome
Awesome · 常见问题 · 术语
站内链接
- 分区类型代码 (Partition Type Codes)笔记 · 文件系统
List of file systems - Wikipedia · See internal list ( command). · | Code | Description | · | 0700 | Microsoft basic data |
- Ceph笔记 · ceph
适用场景 · 单独存储集群 · 大存储集群 - 100TB+ PB+ · 不适用场景 · 不太适合于直接部署到 k8s 小集群作为微服务存储使用 · 简单的分布式文件系统 · ceph/ceph · LGPL-2.1+LGPL-3.0, C++
- filebrowser笔记 · filebrowser
filebrowser/filebrowser · Apache-2.0, Go, Vue · 简单的文件浏览器 · Need Maintainers · gtsteffaniak/filebrowser · 配置分为服务配置和系统设置 - 只有服务配置才能 JSON 传递
- garage笔记 · garage
Deuxfleurs/garage · AGPLv3, Rust · 分布式 S3-compatible object store · metadata + chunk · metadata - lmdb, sqlite · chunk - 1M
- Gluster笔记 · glusterfs
heketi/heketi · RESTful based volume management framework for GlusterFS · #268 - 不兼容 alpine musl · Ceph · 基于对象 · 支持非结构化数据
- juicefs笔记 · juicefs
juicedata/juicefs · Apache-2.0, Go · 元数据 和 数据 分离 · distributed POSIX fs · metadata - Redis, Postgres, MySQL, SQLite3, badger, TiKV
- MinIO笔记 · minio
最后的 Apache-2.0 协议版本为 MinIO 6.7.4 · minio 是什么? · MinIO 全线产品 AGPL 协议 · 提供 S3 对象存储协议的服务 · 支持分布式高可用 · 支持用户、分组、策略、KMS · 支持 OpenID 和 LDAP
- NextCloud笔记 · nextcloud
Primary Storage · 可以使用 S3 或 Swift 作为主要存储 · lib/Files/ObjectStore · User Authentication with LDAP · The LDAP app is not compatible with the User backend using remote HTTP servers...
- rclone笔记 · rclone
rclone/rclone · https://rclone.org/ · 默认配置文件 · 不支持 watch #249 · minio 的 mc 支持 mirror - 双向 watch · - · 可以用 mount · 不支持 fs 属性同步 #1202
- restic笔记 · restic/restic
restic/restic · BSD-2, Go · fast, secure, efficient backup · Linux, macOS, Windows
- rsync笔记 · rsync
数据量大,有条件的情况下,尽量用 rclone,支持并发。 · 3.x GPLv2 -> GPLv3 · macOS 带的还是 rsync 2.x - GPLv2 · librsync · GNU LGPL v2.1 · kristapsdz/openrsync
- S3笔记 · S3
garage · MinIO · oxyno-zeta/s3-proxy · Apache-2.0, Go · Reverse Proxy with GET, PUT and DELETE methods and authentication
- seaweedfs笔记 · seaweedfs
默认构建的单 只支持 30G - 对分布式文件系统来说太小了 · weed 的 filer/s3 依赖 metadata - 维护 metadata db 增加复杂度,影响稳定性 · chrislusf/seaweedfs · Apache-2.0, Go
- zsync笔记 · zsync
rsync 算法 · 支持 http · 针对压缩文件进行优化
参考资料
GitHub39 条
- 9001/copypartygithub.com/9001/copyparty
- Alluxio/alluxiogithub.com/Alluxio/alluxio
- apache/ozonegithub.com/apache/ozone
- AppImageCommunity/zsync2github.com/AppImageCommunity/zsync2
- archiecobbs/s3backergithub.com/archiecobbs/s3backer
- Barre/ZeroFSgithub.com/Barre/ZeroFS
- cloudreve/Cloudrevegithub.com/cloudreve/Cloudreve
- cubefs/cubefsgithub.com/cubefs/cubefs
- Cyberax/go-nfs-clientgithub.com/Cyberax/go-nfs-client
- deadbeefsociety/sshfsgithub.com/deadbeefsociety/sshfs
- dokan-dev/dokanygithub.com/dokan-dev/dokany
- drakkan/sftpgogithub.com/drakkan/sftpgo
- earendil-works/absurdgithub.com/earendil-works/absurd
- haiwen/seafilegithub.com/haiwen/seafile
- happyfish100/fastdfsgithub.com/happyfish100/fastdfs
- hirochachacha/go-smb2github.com/hirochachacha/go-smb2
- kahing/goofysgithub.com/kahing/goofys
- kalcaddle/kodboxgithub.com/kalcaddle/kodbox
- kalcaddle/KodExplorergithub.com/kalcaddle/KodExplorer
- linkedin/ambrygithub.com/linkedin/ambry
- lizardfs/lizardfsgithub.com/lizardfs/lizardfs
- lustre/lustre-releasegithub.com/lustre/lustre-release
- mickael-kerjean/filestashgithub.com/mickael-kerjean/filestash
- moosefs/moosefsgithub.com/moosefs/moosefs
- nfs-ganesha/nfs-ganeshagithub.com/nfs-ganesha/nfs-ganesha
- nimbusdotstorage/Nimbusgithub.com/nimbusdotstorage/Nimbus
- opencurve/curvegithub.com/opencurve/curve
- OpusCapita/filemanagergithub.com/OpusCapita/filemanager
- prasathmani/tinyfilemanagergithub.com/prasathmani/tinyfilemanager
- s3fs-fuse/s3fs-fusegithub.com/s3fs-fuse/s3fs-fuse
- s3ql/s3qlgithub.com/s3ql/s3ql
- sagemathinc/websocketfsgithub.com/sagemathinc/websocketfs
- smallfz/libnfs-gogithub.com/smallfz/libnfs-go
- ThinkParQ/beegfsgithub.com/ThinkParQ/beegfs
- TimboKZ/Chonkygithub.com/TimboKZ/Chonky
- versity/versitygwgithub.com/versity/versitygw
- vmware/go-nfs-clientgithub.com/vmware/go-nfs-client
- willscott/go-nfsgithub.com/willscott/go-nfs
- wthorp/GoSMBgithub.com/wthorp/GoSMB
Wikipedia1 条
- Comparison of distributed file systemsWikipedia:Comparison of distributed file systems
其他外链3 条
- www.aboutmyip.com/AboutMyXApp/DeltaCopy.jspwww.aboutmyip.com/AboutMyXApp/DeltaCopy.jsp
- www.cis.upenn.edu/~bcpierce/unisonwww.cis.upenn.edu/~bcpierce/unison
- www.reddit.com/r/homelab/comments/q9weh4/distributed_fs_evaluationwww.reddit.com/r/homelab/comments/q9weh4/distributed_fs_evaluation