一、FastDFS简单介绍

FastDFS是一款开源的、分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发。作为一个分布式文件系统,它对文件进行管理。功能包括:文件存储、文件同步、文件訪问(文件上传、文件下载)等,攻克了大容量存储和负载均衡的问题,特别适合中小文件(建议范围:4KB < file_size <500MB),对以文件为载体的在线服务,如相冊站点、视频站点等等具有显著的效果。

二、FastDFS架构

FastDFS由client,跟踪服务器和存储服务器构成,基本架构例如以下图所看到的。



Storage Server

Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包括多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置同样,以免造成存储空间的浪费。

以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比方将不同应用数据存到不同的group就能隔离应用数据,同一时候还可依据应用的訪问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同一时候当group内有机器坏掉时,数据恢复仅仅能依赖group内地其它机器,使得恢复时间会非常长。

group内每一个storage的存储依赖于本地文件系统,storage可配置多个数据存储文件夹。比方有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个文件夹都配置为storage的数据存储文件夹。

storage接受到写文件请求时。会依据配置好的规则(后面会介绍),选择当中一个存储文件夹来存储文件。

为了避免单个文件夹下的文件数太多,在storage第一次启动时。会在每一个数据存储文件夹里创建2级子文件夹,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到当中某个子文件夹下,然后将文件数据直接作为一个本地文件存储到该文件夹中。

Tracker Server

Tracker是FastDFS的协调者,负责管理全部的storage server和group。每一个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳。tracker依据storage的心跳信息,建立group==>[storage serverlist]的映射表。

Tracker须要管理的元信息非常少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不须要持久化不论什么数据,这样使得tracker非常easy扩展,直接添加tracker机器就可以扩展为tracker cluster来服务,cluster里每一个tracker之间是全然对等的,全部的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。

Client

client,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。

三、FastDFS的存储策略

为了支持大容量,存储节点(服务器)採用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成。卷与卷之间的文件是相互独立的,全部卷的文件容量累加就是整个存储系统中的文件容量。一个卷能够由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是同样的。卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

在卷中添加服务器时,同步已有的文件由系统自己主动完毕,同步完毕后。系统自己主动将新增服务器切换到线上提供服务。

当存储空间不足或即将耗尽时,能够动态加入卷。仅仅须要添加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

四、FastDFS的上传过程

FastDFS向使用者提供基本文件訪问接口,比方upload、download、append、delete等,以client库的方式提供给用户使用。

依据前边的解说。我们知道Storage Server会定期的向Tracker Server发送自己的存储信息。当Tracker Server Cluster中的Tracker Server不止一个时,各个Tracker之间的关系是对等的,所以client上传时能够选择随意一个Tracker。

当Tracker收到client上传文件的请求时,会为该文件分配一个能够存储文件的group。当选定了group后就要决定给client分配group中的哪一个storage server。当分配好storage server后,client向storage发送写文件请求,storage将会为文件分配一个数据存储文件夹。然后为文件分配一个fileid。最后依据以上的信息生成文件名称存储文件。文件名称的格式例如以下:

五、FastDFS的文件同步

写文件时。client将文件写至group内一个storage server即觉得写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其它的storage server。

每一个storage写文件后,同一时候会写一份binlog,binlog里不包括文件数据,仅仅包括文件名称等元信息,这份binlog用于后台同步,storage会记录向group内其它storage同步的进度。以便重新启动后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内全部server的时钟保持同步。

storage的同步进度会作为元数据的一部分汇报到tracker上。tracke在选择读storage的时候会以同步进度作为參考。

比方一个group内有A、B、C三个storage server,A向C同步到进度为T1 (T1曾经写的文件都已经同步到B上了),B向C同步到时间戳为T2(T2 > T1),tracker接收到这些同步进度信息时,就会进行整理。将最小的那个做为C的同步时间戳。本例中T1即为C的同步时间戳为T1(即全部T1曾经写的数据都已经同步到C上了);同理,依据上述规则,tracker会为A、B生成一个同步时间戳。

六、FastDFS的文件下载

clientuploadfile成功后,会拿到一个storage生成的文件名称,接下来client依据这个文件名称就可以訪问到该文件。

跟upload file一样。在downloadfile时client能够选择随意tracker server。tracker发送download请求给某个tracker,必须带上文件名称信息。tracke从文件名称中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求。

本文是在阅读某大神的文章时进行的整理和摘录,同一时候加入了自己的一些思考,以下附上大神的链接:http://blog.yunnotes.net/index.php/fastdfs_design/

