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
FastDFS基本结构(转)的更多相关文章
- FastDFS+nginx+php的完整应用[转储]
FastDFS功能简介: FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以 ...
- FASTDFS调研报告(V1.0)
之前的文章,现在放出来,以供参阅. 一.fastdfs简介 FastDFS是一个轻量级的开源分布式文件系统 FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡 Fas ...
- FastDFS文件系统(二) fastdfs和其他文件系统区别
FastDFS文件系统(二) fastdfs和其他文件系统区别 一.概述 普通存储方案:Rsync.DAS(IDE/SATA/SAS/SCSI等块).NAS(NFS.CIFS.SAMBA等文件系统). ...
- 我心中的核心组件(可插拔的AOP)~分布式文件上传组件~基于FastDFS
回到目录 一些概念 在大叔框架里总觉得缺点什么,在最近的项目开发中,终于知道缺什么了,分布式文件存储组件,就是缺它,呵呵,对于分布式文件存储来说,业界比较公认的是FastDFS组件,它自己本身就是集群 ...
- FastDFS简介
一.FastDFS概述: FastDFS是一个开源的轻量级分布式文件系统,他对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.下载)等,解决了大容量存储和负载均衡的问题,高度追求高性能 ...
- 分布式文件系统FastDFS原理介绍
在生产中我们一般希望文件系统能帮我们解决以下问题,如:1.超大数据存储:2.数据高可用(冗余备份):3.读/写高性能:4.海量数据计算.最好还得支持多平台多语言,支持高并发. 由于单台服务器无法满足以 ...
- [转]分布式文件系统FastDFS架构剖析
[转]分布式文件系统FastDFS架构剖析 http://www.programmer.com.cn/4380/ 文/余庆 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实 ...
- 01.FastDFS的安装部署
1.FastDFS简介 (1)FastDFS的功能介绍 FastDFS是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负 ...
- FastDFS总结
前言 FastDFS主要解决互联网中小文件存储存储问题,例如图片,短视频,提供上传和下载功能,轻量级的设计,结构非常简单,主要包含三个角色客户端,Tracer服务,Storage服务.Tracer服务 ...
随机推荐
- tmp_table_size
Whenever you increase tmp_table_size and max_heap_table_size, keep in mind that setting these does n ...
- javascript URI的编码
用encodeURIComponent,但是不清楚她和encodeURI的区别, w3school 对其的解释: encodeURIComponent() 函数可把字符串作为 URI 组件进行编码.( ...
- VBS基本知识
由于一些需要,开始学习VBS了.此篇文章一直将处于编辑添加状态. 1.VBS简介 VBS 即VBScript(Microsoft Visual Basic Script Editon),是微软开发的一 ...
- 使用jquery获取url以及jquery获取url参数的方法
使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作 1.jquery获取url很简单,代码如下 1.window.location.href; 其实只是用到了javas ...
- ASP.NET Web API之消息[拦截]处理
标题相当难取,内容也许和您想的不一样,而且网上已经有很多这方面的资料了,我不过是在实践过程中作下记录.废话少说,直接开始. Exception 当服务端抛出未处理异常时,most exceptions ...
- UITaleView的基础使用及数据展示操作
UITableView表视图,是实用的数据展示的基础控件,是继承于UIScrollView,所以也可以滚动.但不同于UIScrollView,UITableView只可以上下滚动,而不能左右滚动. 因 ...
- Redis的主从同步复制
先来看一下Redis的主从同步复制的原理: 在Slave启动并连接到Master之后,它将主动发送一条SYNC命令.此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台 ...
- VC++ operate excel
利用VC操作Excel的方法至少有两种 1 .利用ODBC把Excel文件当成数据库文件,来进行读.写.修改等操作,网上有人编写了CSpreadSheet类,提供支持. 2. 利用Automation ...
- 使用__slots__
[使用__slots__] 参考: 1.http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a0 ...
- java基础十一[远程部署的RMI](阅读Head First Java记录)
方法的调用都是发生在相同堆上的两个对象之间(同一台机器的Java虚拟机),如果想要调用另一台机器上的对象,可以通过Socket进行输入/输出. 远程过程调用需要创建出4种东西:服务器.客户端.服务器辅 ...