• FastDFS介绍


    什么是FastDFS

    FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。


    FastDFS的特性:

        FastDFS是一个轻量级的开源分布式文件系统

        FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡

        FastDFS实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储

        支持存储服务器在线扩容

        支持相同内容的文件只保存一份,节约磁盘空间

        FastDFS只能通过Client API访问,不支持POSIX访问方式

        FastDFS特别适合大中型网站使用,用来存储资源文件(如:图片、文档、音频、视频等等)

    系统架构-架构图:

    • 只有两个角色,tracker server和storage server,不需要存储文件索引信息
    • 所有服务器都是对等的,不存在Master-Slave关系
    • 存储服务器采用分组方式,同组内存储服务器上的文件完全相同(RAID 1)
    • 不同组的storage server之间不会相互通信

    • 由storage server主动向tracker server报告状态信息,tracker server之间通常不会相互通信


    Tracker集群:

    FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server不存在单点故障。客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。

    Storage集群:

    Storage集群采用了分组存储方式。storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个storage上的文件完全一致的。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。

    采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。

    Storage状态收集

    Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。

    上传文件流程图:


    客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

     组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。

     虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。

    数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。

    文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

    下载文件流程图:


    tracker根据请求的文件路径即文件ID 来快速定义文件。

    比如请求下边的文件:

    1.通过组名tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客户端访问。  

    2.存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。

     
    FastDFS 如何做到无索引服务器?

        上传文件时,文件ID由 storage server 生成并返回给client
        文件ID包含了组名和文件名,storage server可以直接根据该文件名定位到文件
        一个文件ID示例

    文件名包含的信息

    采用Base64编码。包含的字段包括:

        源storage server IP地址
        文件创建时间
        文件大小
        文件CRC32校验码
        随机数

    FastDFS同步机制:

        采用binlog文件记录 文件上传、删除等操作,根据binlog进行文件同步
        增量同步方式,记录已同步的位置到.mark文件中
        同组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行
        文件同步只在同组内的storage server 之间进行,采用push方式,即源头服务器同步给目标服务器

    FastDFS如何解决同步延迟问题?

        storage生成的文件名中,包含源头storage IP 地址和文件创建时间戳
        源头storage定时向tracker报告同步情况,包含向目标服务器同步到的文件时间戳
        tracker收到storage的同步报告后,找出该组内每台storage被同步的时间戳(取最小值),作为storage属性保存到内存

    以HTTP方式下载文件:

        FastDFS 分组存储方式,为HTTP方式下载提供了遍历
        FastDFS支持HTTP方式下载文件,不建议使用内置web server,推荐使用外部web server,例如Apache或 Nginx
        因为需要解决文件同步延迟的问题因此在apache 和 nginx上需要使用FastDFS扩展模块。尤其是V3.x引入小文件合并存储后,必须使用扩展模块来读取文件

    FastDFS 扩展模块要点:

        使用扩展模块来解决文件同步延迟问题
        在每台storage server上部署web server,直接对外提供HTTP服务
        tracker server上不需要部署web server
        如果请求文件在当前storage上不存在,通过文件ID反编译出源stroage,直接请求源storage
        目前已提供apache和nginx扩展模块
        FastDFS扩展模块不依赖与FasrDFS server,可以独立存在!!!

    FastDFS扩展模块特性:

        仅支持HTTP HEAD 和 GET
        支持 token方式的防盗链
         -ts :生成token的时间(unix时间戳)
        -token :32位的token字符串(md5签名
        支持指定保存的缺省文件名,URL参数名为filename
        支持断点续传

    推荐FastDFS 部署方案:

        文件上传和删除操作:使用FastDFS client API,目前提供了C、PHP 和JAVA的client API
        文件下载采用HTTP方式:使用nginx或者apache扩展模块,不推荐使用FastDFS内置的web server
        不要做RAID,直接挂载单盘,每隔硬盘作为一个mount point

    最大并发连接设置:

        参数名:max_connections
        缺省值:256
        说明: FastDFS 采用预先分配好buffer队列的做法,分配的内存大小:max_connections*buff_size,因此配置的连接数越大,消耗的内存越多。不建议配置得过大,以避免无谓的内存开销。

    工作线程设置:

        参数名: work_threads
        缺省值: 4
        说明: 为了避免CPU上下文切换的开销,以及不必要的资源消耗,不建议将本参数设置得过大。为了发挥出多个CPU的效能,系统中线程数总和,应等于CPU总数
        对于tracker server,公式为:work_threads + 1 = CPU 数
        对于storage,公式为:work_threads + 1 + (disk_reader_threads +disk_writer_threads) * store_path_count = CPU数

    storage 目录数设置:

        参数名: subdir_count_per_path
        缺省值 : 256
        说明: FastDFS 采用二级目录的做法,目录会在FastDFS初始化时自动创建。存储海量小文件,打开了trunk存储方式的情况下,建议将本参数适当该小,比如设置为32,此时存放文件的目录数为32*32 = 1024.

    storage磁盘读写线程设置:

        disk_rw_separated:  磁盘读写是否分离
        disk_reader_threads: 单个磁盘读线程数
        disk_writer_threads: 单个磁盘写线程
        如果磁盘读写混合,单个磁盘读写线程数为读线程数和写线程数之和
        对于单盘挂载方式,磁盘读写线程分别设置为1即可
        如果磁盘做了RAID,那么需要酌情加大读写线程数,这样才能最大程度地发挥磁盘性能

    storage同步延迟相关设置

    • sync_binlog_buff_interval:将binlog buffer写入磁盘的时间间隔,取值大于0,缺省值为60s
    • sync_wait_msec:如果没有需要同步的文件,对binlog进行轮询的时间间隔,取值大于0,缺省值为100ms
    • sync_interval:同步完一个文件后,休眠的毫秒数,缺省值为0
    • 为了缩短文件同步时间,可以将上述3个参数适当调小即可
    ---------------------
    作者:笑看风华
    来源:CSDN
    原文:https://blog.csdn.net/fd2025/article/details/80071191
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    客户区大小 clientWidth & clientHeight
    输出页面中所有的标签
    偏移量 offsetLeft & offsetTop
    输出页面中指定的标签 2
    Ubuntu 12.10击败Windows 8的十个理由
    InnoDB与MyISAM的六大区别
    总承包建设企业多项目管理成熟度
    软考信息系统项目管理师考试计算公式
    (1042)MySQL报错1042Can’t get hostname for your address解决
    20个数据库设计最佳实践
  • 原文地址:https://www.cnblogs.com/yipianchuyun/p/10726737.html
Copyright © 2020-2023  润新知