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. Zepto源码笔记(一)

    最近在研究Zepto的源码,这是第一篇分析,欢迎大家继续关注,第一次写源码笔记,希望大家多指点指点,第一篇文章由于首次分析原因不会有太多干货,希望后面的文章能成为各位大大心目中的干货. Zepto是一 ...

  2. redis源码笔记(一) —— 从redis的启动到command的分发

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载联系作者并保留声明头部与原文链接https://luzeshu.com/blog/redis1 本博客同步在http://www.cnblog ...

  3. AsyncTask源码笔记

    AsyncTask源码笔记 AsyncTask在注释中建议只用来做短时间的异步操作,也就是只有几秒的操作:如果是长时间的操作,建议还是使用java.util.concurrent包中的工具类,例如Ex ...

  4. Java Arrays 源码 笔记

    Arrays.java是Java中用来操作数组的类.使用这个工具类可以减少平常很多的工作量.了解其实现,可以避免一些错误的用法. 它提供的操作包括: 排序 sort 查找 binarySearch() ...

  5. Tomcat8源码笔记(八)明白Tomcat怎么部署webapps下项目

    以前没想过这么个问题:Tomcat怎么处理webapps下项目,并且我访问浏览器ip: port/项目名/请求路径,以SSM为例,Tomcat怎么就能将请求找到项目呢,项目还是个文件夹类型的? Tom ...

  6. Tomcat8源码笔记(七)组件启动Server Service Engine Host启动

    一.Tomcat启动的入口 Tomcat初始化简单流程前面博客介绍了一遍,组件除了StandardHost都有博客,欢迎大家指文中错误.Tomcat启动类是Bootstrap,而启动容器启动入口位于 ...

  7. Tomcat8源码笔记(六)连接器Connector分析

    根据 Tomcat8源码笔记(五)组件Container分析 前文分析,StandardService的初始化重心由 StandardEngine转移到了Connector的初始化,本篇记录下Conn ...

  8. Tomcat8源码笔记(五)组件Container分析

    Tomcat8源码笔记(四)Server和Service初始化 介绍过Tomcat中Service的初始化 最先初始化就是Container,而Container初始化过程是咋样的? 说到Contai ...

  9. Tomcat8源码笔记(四)Server和Service初始化

    上一章 简单说明下Tomcat各个组件: Server:服务器,Tomcat服务器,一个Tomcat只有一个Server组件; Service:业务层,是Server下最大的子容器,一个Server可 ...

随机推荐

  1. C#邮件发送(最坑爹的邮箱-QQ邮箱)

    最近工作挺清闲的,有空的时候陪妹子出去玩玩,自己看看小说,看看电影,日子过的挺欢乐的,这个星期幡然悔悟,代码才是我的最爱,做点小东西,就写个邮件发送程序.说的邮件发送相信工作过基本上都会用到过,用户注 ...

  2. C#线程同步方法汇总

    我们在编程的时候,有时会使用多线程来解决问题,比如你的程序需要在 后台处理一大堆数据,但还要使用户界面处于可操作状态:或者你的程序需要访问一些外部资源如数据库或网络文件等.这些情况你都可以创建一个子线 ...

  3. Android -- ViewPager切换动画,PageTransformer

    transformPage(View view, float position) view就是滑动中的那个view,position这里是float类型,是当前滑动状态的一个表示,比如当滑动到正全屏时 ...

  4. 【转载】JAVA-dynamic web module与tomcat

    大致因为java的web系统有多种类型,比如静态的和动态的,然后动态的java web project要设置dynamic web module,也就是动态网页模型,他必须要喝对应的服务器搭配好了才能 ...

  5. Cognos11中关于CJAP第三方认证的相关配置

    cognos11同样适用于自定义java程序的第三方认证,而且在测试方面给了直观的测试接口,如下图所示 当用户配置好了自定义java程序的认证之后,程序会提示用户输入我们自己的认证库用户信息例如adm ...

  6. 很有用的mobile web application远程调试工具 weinre

    在移动web应用中,因为没有类似chrome和firebug的调试工具,调试起来比在PC上相对麻烦一些,有时候仅仅能重复进行改动比对,但使用weinre我们能够轻松做到远程调试的功能. 什么是wein ...

  7. Android改动包名称规范方法

    第一步.在项目上右键,选择android tools->rename application package,输入须要改为的名称,然后选择须要替换的文件里的包名.这里仅改动了project中包括 ...

  8. Jackcard类似度和余弦类似度(向量空间模型)的java实现

    版权声明:本文为博主原创文章,地址:http://blog.csdn.net/napoay,转载请留言. 总结Jackcard类似度和余弦类似度. 一.集合的Jackcard类似度 1.1Jackca ...

  9. jstl函数的使用

    1.fn:contains()和fn:containsIgnoreCase() fn:contains()函数用于确定一个字符串是否包含指定的子串. fn:containsIgnoreCase()函数 ...

  10. Python过滤emoji

    参考博客:http://my.oschina.net/jiemachina/blog/189460 1. 将emoji表情替换为指定字符串 import re def filter_emoji(des ...