0.简介

FastDFS是基于互联网应用的开源分布式文件系统,主要用于大中型网站存储资源文件,如图片、文档、音频、视频等。FastDFS采用类似GFS的架构,用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX 系统。用户端只能通过专有API对文件进行存取访问,不支持POSIX接口方式。准确地讲,GFS以及 FastDFS、mogileFS、HDFS、TFS等类GFS系统都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。

1.特点

FastDFS主要解决了大容量的文件(主要是图片、视频、音频等小文件)存储和高并发访问的问题,并在文件存取时实现了负载均衡。与其它类GFS系统相比,FastDFS最大的特点在于它是一个轻量级的系统,体现在以下几个方面。

首先,FastDFS的结构比较简单,主要由Client、Tracker server和Storage server三部分组成。Client通过Tracker server得到Storage server的信息,然后直接与Storage server通信访问文件,避免了Tracker server成为瓶颈。

第二,FastDFS不对文件进行分块存储,与支持文件分块存储的DFS相比,更加简洁高效。

第三,FastDFS中的文件ID是由Storage server生成后返回给客户端的。文件ID中包含了Volume号、文件相对路径和文件名等(文件ID中还包含文件大小、时间戳、源Storage server IP地址、文件内容校验码、随机数等),client可以根据文件ID直接定位到文件所在的Volume(但具体通过哪个Storage server下载需要询问Tracker server根据负载均衡原则指定)。因此FastDFS不需要存储文件索引信息。而其他文件系统则通常需要由NameServer存储文件索引信息,如mogileFS采用MySQL数据库来存储文件索引以及系统相关的信息,而MySQL很容易成为系统瓶颈。

FastDFS轻量级的另外一个体现是代码量较小,FastDFS-V2.0的代码行数不到5.2万行(其实TFS更小。。。tfs-1.3约为4.2万行)。

2.结构组成

FastDFS的基本结构如图,主要由三部分组成:Client、Tracker server和Storage server。

2.1 Tracker server

Tracker server类似于GFS中的Master或TFS中的Name server,但与他们很不同的一点是,Tracker server的主要作用是负载均衡和调度,而不负责文件索引和映射。Tracker server在内存中记录分组和Storage server的状态等信息,不记录文件索引信息,其占用的内存量也很少。Tracker server可以只有一个,也可以有多个组成Tracker cluster,这样的好处是可以提高对用户的响应能力和增加容灾性,此时各Tracker server相互对等,冗余备份,由应用端来轮流选择进行访问。

2.2 Storage server

Storage server完成文件管理的所有功能:存储、同步和提供存取接口,文件和metadata都存储在其上。Storage server类似于GFS中的Chunk server或TFS中的Data server,通常一个Storage server即一台机器,Storage server可以动态新增和删除。FastDFS的存储部分即Storage cluster,分为多个Volume,每个Volume中包括多个Storage server。同一Volume内的各Storage server之间是对等的,存储的内容相同,起冗余容错的作用。文件上传、下载、删除等操作可在Volume内任意一台 Storage server上进行。一个Volume的存储容量取决于该Volume内最小的Storage server的容量,因此Volume内各Storage server的软硬件配置最好是一致的。采用这种分Volume的存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到哪个Volume。当某个Volume的访问压力较大时,可以在该Volume内增加Storage server来扩充服务能力(纵向扩容)。当系统总容量不足时,可以增加Volume来扩充存储容量(横向扩容)。

Storage server直接利用OS的文件系统存储文件。FastDFS不会对文件进行分块存储,客户端上传的文件和Storage server上的文件一一对应。

关于Storage server的同步,不同Volume的Storage server之间不会相互通信,同Volume内的Storage server之间会相互连接进行文件同步。文件同步采用push方式,接受更新操作的文件称为源文件,其所在server称为源服务器,其它文件称为备份文件,其它server称为目标服务器。当文件更新操作发生时,源服务器向目标服务器发起同步,对所有备份文件进行更新。当有新Storage server加入本Volume时,由已有的一台 Storage server将其上的所有文件同步给该新增服务器。具体的同步实现在Storage server中由专门线程根据binlog进行,binlog记录了文件上传、删除等更新操作。为了最大程度地避免相互影响以及出于系统简洁性考虑,Storage server对同Volume内除自己以外的每台服务器都会启动一个线程来负责文件同步。

这种异步的同步方式带来了一致性问题,当源文件尚未来得及将所有备份文件同步更新时,访问这些备份文件将引发错误。文件的访问主要分为更新和下载两种情况:FastDFS规定更新操作只能对源文件进行,从而避免了同时对不同的备份文件进行更新导致的冲突;文件下载时,Tracker server记录了各Storage server中各文件的同步情况,会向Client提供同步后的文件所在的Storage server。

3.文件上传下载流程

