SeaweedFS是一个非常优秀的由 golang 开发的分布式存储开源项目。它是用来存储文件的系统,并且与使用的语言无关,使得文件储存在云端变得非常方便。
主要概念
定义名称 | 说明 | 备注 |
Master | 提供volume=>location 位置映射服务和文件id的序列号; | |
Node | 系统抽象的节点,抽象为DataCenter、Rack; | |
DataCenter | 数据中心,对应现实中的不同机架; | |
Rack | 机架,对应现实中的机柜,一个机架属于特定的数据中心,一个数据中心可以包含多个机架; | |
Volume | 逻辑卷,存储的逻辑结构,逻辑卷下存储Needle,A VolumeServer contains one Store; | |
Needle | 逻辑卷中的Object,对应存储的文件, Needle file size is limited to 4GB for now. | |
Filer | 文件管理器,Filer将数据上传到Weed Volume Servers,并将大文件分成块,将元数据和块信息写入Filer存储区; | |
Collection | 文件集,可以分布在多个逻辑卷上,如果在存储文件的时候没有指定collection,那么使用默认的""; | |
Mount | 用户空间,当filer与mount一起使用时,filer仅提供文件元数据检索,实际文件内容直接在mount和volume服务器之间读写,所以不需要多个filer; |
中央主服务器只管理⽂件卷,⽽不是管理中央主服务器中的所有⽂件元数据,它SeaweedFS允许这些卷服务器管理⽂件及其元数据。这减轻了中央主服务器的并发压⼒,并将⽂件元数据传播到卷服务器,允许更快的⽂件访问只需⼀个磁盘读取操作。
SeaweedFS 是简单,高伸缩性的分布式文件系统,包含两部分:存储数十亿的文件;快速为文件服务。SeaweedFS 作为支持全 POSIX 文件系统语义替代,Seaweed-FS 选择仅实现 key-file 的映射,类似 "NoSQL",也可以说是 "NoFS"。
SeaweedFS 仅花费 40 字节的硬盘来存储每个文件的元数据。
多数据节点维护
整个模块的核心数据结构
DataNode 是树的叶子节点, DataCenter 和 Rack 是树的非叶子节点, DataCenter 是 Rack 的父母节点。
DataCenter
| ------------------------- |
Rack Rack
| ---------------- |
DataNode DataNode
FID介绍
{
"fid": "4,0102d79d06",
"url": "192.168.12.123:9222",
"publicUrl": "192.168.12.123:9222",
"count": 1
}
其中 "fid": "4,0102d79d06" 就是 Fid,Fid 由三个部分组成 【VolumeId, NeedleId, Cookie】 组成。