一、FastDFS简单介绍

FastDFS是一款开源的、分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发。作为一个分布式文件系统,它对文件进行管理。功能包括:文件存储、文件同步、文件訪问(文件上传、文件下载)等,攻克了大容量存储和负载均衡的问题,特别适合中小文件(建议范围:4KB < file_size <500MB),对以文件为载体的在线服务,如相冊站点、视频站点等等具有显著的效果。

二、FastDFS架构

FastDFS由client,跟踪服务器和存储服务器构成,基本架构例如以下图所看到的。



Storage Server

Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包括多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置同样,以免造成存储空间的浪费。

以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比方将不同应用数据存到不同的group就能隔离应用数据,同一时候还可依据应用的訪问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同一时候当group内有机器坏掉时,数据恢复仅仅能依赖group内地其它机器,使得恢复时间会非常长。

group内每一个storage的存储依赖于本地文件系统,storage可配置多个数据存储文件夹。比方有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个文件夹都配置为storage的数据存储文件夹。

storage接受到写文件请求时。会依据配置好的规则(后面会介绍),选择当中一个存储文件夹来存储文件。

为了避免单个文件夹下的文件数太多,在storage第一次启动时。会在每一个数据存储文件夹里创建2级子文件夹,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到当中某个子文件夹下,然后将文件数据直接作为一个本地文件存储到该文件夹中。

Tracker Server

Tracker是FastDFS的协调者,负责管理全部的storage server和group。每一个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳。tracker依据storage的心跳信息,建立group==>[storage serverlist]的映射表。

Tracker须要管理的元信息非常少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不须要持久化不论什么数据,这样使得tracker非常easy扩展,直接添加tracker机器就可以扩展为tracker cluster来服务,cluster里每一个tracker之间是全然对等的,全部的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。

Client

client,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。

三、FastDFS的存储策略

为了支持大容量,存储节点(服务器)採用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成。卷与卷之间的文件是相互独立的,全部卷的文件容量累加就是整个存储系统中的文件容量。一个卷能够由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是同样的。卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

在卷中添加服务器时,同步已有的文件由系统自己主动完毕,同步完毕后。系统自己主动将新增服务器切换到线上提供服务。

当存储空间不足或即将耗尽时,能够动态加入卷。仅仅须要添加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

四、FastDFS的上传过程

FastDFS向使用者提供基本文件訪问接口,比方upload、download、append、delete等,以client库的方式提供给用户使用。

依据前边的解说。我们知道Storage Server会定期的向Tracker Server发送自己的存储信息。当Tracker Server Cluster中的Tracker Server不止一个时,各个Tracker之间的关系是对等的,所以client上传时能够选择随意一个Tracker。

当Tracker收到client上传文件的请求时,会为该文件分配一个能够存储文件的group。当选定了group后就要决定给client分配group中的哪一个storage server。当分配好storage server后,client向storage发送写文件请求,storage将会为文件分配一个数据存储文件夹。然后为文件分配一个fileid。最后依据以上的信息生成文件名称存储文件。文件名称的格式例如以下:

五、FastDFS的文件同步

写文件时。client将文件写至group内一个storage server即觉得写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其它的storage server。

每一个storage写文件后,同一时候会写一份binlog,binlog里不包括文件数据,仅仅包括文件名称等元信息,这份binlog用于后台同步,storage会记录向group内其它storage同步的进度。以便重新启动后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内全部server的时钟保持同步。

storage的同步进度会作为元数据的一部分汇报到tracker上。tracke在选择读storage的时候会以同步进度作为參考。

比方一个group内有A、B、C三个storage server,A向C同步到进度为T1 (T1曾经写的文件都已经同步到B上了),B向C同步到时间戳为T2(T2 > T1),tracker接收到这些同步进度信息时,就会进行整理。将最小的那个做为C的同步时间戳。本例中T1即为C的同步时间戳为T1(即全部T1曾经写的数据都已经同步到C上了);同理,依据上述规则,tracker会为A、B生成一个同步时间戳。

六、FastDFS的文件下载

clientuploadfile成功后,会拿到一个storage生成的文件名称,接下来client依据这个文件名称就可以訪问到该文件。

跟upload file一样。在downloadfile时client能够选择随意tracker server。tracker发送download请求给某个tracker,必须带上文件名称信息。tracke从文件名称中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求。

本文是在阅读某大神的文章时进行的整理和摘录,同一时候加入了自己的一些思考,以下附上大神的链接:http://blog.yunnotes.net/index.php/fastdfs_design/

