当前位置: 首页 > news >正文

SeaweedFS---01

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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。

转载于:https://my.oschina.net/u/2983845/blog/1553964

相关文章:

  • Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8
  • 周六相约橘子洲头,共话AWS上的AI和大数据技术
  • 【转】20-TCP 协议(滑动窗口——基础)
  • httpd之apache服务器配置
  • 如何重置migration
  • LVS 之 管理工具ipvsadm介绍
  • JDBC 结构
  • 【以太坊】雷电网络的101网络原理概述
  • @property @synthesize @dynamic 及相关属性作用探究
  • 获取网贷之家数据
  • ES6 新特性之 let, const : JavaScript在变量方面的改进。
  • sqlmap tamter
  • ubuntu apache 配置虚拟主机 与 二级域名
  • ASP.NET Core真实管道详解[2]:Server是如何完成针对请求的监听、接收与响应的【上】...
  • java项目学习
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • Fundebug计费标准解释:事件数是如何定义的?
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Just for fun——迅速写完快速排序
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Logstash 参考指南(目录)
  • Rancher-k8s加速安装文档
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Vue全家桶实现一个Web App
  • 闭包,sync使用细节
  • 编写高质量JavaScript代码之并发
  • 大主子表关联的性能优化方法
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端之Sass/Scss实战笔记
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何实现 font-size 的响应式
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • $forceUpdate()函数
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (万字长文)Spring的核心知识尽揽其中
  • (五)关系数据库标准语言SQL
  • ******之网络***——物理***
  • .net Application的目录
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .Net IE10 _doPostBack 未定义
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET 药厂业务系统 CPU爆高分析
  • .net和php怎么连接,php和apache之间如何连接
  • .net连接oracle数据库
  • /etc/fstab和/etc/mtab的区别
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [codeforces]Levko and Permutation
  • [IE编程] IE8 新增的C++开发接口
  • [LitCTF 2023]Http pro max plus
  • [NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现
  • [NCTF 2022] web题解