分布式文件存储FastDFS(一)初识FastDFS的更多相关文章

  1. 分布式文件存储:FastDFS简单使用与原理分析

    引言 FastDFS 属于分布式存储范畴,分布式文件系统 FastDFS 非常适合中小型项目,在我接手维护公司图片服务的时候开始接触到它,本篇文章目的是总结一下 FastDFS 的知识点. 用了 2 ...

  2. 我心中的核心组件(可插拔的AOP)~分布式文件上传组件~基于FastDFS

    回到目录 一些概念 在大叔框架里总觉得缺点什么,在最近的项目开发中,终于知道缺什么了,分布式文件存储组件,就是缺它,呵呵,对于分布式文件存储来说,业界比较公认的是FastDFS组件,它自己本身就是集群 ...

  3. .Net平台下,分布式文件存储的实现

    遇到的问题 对于Web程序,使用一台服务器的时候,客户端上传的文件一般也都是存储在这台服务器上.但在集群环境中就行不通了,如果每个服务器都存储自己接受到的文件,就乱套了,数据库中明明有这个附件的记录, ...

  4. 【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用

    [网络爬虫入门05]分布式文件存储数据库MongoDB的基本操作与爬虫应用 广东职业技术学院  欧浩源 1.引言 网络爬虫往往需要将大量的数据存储到数据库中,常用的有MySQL.MongoDB和Red ...

  5. 分布式文件存储数据库 MongoDB

    MongoDB 简介 Mongo 并非芒果(Mango)的意思,而是源于 Humongous(巨大的:庞大的)一词. MongoDB 是一个基于分布式文件存储的 NoSQL 数据库.由 C++ 语言编 ...

  6. (转) 分布式文件存储FastDFS(一)初识FastDFS

    http://blog.csdn.net/xingjiarong/article/details/50559849 一.FastDFS简介 FastDFS是一款开源的.分布式文件系统(Distribu ...

  7. Centos7部署分布式文件存储(Fastdfs)

    目录 FastDFS介绍 楼主目标:前可H5撩妹,后可Linux搞运维 环境:Centos7 软件: 软件链接: 安装前所有准备,上传软件到Centos7上的/opt的目录下 安装依赖软件和类库(安装 ...

  8. 1Nginx+fastdfs分布式文件存储

     准备,将所需的软件传到服务器上,服务器的列表如下: fastdfs-nginx-module_v1.15.tar.gz FastDFS_v4.06.tar.gz libevent-2.0.21- ...

  9. 分布式文件存储FastDFS(七)FastDFS配置文件具体解释

    配置FastDFS时.改动配置文件是非常重要的一个步骤,理解配置文件里每一项的意义更加重要,所以我參考了大神的帖子,整理了配置文件的解释.原帖例如以下:http://bbs.chinaunix.net ...

随机推荐

  1. jquery 取页面中ifram中得节点

    <iframe src="html/bai.jsp" frameBorder=0 id=middle name=middle scrolling="yes" ...

  2. 紫书 例题8-16 UVa 1608 (递归)

    题意: 判断所给序列是否满足任意连续子序列中至少有一个出现一次的元素. 思路:在整体中找到一个只出现一次的元素, 然后在递归两边.因为两边的序列中有这个数那就满足要求, 所以就看剩下的序列漫步满足要求 ...

  3. 【codeforces 335A】Banana

    [题目链接]:http://codeforces.com/contest/335/problem/A [题意] 让你构造一个长度为n的字符串; 每次你可以从这个字符串中任意取走字符; 让你求出取的次数 ...

  4. Python学习第二天-编写三级菜单

    编写三级菜单:1. 运行程序输出第一级菜单2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单3. 菜单数据保存在文件中4. 让用户选择是否要退出5. 有返回上一级菜单的功能 # Author: z ...

  5. layDate1.0正式公布,您一直在寻找的的js日期控件

    你是时候换一款日期控件了,而layDate很愿意和您成为工作伙伴.她正致力于成为全球最高大上的web日期支撑,为国内外全部从事web应用开发的同仁提供力所能及的动力.她基于原生JavaScript精心 ...

  6. JavaScript(14)jQuery(JavaScript 库)

    JavaScript 框架(库) JavaScript 高级程序设计(特别是对浏览器差异的复杂处理),通常非常困难也非常耗时.为了应对这些调整,很多的 JavaScript (helper) 库应运而 ...

  7. [MST] Attach Behavior to mobx-state-tree Models Using Actions

    Models are not just a nifty feature for type checking. They enable you to attach behavior to your ac ...

  8. hdu 1166 敌兵布阵 (线段树单点更新)

    敌兵布阵                                                         Time Limit: 2000/1000 MS (Java/Others)  ...

  9. 【翻译自mos文章】开启dblink的 oracle net trace/tracing --对dblink进行跟踪的方法

    开启dblink的 oracle net trace/tracing --对dblink进行跟踪的方法. 參考原文: DBLINK: How to Enable Oracle Net Tracing ...

  10. A. Ilya and Diplomas( Codeforces Round #311 (Div. 2) )

    A. Ilya and Diplomas time limit per test 1 second memory limit per test 256 megabytes input standard ...