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报告,例如: 在报告中说“不好用”: 所报告内容毫无意义: 在报告中用户没有提供足够的信息: 在 ...
随机推荐
- OpenCL入门
初入OpenCL,做个记录. 在Windows下开发OpenCL程序,必须先下载OpenCL的SDK,现在AMD,NVIDIA,Intel均提供各自的OpenCL库,基本是大同小异.安装好SDK后新建 ...
- GOF23设计模式之组合模式(composite)
一.组合模式概述 将对象组合成树状结构以表示“部分和整体”层次结构,使得客户可以统一的调用叶子对象和容器对象. (1)组合模式的使用场景 把部分和整体的关系用树形结构来表示,从而使客户端可以使用统 ...
- nginx 作为反向代理实现负载均衡的例子
以下我们就来举例说明如何使用 nginx 实现负载均衡.因为nginx在处理并发方面的优势,现在这个应用非常常见.nginx 这个轻量级.高性能的 web server 主要可以干两件事情: 〉直接作 ...
- python 源代码保护 之 xx.py -> xx.so
前情提要 之前由于项目的需要,需要我们将一部分“关键代码”隐藏起来. 虽然Python 先天支持 将源代码 编译后 生成 xxx.pyc 文件,但是破解起来相当容易 -_-!! 于是搜罗到了另外一种方 ...
- CEF3中js调用delphi内部方法
2015-01-20修改:以下方法不适合delphi7,在CEF3源码中限制了delphi_14 up,对于被我误导的朋友说声抱歉 在CEF1中JS调用delphi的方法已经贴过:http://www ...
- 数据结构和算法之:二分法demo
package com.js.ai.modules.pointwall.testxfz; class OrdArray{ private long[] a; private int nElems; p ...
- ORACLE删除字段(set unused的用法)
一.问题 现场有一张大数据量的分区表,数据量在10G以上.因某种原因需要删除其中的某些字段.如果直接用 alter table1 drop (column1,column2); 或者alter tab ...
- linux查看进程是否存在,不存在则重启
ps -ef | grep 程序名| grep -v grep | wc -l cd $(dirname $) source ~/.bash_profile count=`ps -ef | grep ...
- 3_python之路之商城购物车
python之路之商城购物车 1.程序说明:Readme.txt 1.程序文件:storeapp_new.py userinfo.py 2.程序文件说明:storeapp_new.py-主程序 use ...
- ODPS基础
遇到一个项目需求是统计128张分库分表的数据表记录的最大id,通过单表查询计算非常费时,也无法应对分表数更多的情况,因此考虑到通过odps进行任务发布和运算 在云端 http://d2.alibaba ...