FastDFS分布式存储

FastDFS原理

FastDFS架构

  1. Tracker server

跟踪服务器主要做挑度工作,起到均衡的作用,负责管理所有的Storage server和group

  1. Storage server

储服务器,主要提供容量和备份服务;以group为单位,每个group内部可以有多台storage server,数据互为备份。

  1. Client

客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。
在这里插入图片描述

文件的上传

在这里插入图片描述

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

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

  1. 选择storage server
    当选定group后,tracker会在group内选择一个storage server给客户端,支持如下选择storage的规则:

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

  1. 选择storage path
    当分配好storage server后,客户端将向storage发送写文件请求,storage将会为文件分配一个数据存储目录,支持如下规则:

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

  1. 生成Fileid

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

  1. 生成文件名

当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

文件的下载

  1. 定位文件
  1. 文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
  2. 虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
  3. 数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
  4. 文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

相关推荐

  1. <span style='color:red;'>FastDFS</span>

    FastDFS

    2024-07-22 14:26:03      51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 14:26:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 14:26:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 14:26:03       45 阅读
  4. Python语言-面向对象

    2024-07-22 14:26:03       55 阅读

热门阅读

  1. 常见的坐标系统

    2024-07-22 14:26:03       18 阅读
  2. 905. 按奇偶排序数组->双指针简单运用

    2024-07-22 14:26:03       14 阅读
  3. k8s部署kafka集群

    2024-07-22 14:26:03       17 阅读
  4. ThreadLocal的使用以及使用的场景

    2024-07-22 14:26:03       17 阅读
  5. 7.21 复习数据结构相关知识【主链表】

    2024-07-22 14:26:03       19 阅读
  6. LEFT JOIN RIGHT JOIN INNER JOIN JOIN如何理解这几个JOIN?

    2024-07-22 14:26:03       17 阅读
  7. Linux常用命令

    2024-07-22 14:26:03       16 阅读
  8. 软件测试-测试用例设计方法(附实际项目用例)

    2024-07-22 14:26:03       18 阅读
  9. 【图像处理】不智能的目标识别

    2024-07-22 14:26:03       20 阅读
  10. Linux基础: 五. 文本编辑器vi和vim

    2024-07-22 14:26:03       15 阅读