分布式文件存储FastDFS(一)初识FastDFS的更多相关文章

  1. 分布式文件存储:FastDFS简单使用与原理分析

    引言 FastDFS 属于分布式存储范畴,分布式文件系统 FastDFS 非常适合中小型项目,在我接手维护公司图片服务的时候开始接触到它,本篇文章目的是总结一下 FastDFS 的知识点. 用了 2 ...

  2. 我心中的核心组件(可插拔的AOP)~分布式文件上传组件~基于FastDFS

    回到目录 一些概念 在大叔框架里总觉得缺点什么,在最近的项目开发中,终于知道缺什么了,分布式文件存储组件,就是缺它,呵呵,对于分布式文件存储来说,业界比较公认的是FastDFS组件,它自己本身就是集群 ...

  3. .Net平台下,分布式文件存储的实现

    遇到的问题 对于Web程序,使用一台服务器的时候,客户端上传的文件一般也都是存储在这台服务器上.但在集群环境中就行不通了,如果每个服务器都存储自己接受到的文件,就乱套了,数据库中明明有这个附件的记录, ...

  4. 【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用

    [网络爬虫入门05]分布式文件存储数据库MongoDB的基本操作与爬虫应用 广东职业技术学院  欧浩源 1.引言 网络爬虫往往需要将大量的数据存储到数据库中,常用的有MySQL.MongoDB和Red ...

  5. 分布式文件存储数据库 MongoDB

    MongoDB 简介 Mongo 并非芒果(Mango)的意思,而是源于 Humongous(巨大的:庞大的)一词. MongoDB 是一个基于分布式文件存储的 NoSQL 数据库.由 C++ 语言编 ...

  6. (转) 分布式文件存储FastDFS(一)初识FastDFS

    http://blog.csdn.net/xingjiarong/article/details/50559849 一.FastDFS简介 FastDFS是一款开源的.分布式文件系统(Distribu ...

  7. Centos7部署分布式文件存储(Fastdfs)

    目录 FastDFS介绍 楼主目标:前可H5撩妹,后可Linux搞运维 环境:Centos7 软件: 软件链接: 安装前所有准备,上传软件到Centos7上的/opt的目录下 安装依赖软件和类库(安装 ...

  8. 1Nginx+fastdfs分布式文件存储

     准备,将所需的软件传到服务器上,服务器的列表如下: fastdfs-nginx-module_v1.15.tar.gz FastDFS_v4.06.tar.gz libevent-2.0.21- ...

  9. 分布式文件存储FastDFS(七)FastDFS配置文件具体解释

    配置FastDFS时.改动配置文件是非常重要的一个步骤,理解配置文件里每一项的意义更加重要,所以我參考了大神的帖子,整理了配置文件的解释.原帖例如以下:http://bbs.chinaunix.net ...

随机推荐

  1. SpringCloud学习笔记(7)----Spring Cloud Netflix之负载均衡-Ribbon的深入理解

    1. 注解@LoadBalanced 作用:识别应用名称,并进行负载均衡. 2. 入口类:LoadBalancerAutoConfiguration 说明:类头上的注解可以知道Ribbon 实现的负载 ...

  2. Oralce 视图 view

    Oracle视图 Oracle的数据库对象分为五种:表,视图,序列,索引和同义词. 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表 ...

  3. centeros 7开机自动挂载磁盘

    场景: 使用mount命令将新发现的磁盘/dev/sdb挂载给/liu后,但是重启后又看不到磁盘? 问题导致原因: 虽然我们可以使用mount命令去挂载磁盘,但是此操作只对服务器运行期间有效,也就是临 ...

  4. poj1284 && caioj 1159 欧拉函数1:原根

    这道题不知道这个定理很难做出来. 除非暴力找规律. 我原本找的时候出了问题 暴力找出的从13及以上的答案就有问题了 因为13的12次方会溢出 那么该怎么做? 快速幂派上用场. 把前几个素数的答案找出来 ...

  5. 紫书 习题 8-22 UVa 1622 (构造法)

    这道题的构造法真的复杂--要推一堆公式--这道题写了几天了--还是没写出来-- 一开始简单的觉得先左右来回, 然后上下来回, 然后把剩下的执行完了好了, 然后就WA. 然后换了个思路, 觉得是贪心, ...

  6. 高并发web系统设计

    转载自:http://blog.csdn.net/qq_26562641/article/details/53170913 一.一般高并发web系统这里的一般指的是秒杀之类的电子商务系统,比如说小米抢 ...

  7. HNU 13108 Just Another Knapsack Problem DP + Trie树优化

    题意: 给你一个文本串,和一些模式串,每个模式串都有一个价值,让你选一些模式串来组成文本串,使获得的价值最大.每个模式串不止能用一次. 思路: 多重背包,枚举文本串的每个位置和模式串,把该模式串拼接在 ...

  8. [terry笔记]11gR2_dataguard_主备库切换

    主备库切换  Switchover  一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏,原来DATA GU ...

  9. linux安装oracleclient

    1.准备好所须要的安装包,http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html这个网 ...

  10. mysql-管理事务

    一.介绍 mysql支持几种基本的数据库引擎,其中MYSQL的两种最基本的引擎MyISAM和InnoDB,其中只有InnoDB支持事务管理. 事务处理:可以用来维护数据库的完整性,他保证成批的MySQ ...