3.1 文件上传流程:

1. Client询问Tracker server应上传到哪个Storage server;

2. Tracker server返回一台可用的Storage server,返回的数据为该Storage server的IP地址和端口;

3. Client直接和该Storage server建立连接,进行文件上传,Storage server返回新生成的文件ID,文件上传结束。

3.2 文件下载流程:

1. Client询问Tracker server可以下载指定文件的Storage server,参数为文件ID(包含Volume号和文件名);

2. Tracker server返回一台可用的Storage server;

3. Client直接和该Storage server建立连接,完成文件下载。

4  总结

FastDFS是基于互联网应用的开源分布式文件系统,主要解决了大容量的小文件存储和高并发访问的问题,具有轻量级、支持高并发访问、高可扩展性等优点。

本文为个人分析观点,有不正确处敬请各路大侠指正。谢谢!(文中参考了happy_fish的文章和插图)

参考地址:http://blog.csdn.net/wishfly/article/details/6940788

http://blog.csdn.net/ivy_zhang_1101081987/article/details/6196903

FastDFS基本结构(转)的更多相关文章

  1. FastDFS+nginx+php的完整应用[转储]

    FastDFS功能简介: FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以 ...

  2. FASTDFS调研报告(V1.0)

    之前的文章,现在放出来,以供参阅. 一.fastdfs简介 FastDFS是一个轻量级的开源分布式文件系统 FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡 Fas ...

  3. FastDFS文件系统(二) fastdfs和其他文件系统区别

    FastDFS文件系统(二) fastdfs和其他文件系统区别 一.概述 普通存储方案:Rsync.DAS(IDE/SATA/SAS/SCSI等块).NAS(NFS.CIFS.SAMBA等文件系统). ...

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

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

  5. FastDFS简介

    一.FastDFS概述: FastDFS是一个开源的轻量级分布式文件系统,他对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.下载)等,解决了大容量存储和负载均衡的问题,高度追求高性能 ...

  6. 分布式文件系统FastDFS原理介绍

    在生产中我们一般希望文件系统能帮我们解决以下问题,如:1.超大数据存储:2.数据高可用(冗余备份):3.读/写高性能:4.海量数据计算.最好还得支持多平台多语言,支持高并发. 由于单台服务器无法满足以 ...

  7. [转]分布式文件系统FastDFS架构剖析

    [转]分布式文件系统FastDFS架构剖析 http://www.programmer.com.cn/4380/ 文/余庆 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实 ...

  8. 01.FastDFS的安装部署

    1.FastDFS简介 (1)FastDFS的功能介绍 FastDFS是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负 ...

  9. FastDFS总结

    前言 FastDFS主要解决互联网中小文件存储存储问题,例如图片,短视频,提供上传和下载功能,轻量级的设计,结构非常简单,主要包含三个角色客户端,Tracer服务,Storage服务.Tracer服务 ...

随机推荐

  1. nginx/Windows-1.9.3启动脚本

    启动nginx.bat @echo off D: cd D:\Program Files\nginx-1.9.3 tasklist | findstr /i "nginx.exe" ...

  2. 41. Unique Binary Search Trees && Unique Binary Search Trees II

    Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that st ...

  3. Tomcat从内存、并发、缓存方面优化方法

    Tomcat有很多方面,从内存.并发.缓存四个方面介绍优化方法.   一.Tomcat内存优化 Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 cata ...

  4. 几篇关于VisualStudio的调试工具文章

    现代的软件变得日益复杂,强大的调试功能也变得日益重要起来.在VisualStudio的最近几个版本中,在调试工具方面也是增强了不少的,本文转录了几个微软官方介绍的一些新增的调试功能的文章,如果能很好的 ...

  5. Devexpress VCL Build v2014 vol 15.2.3 发布

    2016年第一个版本,继续修补. New Major Features in 15.2 What's New in VCL Products 15.2 Breaking Changes To lear ...

  6. mybaits中xml文件大于号和小于号的处理方法

    1.转义字符 原符号 < <= > >= & ' " 替换符号 < <= > >= & &apos; " 2 ...

  7. IIS中使用LocalDB遇到错误:error 50,Local Database Runtime error occurred.的解决办法

    参见: [1] http://www.cnblogs.com/yjmyzz/archive/2009/10/26/1590033.html [2] http://blogs.msdn.com/b/sq ...

  8. 利用js对象的特性,去掉数组中的重复项

  9. asp.net mvc 模型验证-最舒服的验证方式

    在院子里发现 http://www.cnblogs.com/yangecnu/p/3759784.html 模型验证方法 1. 一般方法 繁琐, 无数的if else, 在炎炎夏天,我见过一个验证方法 ...

  10. java异常和spring事务注解

    http://www.techferry.com/articles/spring-annotations.html http://www.oschina.net/question/2367675_23 ...