fastdfs 清晰简介 有用
是什么?
FastDFS是一个轻量级分布式文件系统。
能干嘛?
对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等。
在Linux上的安装连接
《FastDFS在Linux上的安装》
相关概念
一、网络拓扑图
对上图的基本了解,client是客户端,tracker和storage是FastDFS系统的俩个角色。
二、详细了解tracker和storage
Storage
是什么?
存储服务器
作用?
主要作用是文件存储
相关介绍
1、如上图,storage做集群时,以组[group]为单位(也可以将一个组看成一个卷[volume],不同材料称呼不同)。集群的总容量为所有组的总和。
2、 一个卷内storage server之间相互通信,文件进行同步,保证组内storage完全一致,所以一 个卷的容量以最小的服务器为准。不同的卷之间相互不通信。
3、当某个卷的压力较大时可以添加storage server(纵向扩展),如果系统容量不够可以添加卷(横向扩展)。
Tracker
是什么
调度服务器
作用?
负载均衡和调度,管理所有的卷[volume]包括其中的storage server
相关介绍
1、每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表。
2、Tracker的集群中所有的tracker是平等的,客户端请求tracker server采用轮询的方法,如果请求的tracker不能提供服务就换另一个tracker。
工作流程
一、文件上传
流程图
流程说明
1、选择tracker server:当集群中不止一个tracker server时,由于tracker之间是完全对等的关系,客户端 在upload文件时可以任意选择一个trakcer。
2、选择存储的group:当tracker接收到upload file的请求时,会为该文件分配一个可以存储该文件的 group。
支持如下选择group的规则:
(1) Round robin,所有的group间轮询
(2) Specified group,指定某一个确定的group
(3) Load balance,剩余存储空间多多group优先
3、选择storage server:当选定group后,tracker会在group内选择一个storage server给客户端。
支持如下选择storage的规则:
(1) Round robin,在group内的所有storage间轮询
(2) First server ordered by ip,按ip排序
(3) First server ordered by priority,按优先级排序(优先级在storage上配置)
4、选择storage path:当分配好storage server后,客户端将向storage发送写文件请求,storage将会为 文件分配一个数据存储目录(安装博客中的图片存储配置的路径是存储目录)
支持如下规则:
(1) Round robin,多个存储目录间轮询
(2) 剩余存储空间最多的优先
5、生成Fileid:选定存储目录之后,storage会为文件生一个Fileid。
规则:
由storage server ip、文件创建时间、文件大小、文件crc32和一个随机数拼接而成,然后将这个二 进制串进行base64编码,转换为可打印的字符串。
6、选择两级目录:每个存储目录下有两级256*256的子目录,storage会按文件fileid进行两次hash(猜 测),路由到其中一个子目录,然后将文件以fileid为文件名存储到该子目录下。
7、客户端upload file成功后,会拿到一个storage生成的文件名,接下来客户端根据这个文件名即可访问 到该文件。
二、文件下载
流程图:
流程说明:
1、选择tracker server:和upload file一样,在download file时随机选择tracker server。
2、选择group:tracker发送download请求给某个tracker,必须带上文件名信息,tracke从文件名中解析 出文件的group、大小、创建时间等信息,根据group信息选择对应的group
3、选择storage server:从group中选择一个storage用来服务读请求。由于group内的文件同步时在后台 异步进行的,所以有可能出现在读到时候,文件还没有同步到某些storage server上,为了尽量避免访问到 这样的storage,tracker按照一定的规则选择group内可读的storage。
fastdfs 清晰简介 有用的更多相关文章
- IntelliJ IDEA 2017 Dubbo Elastic-job Redis Zookeeper RabbitMQ FastDFS MyCat 简介以及部分实现(三)
前言 首先需要说明一下,与前两章的安装篇不太一样,这篇主要扫清一下这些插件/框架 等都是干什么用的,大多数都会用于服务端或监测工具或其他,作为新手建立一个大概的思想更好的了解自己的项目.废话不多 ...
- FastDFS+nginx+php的完整应用[转储]
FastDFS功能简介: FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以 ...
- 如何有效地报告 Bug
如何有效地报告 Bug 引言 为公众写过软件的人,大概都收到过很拙劣的bug(计算机程序代码中的错误或程序运行时的瑕疵--译者注)报告,例如: 在报告中说"不好用": 所报告内容毫 ...
- Java 第四周总结
1. 本周学习总结 2. 书面作业 注释的应用: (1)源文件注释采用 /** -- */,在每个源文件的头部要有必要的注释信息,包括:文件名:文件编号:版本号:作者:创建时间:文件描述包括本文件历史 ...
- LeetCode 78. Subsets(子集合)
Given a set of distinct integers, nums, return all possible subsets. Note: The solution set must not ...
- OO第四次作业总结
一:测试与正确性论证的效果差异 首先,测试和正确性论证都是对程序的可靠与否,是否有误进行测试,从整体上来看,测试多偏向于实践,而正确性论证则大多偏向于理论. 测试:测试首先是构造一组测试样例,之后将程 ...
- 【Guava】PreConditions来校验参数
前置条件:让方法调用的前置条件判断更简单. 在我们的日常开发中,经常要对入参进行一定的参数校验,比如是否为空,参数的取值范围是否符合要求等等.这种参数校验如果我们单独进行校验的话,代码的重复率比较高, ...
- iOS 单元测试和UI测试教程
原文:iOS Unit Testing and UI Testing Tutorial 作者:Audrey Tam 译者:kmyhy 编写测试不是为了追求刺激,测试是为了避免你崭新的 App 变成了充 ...
- [转]如何有效地报告Bug
英文原文:Simon Tatham,编译:Dasn 引言 为公众写过软件的人,大概都收到过很拙劣的bug报告,例如: 在报告中说“不好用”: 所报告内容毫无意义: 在报告中用户没有提供足够的信息: 在 ...
随机推荐
- bzoj 4815 [Cqoi2017]小Q的表格——反演+分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4815 大概就是推式子的时候注意有两个边界都是 n ,考虑变成 2*... 之类的. 分块维护 ...
- 使用php生成数字、字母组合验证码(一)
项目中经常会遇到一些登陆验证,支付验证等等一系列安全验证的策略.实现方法多种多样,下面就来讲解下如何用php生成简单的文字+数字组合的验证码: 所用语言php,gd库 原理解释: a>实质上是在 ...
- Linux make menuconfig报错 Your display is too small to run Menuconfig!
在没有全屏的状态下执行 make menuconfig,如果报下面的错误,表示终端的窗口太小,需要放大窗口或者全屏操作. ## using defaults found in /dev/null#Yo ...
- Nginx优化指南
大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了!而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能 ...
- appium+python自动化30-list定位(find_elements)
前言 有时候页面上没有id属性,并且其它的属性不唯一,平常用的比较多的是单数(element)的定位方法,遇到元素属性不唯一,就无法直接定位到了. 于是我们可以通过复数(elements)定位,先定位 ...
- excel打开csv 出现乱码怎么解决
CSV是逗号分隔值的英文缩写,通常都是纯文本文件.CSV格式是分隔的数据格式,有字段/列分隔的逗号字符和记录/行分隔换行符.通常CSV文件可以用EXCEL正常打开,但是许多人都有这样的经历,使用EXC ...
- PHP中实现函数重载
转载自:http://cnn237111.blog.51cto.com/2359144/1284085 由于PHP是弱类型语言,因此函数的输入参数类型无法确定(可以使用类型暗示,但是类型暗示无法用在诸 ...
- 5月9日上课笔记-网页定位、网页动画【HTML5】
一.网页定位 position: static (默认值) relative 相对定位(相对原来的位置) right left botton top absolute 绝对定位 fixed: 固定定位 ...
- 用js如何获取一个上传文件的扩展名
function suffix(file_name){ var result =/\.[^\.]+/.exec(file_name); return result; }
- 深入浅出 Java Concurrency (9): 锁机制 part 4 锁释放与条件变量 (Lock.unlock And Condition)
本小节介绍锁释放Lock.unlock(). Release/TryRelease unlock操作实际上就调用了AQS的release操作,释放持有的锁. public final boolean ...