FastDFS基础概述与系统架构详解

server/2024/11/27 23:18:42/

目录

        • 一、FastDFS简介
        • 二、FastDFS系统架构
          • 1. 跟踪服务器(Tracker Server)
          • 2. 存储服务器(Storage Server)
          • 3. 客户端(Client)
        • 三、FastDFS功能逻辑分析
          • 1. 文件上传(Upload File)原理
          • 2. 文件下载(Download File)逻辑

一、FastDFS简介

FastDFS(Fast Distributed File System)是一个开源的分布式文件系统,旨在提供高性能、高可靠性及可扩展性的文件存储解决方案,专门应对海量数据存储的挑战。其核心功能涵盖文件存储、同步及访问,尤其适用于中小型文件(推荐范围:4KB < 文件大小 < 500MB)作为载体的在线服务场景,如图片分享平台和视频分享网站。

应用场景示例:
假设您运营一个大型网站,用户可以上传和下载大量图片及视频文件。如果所有文件集中存储在单一服务器上,可能导致服务器负载过高、存储空间不足及访问速度缓慢等问题。此时,采用分布式存储将文件分散至多台服务器,可以显著提升系统的整体性能与可靠性。

FastDFS正是为解决此类问题而设计。它通过将大文件切分为小块,并分散存储在多台服务器上,实现文件的分布式存储。此外,FastDFS还提供了文件上传、下载、删除等操作接口,便于开发人员高效地管理分布式文件。

FastDFS开源地址:
FastDFS GitHub 仓库

二、FastDFS系统架构

FastDFS主要由跟踪服务器(Tracker Server)、**存储服务器(Storage Server)客户端(Client)**三部分构成。
在这里插入图片描述

1. 跟踪服务器(Tracker Server)

跟踪服务器在FastDFS中充当调度和负载均衡的角色。它在内存中维护集群内所有存储组及存储服务器的状态信息,作为客户端与存储服务器交互的核心枢纽。

主要职责:

  • 协调管理:负责管理所有Storage Server和Group。
  • 心跳机制:每个Storage Server启动后会连接Tracker,报告所属Group信息并定期发送心跳。Tracker依据心跳信息建立Group与Storage Server列表的映射。
  • 动态分配:客户端在访问Storage Server前,需先联系Tracker获取可用的Storage Server信息,从而实现动态负载均衡。
  • 高扩展性:Tracker仅管理少量元数据,全部存储于内存中,无需持久化数据。通过增加Tracker实例,可以轻松扩展为集群模式,提升系统的可扩展性与容错能力。
2. 存储服务器(Storage Server)

Storage Server按照**组(Group)**进行组织,每个Group包含多台Storage Server,数据在组内实现互为备份。存储空间以Group内最小容量的Storage Server为基准,建议组内所有Storage配置相同,避免存储空间浪费。

组管理优势:

  1. 应用隔离:不同应用的数据存储于不同的Group,实现数据隔离。
  2. 负载均衡:根据应用访问特性,将不同应用分配至不同Group,实现负载均衡。
  3. 副本定制:Group内Storage Server数量即为数据副本数,可根据需求定制副本数量。

存储机制:

  • 多存储目录配置:Storage Server可配置多个数据存储目录,如配置10块磁盘分别挂载至/data/disk1/data/disk10,并将这些目录配置为Storage的数据存储路径。
  • 文件存储策略:接收到写文件请求后,Storage根据配置规则选择存储目录。为避免单目录文件过多,Storage启动时会在每个存储目录下创建两级子目录,每级256个,总计65536个子目录。新文件通过哈希方式路由至某个子目录,并作为本地文件存储,从而加快文件索引速度。
    在这里插入图片描述

缺点:

  • 容量限制:Group容量受单台Storage Server存储容量限制。
  • 恢复延时:组内Storage Server故障时,数据恢复需依赖其他Storage Server,可能导致较长的恢复时间。
3. 客户端(Client)

FastDFS客户端提供基本的文件访问接口,如monitoruploaddownloadappenddelete等,通过客户端库供用户使用,简化分布式文件操作。

三、FastDFS功能逻辑分析
1. 文件上传(Upload File)原理

在这里插入图片描述

上传文件过程涉及以下步骤:

步骤一:选择Tracker Server

  • 在集群中存在多个Tracker Server时,客户端可任意选择一个进行文件上传。

步骤二:选择存储Group

  • Tracker接收到上传请求后,依据以下规则分配合适的Group:
    1. 轮询(Round Robin):在所有Group间轮流选择。
    2. 指定Group(Specified Group):指定特定的Group。
    3. 负载均衡(Load Balance):选择剩余空间最大的Group进行上传。

步骤三:选择Storage Server

  • 确定Group后,Tracker在该Group内选择一个Storage Server,依据以下规则:
    1. 轮询(Round Robin):在Group内Storage Server间轮流选择。
    2. 按IP排序:选择IP排序后的首个服务器。
    3. 按优先级排序:依据配置的优先级选择首个服务器。

