当前位置: 首页 > article >正文

【分布式文件系统】FastDFS

1.简介 

 讲这个之前,相信很多人特别是学java的,肯定在做苍穹外卖的时候肯定接触过一个东西,叫做阿里云OSS,他们的功能都差不多,但是阿里云的这个是要付费的,而FastDFS是免费开源的,是由淘宝资深架构师余庆开发,专为高并发,大文件存储场景设计,尤其适用于海量小文件存储(如图片,视频,日志等)。它具有轻量级,高可扩展,高可用等特点,广泛适用于电商,社交,音视频等领域。

2.组成

 2.1 Tracker Server(跟踪服务器)

作为分布式系统的“调度中心”,起负载均衡的作用,在内存中记录集群中所有存储组合存储服务器的状态信息,是客户端和存储服务器交互的枢纽,不记录文件索引信息,占用的内存量很少

负责管理集群中的Storage Server和group,每个storage在启动后会连接tracker,告知自己所属的group等信息,并保持周期性心跳。

tracker根据storage的心跳信息,建立group==>[storage server list]的映射表

2.2 Storage Server(存储服务器)

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

2.3 Client(客户端)

作为业务请求发起方,与tracker server或者storage server进行数据交互

3.文件上传

客户端向Tracker服务器发起文件上传请求,Tracker服务器接收到请求后,会基于预设的负载均衡策略(如轮询、分组内随机或存储空间优先等),为待上传文件分配一个可用的存储分组(Group)及该分组内的一个Storage节点。

随后,Tracker服务器将目标Storage节点的连接信息返回给客户端,包含节点IP地址、服务端口号以及所属分组名等关键参数。客户端依据这些信息,直接与目标Storage节点建立连接并发起文件数据传输请求。

Storage节点接收文件数据后,会执行以下操作:

   1.生成文件标识**:按照固定规则生成唯一的文件标识(File ID),其结构为 `group_name/M00/00/00/[文件哈希值]`。其中,`M00` 是默认的存储路径前缀;`00/00` 为两级目录,由文件哈希值的前两位自动生成,通过这种路径散列方式有效分散磁盘存储压力,避免单目录下文件数量过于集中。

   2. 磁盘写入:将文件数据按指定路径写入本地磁盘。

   3. 数据冗余同步:为保障数据可靠性,Storage节点会根据集群配置的副本策略(默认同步1份副本),将新写入的文件同步至同分组内的其他Storage节点,通过增量同步或全量同步机制确保同组节点间数据一致。

待文件存储及同步完成后,Storage节点向客户端返回上传结果,包含文件路径(File Path)**和自定义元数据。其中,文件路径遵循 `group1/M00/00/00/[文件名]` 的格式,与文件标识形成映射关系,便于后续下载或管理操作;元数据为客户端上传时附带的业务属性信息(如用户ID、文件类型等键值对),可用于业务场景下的文件分类与检索。

4.文件下载 

storage会定时向tracker发送心跳,让tracker确认storage还活着

客户端向tracker发送下载请求,tracker查找存储storage的地址后返回给客户端

客户端拿到Storage地址后,去Storage上找到文件

Storage把文件返回给客户端

http://www.lryc.cn/news/2384665.html

相关文章:

  • 14、自动配置【源码分析】-初始加载自动配置类
  • word为章节标题添加自动编号
  • 无人机飞行间隔安全智能评估、安全风险评估
  • C++成员对象和封闭类
  • 【VLNs篇】03:VLMnav-端到端导航与视觉语言模型:将空间推理转化为问答
  • PCB设计实践(二十五)贴片电阻与插件电阻的全面解析:差异、演进与应用场景
  • 知道不知道
  • 文章记单词 | 第106篇(六级)
  • SpringBoot项目中Redis的使用
  • Canvas设计图片编辑器全讲解(一)Canvas基础(万字图文讲解)
  • 利用Qt绘图随机生成带多种干扰信息的数字图片
  • STM32——从点灯到传感器控制
  • java day14
  • Tailwind css实战,基于Kooboo构建AI对话框页面(一)
  • 重塑数学边界:人工智能如何引领数学研究的新纪元
  • docker部署并测试翻译模型-CSANMT连续语义增强机器翻译
  • 蓝桥杯2025.5.23每日一题-儿童数
  • Spring Boot项目配置核心 - pom.xml的依赖管理与构建优化
  • 告别手抖困扰:全方位健康护理指南
  • 图解深度学习 - 特征工程(DL和ML的核心差异)
  • 《短线操盘跟庄关键技术》速读笔记
  • Datacom-hcia~Datacom-hcie学习笔记索引
  • Oracle 中 SHRINK 与 MOVE 操作的比较
  • 受不了github的网络限制了,我开源了一个图床工具 gitee-spring-boot-starter
  • 【Python 基础与实战】从基础语法到项目应用的全流程解析
  • 2025年医美行业报告60+份汇总解读 | 附 PDF 下载
  • API自动化与持续集成核心实战知识点!
  • 基于SpringBoot+Vue的社区医院信息平台设计与实现
  • C++ 中的暴力破解算法
  • 前端[插件化]设计思想_Vue、React、Webpack、Vite、Element Plus、Ant Design