SeaweedFs 源码详解

详见 : https://github.com/11062055/seaweedfs/wiki

 

# 详解: 原理 和 代码

```
```

## 说明

```
本仓库的 master 同步原项目的 master 分支.

本仓库的 dev_note 分支对源码进行分析和注释。

git diff dev_note master 可查看所有注释。

git diff dev_note master 只新增额外注释。

所有注释以三个斜杠开始 '///', 以区别和查询。
```

## 简介

```
seaweedfs 是一个应用层的分布式文件系统, 支

持海量数据(只受限于磁盘大小), 支持动态热扩容。

支持多数据中心多机架, 支持数据的异地灾备冗余。
```


![](https://github.com/11062055/seaweedfs/blob/dev_note/img/deploy.jpeg)

### 原理

```
物理分层。Master Servers -> Volume Servers( DC \ Rack)
```

```
Volume Servers 分布在不同数据中心 (DC) 不同机架 (Rack) 上.

上面保存了各个文件的数据和元信息, 且同一个文件可在多个 Volume

Servers 上保存多份, 具体的备份规则可以自己定义.
```

```
Master Servers(奇数个), 通过 raft 选出一个 Leader Master,

Leader Master 保存整个 Volume Servers 的拓扑信息, 结构如下:

Topology -> Data Center-> Rack -> Data Node -> Volume.

这样可以通过 Data Center-> Rack -> Data Node 查找一个 Data

Node 上的所有 Volume 信息. 但是,我们也需要根据一个 Volume 去

查找它所在的所有节点, 所以 Leader Master 还维护另一个结构如下:

Topology -> Collection -> VolumeLayout-> Data Node List

其中, Collection 对 VolumeLayout 的组织是按备份方式分类区分,

VolumeLayout 保存每个 Volume Id 到其具体位置Data Node List

的映射, 并且保存了 Volume 的可读写性质.
```

```
Leader Master 跟各个 Volume Servers 通过心跳保持连接, 并且可

获取各个 Volume Servers 上的卷信息(增\删\过期等). 再将 Volume

的位置信息通过 RPC 方式同步给其余 Master. 当要上传文件时, Leader

Master 还负责分配一个全局唯一且递增的 ID, 作为文件的 ID.
```

### Master Server 接口

```
/dir/assign

分配 Volume, 即分配

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值