步骤四:选择存储路径

  • 客户端向选定的Storage Server发送写文件请求,Storage根据以下规则分配数据存储目录:
    1. 轮询(Round Robin):在多个存储目录间轮流选择。
    2. 剩余空间最大优先:优先选择剩余存储空间最多的目录。

步骤五:生成Fileid

  • Storage根据文件信息生成Fileid,包含Storage Server的IP、文件创建时间、文件大小、CRC32校验码及随机数,通过Base64编码转换为可打印字符串。

步骤六:选择两级目录

  • Storage依据Fileid将文件路由至存储目录下的两级子目录(每级256个),确保文件均匀分布。

步骤七:生成文件名

  • 文件存储成功后,生成文件名,格式为Group存储目录两级子目录Fileid及文件后缀名(由客户端指定,用于区分文件类型)拼接而成。
    在这里插入图片描述
2. 文件下载(Download File)逻辑

在这里插入图片描述

下载文件过程如下:

步骤一:选择Tracker Server

  • 客户端在下载文件时,可选择任意Tracker Server。

步骤二:发送下载请求

  • 客户端将文件名信息发送至选定的Tracker Server,Tracker解析文件名中的Group、文件大小、创建时间等信息,并选择一个Storage Server提供读取服务。

一致性问题处理:
FastDFS采用弱一致性,即先返回存储结果,再进行数据同步,提升速度但可能导致部分Storage Server数据未同步。

避免访问未同步Storage的策略:

  1. 源头Storage优先:源头Storage始终存有文件副本,Tracker优先选择源头Storage进行读取。
  2. 时间戳机制:Tracker基于同步时间点,选择已同步完毕的Storage Server,确保读取的数据一致性。

参考:
0voice · GitHub


http://www.ppmy.cn/server/145464.html

相关文章

如何安全高效地打开和管理动态链接库(DLL)?系统提示dll丢失问题的多种有效修复指南

动态链接库&#xff08;DLL&#xff09;文件是Windows操作系统中非常重要的一部分&#xff0c;它们包含了程序运行所需的代码和数据。当系统提示DLL文件丢失时&#xff0c;可能会导致应用程序无法正常运行。以下是一些安全高效地打开和管理DLL文件以及修复DLL丢失问题的方法&am…

常见面试题----深入源码理解MQ长轮询优化机制

引言 在分布式系统中&#xff0c;消息队列&#xff08;Message Queue, MQ&#xff09;扮演着至关重要的角色。MQ不仅实现了应用间的解耦&#xff0c;还提供了异步消息处理、流量削峰等功能。而在MQ的众多特性中&#xff0c;长轮询&#xff08;Long Polling&#xff09;机制因其…

[自动化]获取每次翻页后的页面 URL

from DrissionPage import ChromiumPage page ChromiumPage() page.get(热门项目 - Gitee.com) page.listen.start(gitee.com/explore) for i in range(5): page("relnext").click() res page.listen.wait() print(res.url) 这段代码使用了DrissionPage库中的Chromi…

C#基础46-50

46.数组x中有n个数&#xff0c;求出奇数的个数cn1和偶数的个数cn2以及数组x下标为偶数的元素值的算术平均值pj&#xff08;保留2位小数&#xff09;。结果cn1,cn2,pj输出到控制台。 47.求出10000以下符合条件的自然数。条件是&#xff1a;千位数字与百位数字之和等于十位数字与…

基于DVB-T的COFDM+16QAM+LDPC图传通信系统matlab仿真,包括载波同步,定时同步,信道估计

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 图传测试&#xff1a; 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理…

蓝桥杯每日真题 - 第23天

题目&#xff1a;&#xff08;直线&#xff09; 题目描述&#xff08;12届 C&C B组C题&#xff09; 解题思路&#xff1a; 题目理解: 在平面直角坐标系中&#xff0c;从给定的点集中确定唯一的直线。 两点确定一条直线&#xff0c;判断两条直线是否相同&#xff0c;可通过…

IDEA隐藏文件或文件夹

1.问题来源 idea开发springboot项目时&#xff0c;有时会有很多额外的包或文件出现&#xff0c;如.iml、.idea、build等。这些包对业务代码开发没有任何影响&#xff0c;但影响idea项目结构效果&#xff0c;看起来很不舒服&#xff0c;这就可以使用改设置&#xff0c;屏蔽这些文…

【vue3实现微信小程序】每日专题与分页跳转的初步实现

快速跳转&#xff1a; 我的个人博客主页&#x1f449;&#xff1a;Reuuse博客 新开专栏&#x1f449;&#xff1a;Vue3专栏 参考文献&#x1f449;&#xff1a;uniapp官网 免费图标&#x1f449;&#xff1a;阿里巴巴矢量图标库 ❀ 感谢支持&#xff01;☀ 前情提要 &#x…