zoukankan      html  css  js  c++  java
  • FastDFS介绍

    • FastDFS是一个开源的轻量级分布式文件系统,功能包括:文件存储、文件同步、文件访问(文件上传下载)等,解决了大容量存储和负载均衡问题,特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
    • fastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、先行扩容等机制,而且fastDFS注重高可用、高性能,很容易搭建一套高性能的文件服务器集群,提供文件上传下载服务。
    • fastDFS的服务端有两个角色,跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起到负载均衡的作用。存储节点存储文件,完成文件管理的所有功能。
    • 跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
    • 为了支持大容量,存储节点(服务器)采用了分组的组织方式。存储系统由一个或多个组组成,组与组之间的文件是相互独立的,所有组的文件容量累加就是整个存储系统中的文件容量。一个组可以由一台或多台存储服务器组成,一个组下的存储服务器中的文件都是相同的,组中的多台存储服务器起到了冗余备份和负载均衡的作用。

     一、FastDFS架构

    1、Tracker Server:

    • 主节点,跟踪服务器,主要做调度工作,在访问上起到负载均衡的作用。
    • 记录storage server的状态,是连接storage的中间枢纽。
    • FastDFS中tracker server可以有多台,tracker server之间是相互平等的关系,而且同时提供服务。
    • tracker server不存在单点故障,客户端请求Trackerserver采用轮询方式 ,如果访问一个tracker server无法提供服务则换另外一个。

    2、torage Server:

    • 存储服务器,文件和meta data 都保存在存储服务器上。
    • storage集群由一个或多个组构成,集群存储的总容量为集群中所有组的存储容量之和。
    • 一个组由一台或者多台存储服务器组成,组内的storage之间是平等的关系。
    • 不同组的storage server之间不会相互通信,同组内的storage server之间会相互进行文件同步,从而保证同组内的每一个storage server上的文件完全一致的。
    • Storage Server 会连接集群中的所有Tracker Server ,定时的向他们上报自己的状态,包括磁盘剩余空间、文件同步状态、文件上传下载次数等统计信息。

    3、group:

    • 称为组,也称为卷。同组内的服务器上的文件是完全相同的。
    • 文件标识:文件标识包括两个部分,组名和文件名(包含路径)。
    • meta data:文件相关属性,键值对(key value)方式,如:width=1024,heigth=768。

    二、上传流程

    1、client询问tracker上传到的storage,不需要附加参数;tracker返回一台可用的storage;client直接和storage通讯完成文件上传。

     2、内部机制

    选择tracker server:

    当集群中不止一个tracker server时,由于tracker之间是完全对等的关系,客户端upload文件时可以任意选择一个tracker。

    选择存储的group,当tracker接收到upload file 的请求时,会为该文件分配一个可以存储该文件的group,支持如下选择group的规则:

    •  1、Round robin,所有的group间轮询。
    • 2、Specified group,指定某一个确定的group。
    • 3、Load balance,剩余存储空间多多group优先。

    选择storage servser:

    选定group,tracker会在group内选择一个storage server给客户端,选择storage的规则:

    • 1、Round robin,在group内的所有storage间轮询。
    • 2、First server ordered by ip,按ip排序。
    • 3、First server ordered by priority,按优先级排序(优先级在storage上配置)。

    选择storage path:

    当分配好storage server后,客户端将向storage发送写文件请求,storage将会为文件分配一个数据存储目录:

    • 1、Round robin,多个存储目录间轮询
    • 2、剩余存储空间最多的优先

    生成Fileid:

    选定存储目录之后,storage会为文件生一个Fileid,由storage server ip、文件创建时间、文件大小、文件crc32和一个随机数拼接而成,然后将这个二进制串进行base64编码,转换为可打印的字符串。

    当选定存储目录之后,storage会为文件分配一个fileid,每个存储目录下有两级256*256的子目录,storage会按照文件的的fileid进行hash,路由到其中一个子目录,然后将文件存储在该子目录下。

    生成文件名:

    当文件存储到某个子目录后,既认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名拼接而成。

    三、下载流程

    • client询问tracker下载文件的storage,参数为文件标识(组名和文件名);

    • tracker返回一台可用的storage;

    • client直接和storage通讯完成文件下载。

     

    1、binlog

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

    2、FastDFS和其他文件存储的简单对比

    指标FastDFSNFS集中存储设备 如NetApp**、NAS**
    线性扩容性
    文件高并发访问性能 一般
    文件访问方式 专有API POSIX 支持POSIX
    硬件成本 较低 中等
    相同内容文件只保存一份 支持 不支持 不支持
    指标FastDFSmogileFS
    系统简洁性 简洁 只有两个角色:tracker和storage 一般 有三个角色:tracker、storage和存储文件信息的mysql db
    系统性能 很高(没有使用数据库,文件同步直接点对点,不经过tracker中转) 高(使用mysql来存储文件索引等信息,文件同步通过tracker调度和中转)
    系统稳定性 高(C语言开发,可以支持高并发和高负载) 一般(Perl语言开发,高并发和高负载支持一般)
    软RAID方式 分组(组内冗余),灵活性较大 动态冗余,灵活性一般
    通信协议 专有协议 下载文件支持HTTP HTTP
    技术文档 较详细 较少
    文件附加属性(meta data) 支持 不支持
    相同内容文件只保存一份 支持 不支持
    下载文件时支持文件偏移量 支持 不支持
  • 相关阅读:
    浅析如何让 (a === 1 && a === 2 && a === 3) 返回 true
    浅析单点登录的三种实现方式
    浅析瀑布流布局原理及实现方式
    浅析Java中三目运算符可能产生的坑
    【转】IO
    [转]gomonkey学习
    从sha1的计算例子,理解计算机的数据表示?16进制输出?二进制输出??
    [转]Golang第三方包应该如何安装--在线和离线
    【转】goconvey使用
    go import 时 点号 和下划线的区别
  • 原文地址:https://www.cnblogs.com/dongl961230/p/14985578.html
Copyright © 2011-2022 走看看