前言

  FastDFS主要解决互联网中小文件存储存储问题,例如图片,短视频,提供上传和下载功能,轻量级的设计,结构非常简单,主要包含三个角色客户端,Tracer服务,Storage服务。Tracer服务提供了对客户端请求负载均衡和路由作用,Storage服务提供真正的上传下载,数据同步,冗余备份作用。

  系统部署时,首先将几个Storage服务编为一个组,每个组内的Storage服务内保存的文件数据完全相同,相互之间进行数据同步。Tracer服务与所有的Storage服务,Storage服务启动时会连接所有的Tracer服务,并将Storage信息汇总给Tracer服务,主要是同步信息,磁盘空间信息,很少的数据量,所有的数据均在内存中,Tracer并不会成为瓶颈。

上传文件

  客户端上传文件时,首先客户端向Tracer发送请求上传文件,Tracer会返回一个Storage地址给客户端,客户端重新连接Storage服务,Storage接收到客户端传送的文件数据,根据文件名生成一个fid索引,并选择合适的位置保存文件数据。Storage服务为了避免同一个目录下的文件数量过多,将磁盘分为两级目录,每级目录下保存256个文件。数据文件保存成功之后,返回生成的fid索引给客户端,并告知文件存储成功。后面Storage会有单独的线程将上传的文件数据同步给同一个组内其他的Storage服务,如果在未同步之前Storage数据损坏了,则用户上传的数据会永久丢失。Storage服务每次同步成功一个文件都会记录一个binlog,保存针对组内所有的Storage服务的同步进度,保证服务重启后能够继续上次未完成的同步进度。客户端收到上传的fid索引后,以后访问文件需要通过fid索引进行访问,fid索引需要应用自行保存,一般可以保存到mysql中,以原始文件名对应fid索引。

下载文件

  客户端下载文件时,根据原始文件名找到fid索引,然后发送请求到Tracer服务,Tracer会根据fid索引中的组名,返回给客户端组内Storage服务一个地址,客户端根据此地址连接相应的Storage服务下载对应的文件。如果我们刚上传的文件到一个Storage服务,而它还未将数据同步到其他的Storage服务,则客户端有可能获取不到数据,为了避免这种情况,fid索引中会保存有文件创建时间和上传到Storage服务的源地址,如果当前时间戳小于某个值,则Tracer会返回源地址供客户端下载。

fid索引

  fid索引设计很巧妙,依次保存组名,磁盘号,一级目录,二级目录,文件名,此处的文件名添加了其他信息生成的,原始文件名需要应用自行保存。下面是结构示例。

group1/M00/00/0C/SAAAKkdlDKDKlslDSSdks.h

尾声

  FastDFS轻巧方便使用,搭建简单,但是也存在一些问题,比如上面说的刚上传文件的Storage服务如果数据损坏,则会导致数据永久丢失,Storage服务中如果有磁盘损坏,则需要手动copy数据进行还原,对于运维来说太不方便。

参考资料

http://tech.uc.cn/?p=221
http://blog.yunnotes.net/index.php/fastdfs_design/
http://history.programmer.com.cn/4380/

