前言

  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. Grunt打包GMU组件 报错处理

    莫Q群的大神推荐移动GMU组件,GMU是基于zepto的mobile UI组件库,提供webapp.pad端简单易用的UI组件,官网:http://gmu.baidu.com/具有以下特点: 简单易用 ...

  2. hdu 1709 The Balance

    母函数的特殊情况,左右两边都可以放,如样例1,2,9 母函数为(1+x+1/x)*(1+x^2+1/x^2)*(1+x^9+1/x^9) 化简为(1+x+x^2)*(1+x^2+x^4)*(1+x^9 ...

  3. Oracle 9 - 分析undo和snapshot too old错误

    什么操作会生成undo INSERT生成的UNDO最少,只要记录新的rowid UPDATE生成的undo多一点,它要记录修改前的数据中的那部分. DELETE生成最多的undo, 因为它要记录整行被 ...

  4. http://www.cnblogs.com/huangcong/archive/2010/06/14/1757957.html

    http://www.cnblogs.com/huangcong/archive/2010/06/14/1757957.html http://www.cnblogs.com/langtianya/a ...

  5. lintcode:Plus One 加一

    题目: 加一 给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组. 该数字按照大小进行排列,最大的数在列表的最前面. 样例 给定 [1,2,3] 表示 123, 返回 [1,2,4 ...

  6. RunAsAdmin in windows 8

    function RunAsAdmin(hWnd: HWND; filename: string; Parameters: string): Boolean; { See Step 3: Redesi ...

  7. brew命令

    下面参考下网友的总结: 查看brew的帮助 brew –help 安装软件 brew install git 卸载软件 brew uninstall git 搜索软件 brew search git ...

  8. [Mongo] error inserting documents: BSONObj size is invalid (mongoimport mongorestore 数据备份恢复)

    解决办法如下, ./mongoimport -port 6066 -d xxx -c xxx --batchSize=10 /root/mong_data/test/xxx 原因转自 http://b ...

  9. Zookeeper核心机制

    (如果感觉有帮助,请帮忙点推荐,添加关注,谢谢!你的支持是我不断更新文章的动力.本博客会逐步推出一系列的关于大型网站架构.分布式应用.设计模式.架构模式等方面的系列文章) Zookeeper是Hado ...

  10. hadoop2 环境的搭建(手动HA)

    1.手工切换ha的环境的搭建(比hadoop1多出来journalnode的配置) namenode:hadoop110和hadoop111 datanode:hadoop112.hadoop113. ...