FastDFS基本结构(转)

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

时间: 2024-08-30 09:52:50

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

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

FastDFS功能简介: FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务,如相册网站.视频网站等等. 主页地址:http://code.google.com/p/fastdfs/     #目前据说这上面已停止更新 FastDFS特点: FastDFS主要解决了大容量的文件(主要是图片.视频.音频等小文件)存储和高并发访问的问题,并在文件存取时实现了

FastDFS 5.5 安装与配置

FastDFS功能简介: FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务,如相册网站.视频网站等等. FastDFS特点: FastDFS主要解决了大容量的文件(主要是图片.视频.音频等小文件)存储和高并发访问的问题,并在文件存取时实现了负载均衡.与其它类GFS系统相比,FastDFS最大的特点在于它是一个轻量级的系统,体现在以下几个方面. 首先,F

数据类型与分布式存储

数据类型与分布式存储 ================================================================================ 概述: ================================================================================ 数据类型  1.结构化数据 ★定义: 结构化数据即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据: 能够用数据或统一的结构加以表示,

分布式 dubbo zookeeper springmvc mybatis shiro restful redis fastdfs activemq

摘要: 摘要: SSH ++shiro+restful+bootstrap java架构 java企业架构 spring mvc +mybatis + KafKa+Flume+Zookeeper j2ee分布式架构 dubbo + springmvc + mybatis + ehcache + redis 分布式架构 分布式消息中间件:spring mvc +mybatis + KafKa+Flume+Zookeeper 分布式缓存:Redis spring mvc +mybatis + 分布式

FastDFS介绍

FastD FS简介 FastDFS是一个轻量级的开源分布式文件系统 FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡 FastDFS实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储 支持存储服务器在线扩容 支持相同内容的文件只保存一份,节约磁盘空间 FastDFS只能通过Client API访问,不支持POSIX访问方式 FastDFS特别适合大中型网站使用,用来存储资源文件(如:图片.文档.音频.视频等等) FastDFS和集中存储方式对比 Fa

FastDFS + Nginx实现基于CentOS7平台的分布式文件存储与访问

相比较于MogileFS,FastDFS同样有tracker和storage这样的功能分类.但是FastDFS的tracker节点的元数据信息是由各个storage节点通过tcp协议上报得到的,因此在一定程度上减轻了tracker的负载压力.storage节点以group为单位进行组织.任何一个storage server都应该属于某个group,一个group应该包含多个storage server:在同一个group内部,各storage server的数据互相冗余. 本文通过构建FastD

FastDFS应用故障及解决方案

fastdfs应用于线上环境已经有一段时间,但在使用过程中出现一个问题,通过程序在上传图片时,有时图片无法正常回显,通过后台日志查看,发现图片确实已经传到服务器:把图片地址复制出来通过浏览器访问也能正常访问到.猜测是网络延迟的问题,但不确定这个延迟发生在哪个过程中. 重新过了一遍线上的结构及fastdfs的原理,终于确定了问题所在.也修改了线上的方案.结合下面两图详细说明下. 图1中是线上原来的结构,一个tracker,两个storage:其中一个storage结合nginx提供图片访问服务,一

fastdfs分布式文件系统之tracker server介绍

tracker server是FastDFS文件系统的协调者,其主要作用是负载均衡和调度.Tracker server在内存中记录分组和Storage server的状态等信息, 不记录文件索引信息,占用的内存量很少.另外,客户端(应用)和Storage server访问Tracker server时,Tracker server扫描内存中的分组和 Storage server信息,然后给出应答.由此可以看出Tracker server非常轻量化,不会成为系统瓶颈. FastDFS集群中的Tra

FastDFS分布式文件系统配置与部署

? ? ? FastDFS分布式文件系统配置与部署 白宁超 2017年4月14日 ? ? 注:1.1-1.4节是对FastDFS基本配置,如果读者只是安装分布式文件系统,简单关注其原理建议阅读1.2节与1.5节.如果读者仅仅就是安装为目的建议直接阅读1.5节. 本人邮箱:[email protected] 主页网址:http://www.cnblogs.com/baiboy/ ? 目录 ? 1.1 分布式文件系统介绍????1 1.2 系统架构介绍????1 1.3 FastDFS性能方案???