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】 组成。

  • VolumeId: 4 32bit 存储的物理卷的Id
  • NeedleId: 01 64bit 全局唯一NeedleId,每个存储的文件都不一样(除了互为备份的)。
  • Cookie: 02d79d06 32bit Cookie值,为了安全起见,防止恶意攻击。