FastDFS总结的更多相关文章

  1. 【架构设计】分布式文件系统 FastDFS的原理和安装使用

    本文地址 分享提纲: 1.概述 2. 原理 3. 安装 4. 使用 5. 参考文档 1. 概述 1.1)[常见文件系统] Google了一下,流行的开源分布式文件系统有很多,介绍如下:   -- mo ...

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

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

  3. 网站文件系统发展&&分布式文件系统fastDFS

    网站文件系统发展 1.单机时代的图片服务器架构 初创时期由于时间紧迫,开发人员水平也很有限等原因.所以通常就直接在website文件所在的目录下,建立1个upload子目录,用于保存用户上传的图片文件 ...

  4. FastDFS 安装及使用

    FastDFS 安装及使用 2012-11-17 13:10:31|  分类: Linux|举报|字号 订阅     Google了一下,流行的开源分布式文件系统有很多,介绍如下:   mogileF ...

  5. 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署

    少啰嗦,直接装 看过上一篇分布式文件系统 - FastDFS 简单了解一下的朋友应该知道,本次安装是使用目前余庆老师开源的最新 V5.05 版本,是余庆老师放在 Github 上的,和目前你能在网络上 ...

  6. 分布式文件系统 - FastDFS 简单了解一下

    别问我在哪里 也许我早已不是我自己,别问我在哪里,我一直在这里. 突然不知道说些什么了... 初识 FastDFS 记得那是我刚毕业后进入的第一家公司,一个技术小白进入到当时的项目组后,在开发中上传用 ...

  7. 分布式文件系统 - FastDFS 配置 Nginx 模块及上传测试

    也不说废话,直接干 上一篇 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署 中安装了 FastDFS 后,并配置启动了 Tracker 和 Storage 服务,已经可以上传文件 ...

  8. centos 系统下安装FastDFS+nginx+fastdfs-nginx-module安装配置

    前言: 以前的项目上传的文件都是保存到本地或者是局域网内的共享文件夹下,由于数据量,服务器的负载均衡(分机的某些图片无法访问的问题处理)等因素的情况下,就想到用fastdfs来文件管理,花了几天时间硬 ...

  9. FastDFS+Nginx(单点部署)事例

    FastDFS是由淘宝的余庆先生所开发,是一个轻量级.高性能的开源分布式文件系统,用纯C语言开发,包括文件存储.文件同步.文件访问(上传.下载).存取负载均衡.在线扩容.相同内容只存储一份等功能,适合 ...

  10. 在虚拟机中配置FastDFS+Nginx模块

    先上部署图 提示一下, ip 192.168.72.138 上面部署了两个group, 分别为 group1和g2. 另外, 同组之内的 port 要保持一致. 一.安装准备 1. #每台机器都添加两 ...

随机推荐

  1. eclipse配置mahout

    1.在elcipse上建立一个java project 项目名:mymahout 2.建立libs文件夹,在mahout 0.9的lib文件夹下找到一下java包 其中log4j.properties ...

  2. Linux下c++通过动态链接库调用类

    http://hi.baidu.com/ablenavy/item/b498901c6826bbf587ad4e33 Linux下的动态链接库叫so,即Shared Object,共享对象.一些函数就 ...

  3. 【memcache缓存专题(2)】memcache安装与命令行使用

    进新公司一个多月了,一直没有时间来更新,后续还是要保持着每日更新的频率 安装 在windows上安装 略(都玩到缓存的程度了,就没必要在windows上捣弄了) 给个参考: http://blog.c ...

  4. Hibernate逍遥游记-第12章 映射值类型集合-004映射Map(<map-key>)

    1. 2. <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate ...

  5. 本人arcgis api for javascript中常见错误总结

    1. 2.对象不支持"replace"属性或方法 解决办法:一般在ie中执行js会报这样的错误,基本问题就是你引用了某个对象中不存在的方法,可能是这个方法本来存在而你写错了,或者调 ...

  6. Linux命令学习笔记(1)

    groupadd 1.作用 groupadd命令用于将新组加入系统.2.格式groupadd [-g gid] [-o]] [-r] [-f] groupname3.主要参数-g gid:指定组ID号 ...

  7. NSDictionary 遍历

           NSDictionary *dic1=[NSDictionary dictionaryWithObjectsAndKeys: @"1",@"a", ...

  8. 离线应用Application Cache详解

    特点:     1.离线可访问            - 没有网络仍可访问整个应用     2.很小的服务器负载  - 缓存在本地,不需要到服务器请求     3.高速                 ...

  9. 运行Android应用时提示ADB是否存在于指定路径问题

    打开eclipse,选择指定的Android应用工程并Run,提示: [2014-06-28 11:32:26 - LinearLayout] The connectionto adb is down ...

  10. Android用户界面布局(layouts)

    Android用户界面布局(layouts) 备注:view理解为视图 一个布局定义了用户界面的可视结构,比如activity的UI或是APP widget的UI,我们可以用下面两种方式来声明布局: ...