前言

  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. JsRender系列demo(1)-insert-data

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  2. ios学习笔记block回调的应用(一个简单的例子)

    一.什么是Blocks      Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block. 二. ...

  3. lintcode 中等题:subsets II 带重复元素的子集

    题目 带重复元素的子集 给定一个可能具有重复数字的列表,返回其所有可能的子集 样例 如果 S = [1,2,2],一个可能的答案为: [ [2], [1], [1,2,2], [2,2], [1,2] ...

  4. SQL Server数据导入导出的几种方法

    在涉及到SQL Server编程或是管理时一定会用到数据的导入与导出, 导入导出的方法有多种,结合我在做项目时的经历做一下汇总: 1. SQL Server导入导出向导,这种方式是最方便的. 导入向导 ...

  5. Qt 添加外部库文件(四种方法)

    Qt添加外部库文件, 一种就是直接加库文件的绝对路劲,这种方法简单,但是遇到多个库文件的时候,会很麻烦,而且,如果工程移动位置以后还需要重新配置 另一种就是相对路径了,不过Qt 编译的文件会在一个单独 ...

  6. 分享一个免费SSL证书申请网站,给网站开启https协议 | 张戈博客

    这些天,由于公司的业务需求,接触到了ssl证书和https协议.博客前几篇文章也分享了在WEB服务器上安装SSL证书,为网站开启https协议的教程,感兴趣的童鞋可以前往查看相关文章: <Lin ...

  7. Android权限安全(9)Android权限特点及权限管理服务AppOps Service

    Android权限特点 权限管理服务AppOps Service 图中元素介绍: Ignore 是不提示的,Allow 是允许,Reject 是拒绝 Client是一个使用sms 的应用, AppOp ...

  8. Jquery的.post说解

    Jquery的.post说解(一) 准备工作 ·Customer类   public class Customer {     public int Unid { get; set; }     pu ...

  9. Android开发之三种动画

    转载:http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html http://www.lightskystreet.com/2 ...

  10. Android开发之ProgressDialog与ProgressBar

    ProgressDialog,继承AlertDialog.所以ProgressDialog就是一个在对话框中显示ProgressDialog,并显示进度的文本信息. 并且没有取消和确定按钮,只能通过b ...