seaweedfs中的名词:
master: 存储文件和fid映射关系
volumn:实际存储文件
datacenter: 数据中心
rack: 机架。一个机架属于特定的数据中心,一个数据中心可以包含多个机架。
collection: 一组volume的集合。如果在存储文件的时候没有指定collection,那么使用默认的""

weed-fs提供了若干种replication策略(rack – 机架,一个逻辑上的概念):
000 no replication, just one copy
001 replicate once on the same rack
010 replicate once on a different rack in the same data center
100 replicate once on a different data center
200 replicate twice on two other different data center
110 replicate once on a different rack, and once on a different data center

二,删除文件
向master发起/delete操作,URL参数是fid。
master:
1)对每个fid,根据fid找出它所在的volume的信息(主要是url),然后通过向volume_server的URL的/delete发起删除文件的操作,发起删除的操作由一组goroutine并发执行
2)将删除结果返回给客户端

volume:
1)从该volume的needleMap中删除这个file
2)将空的索引信息(key=id, offset=0, size=0)append到索引文件末尾
2)将空文件的信息append到dat文件末尾

可以看到,volume在删除文件的时候,根本没有动原来的文件,只是在needleMap中将这个文件删除。

三,volume上的碎片回收
两种途径:1)master集群中的leader进程定时(15分钟)做一次回收;2)通过向master发送/vol/vacuum的HTTP请求来回收
回收步骤:
master:
1)对每个Collection中的每个VolumeLayout,每个volumeLayout中的每个volume,通过向相应的volume_server的/admin/vacuum/check发起HTTP请求来批量监测它的是否需要回收,如果需要回收,到2),否则退出
2)将要compact的volume_id的状态变成不可写
3)通过向相应的volume_server的/admin/vacuum/compact发起HTTP请求来让volume_server执行回收操作,如果回收操作成功,到4),否则退出
4)向相应的volume_server的/admin/vacuum/commit发起HTTP请求来提交本次回收操作,得到成功的响应后,将该volume_id的状态变成可写

volume:
1)收到/admin/vacuum/check发过来的监测是否回收的指令后,如果 碎片大小/总大小 < URL参数中的garbageThreshold,则返回false说明不需要回收,否则返回true说明需要回收
2)收到/admin/vacuum/compact发过来的压缩指令后,在本目录下面创建新文件vid.cpd和vid.cpx,分别代表压缩后的数据文件和索引文件,接着扫描原来的vid.dat文件,将仍然使用的数据写入到vid.cpd中,并将索引信息写入到vid.cpx中,返回成功。需要注意的是,在扫描原来的vid.dat文件时,遇到一个文件如果它不在旧的needleMap中,说明这个文件已经被删除了,不会将它写入到新的vid.cpd文件中。
3)收到/admin/vacuum/commit发过来的提交压缩指令后,用vip.cpd覆盖vip.dat,vid.cpx覆盖vip.idx,接着用vid.cpx中的内容更新内存中该volume的needleMap

一致性:
在分布式系统中,“一致性”是永恒的难题。weed-fs支持replication,其多副本的数据一致性需要保证。
weed-fs理论上采用了是一种“强一致性”的策略,即:
weedfs的replication的设计原则是由接受上传的volume server 来做数据复制。
上传文件时,会在本地写完后,通过master获取副本的其他volume server,然后本机发起向其他volume serer写副本文件的操作。
删除文件时,会在本地删除完成后,通过master获取副本的其他volume server,然后本机向其他volume server发起删除副本的操作。

数据迁移

weed-fs提供数据迁移命令

上传流程
1,向http://master/dir/assign发送HTTP请求,获取该文件的fid,url,publicUrl等信息
2,批量上传文件时,第一个文件fid是fid,其余的id是fid_1, fid_2, fid_3...
3,随后向http://master/fid发起POST请求,将文件上传至master。

seaweedfs 源码笔记(一)相关推荐

  1. angularjs源码笔记(3)--injector

    2019独角兽企业重金招聘Python工程师标准>>> 简介 injector是用来做参数自动注入的,例如 function fn ($http, $scope, aService) ...

  2. spring aop原理_Spring知识点总结!已整理成142页离线文档(源码笔记+思维导图)...

    写在前面 由于Spring家族的东西很多,一次性写完也不太现实.所以这一次先更新Spring[最核心]的知识点:AOP和IOC 无论是入门还是面试,理解AOP和IOC都是非常重要的.在面试的时候,我没 ...

  3. 数据结构源码笔记(C语言描述)汇总

    数据结构源码笔记(C语言):英文单词按字典序排序的基数排序 数据结构源码笔记(C语言):直接插入排序 数据结构源码笔记(C语言):直接选择排序 数据结构源码笔记(C语言):置换-选择算法 数据结构源码 ...

  4. 数据结构源码笔记(C语言):英文单词按字典序排序的基数排序

    //实现英文单词按字典序排序的基数排序算法#include<stdio.h> #include<malloc.h> #include<string.h>#defin ...

  5. 数据结构源码笔记(C语言):索引文件建立和查找

    //实现索引文件建立和查找算法#include<stdio.h> #include<malloc.h> #include<string.h> #include< ...

  6. 数据结构源码笔记(C语言):快速排序

    //实现快速排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...

  7. 数据结构源码笔记(C语言):冒泡排序

    //冒泡排序算法实现 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...

  8. 数据结构源码笔记(C语言):希尔插入排序

    //实现希尔插入排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; ty ...

  9. 数据结构源码笔记(C语言):直接插入排序

    //实现直接插入排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...

最新文章

  1. Android全屏,隐藏状态栏和标题栏
  2. cultureinfo 类 java_System.Globalization.CultureInfo.cs(示例代码)
  3. 源码 连接mysql_MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图...
  4. VisualVM安装使用详解
  5. matlab disteclud,机器学习实战ByMatlab(3)K-means算法
  6. Python可以这样学(第五季:Socket编程)-董付国-专题视频课程
  7. starting Tomcat v8.5 at localhost has encountered a problem
  8. Security+ 学习笔记37 脚本和命令行
  9. linux文件系统简析
  10. Unity手游开发札记——布料系统原理浅析和在Unity手游中的应用
  11. LeetCode之报数(简单 模拟 递归)
  12. idea 提示 TKK 更新TKK失败,请检查网络连接,解决办法!
  13. 购买内存需要注意看哪些
  14. Python 机器学习 | 超参数优化 黑盒(Black-Box)非凸优化技术实践
  15. mysql修行练级之mysql新手入门常用命令
  16. 蓝桥杯 第十七天 动态规划(3)
  17. 网络安全电子数据取证如何学习?
  18. 中移M5311模块MQTT协议连接阿里云物联网平台(干货)
  19. 一个逐渐完善的万能table(一)
  20. 如何制作SOP?SOP制作流程是什么?详解:SOP的制作方法

热门文章

  1. 关于hive中Map join 时大表left join小表的问题
  2. DevExtreme 学习应用[1]
  3. 微信小程序(11)--购物车
  4. [moka同学笔记]redis练习Demo
  5. 20145309信息安全系统设计基础第3周学习总结
  6. RCC—使用 HSE/HIS 配置时钟
  7. cxf restful
  8. Linux下命令行压缩照片或图片的脚本 (ImageMagick使用心得,convert,import,display实例)
  9. 奇异值分解(SVD) --- 几何意义2
  10. port常用和不常用端口一览表