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

【分布式文件系统】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.xdnf.cn/news/607141.html

相关文章:

  • 语音合成之十五 语音合成(TTS)分句生成拼接时的响度一致性问题:现状、成因与对策
  • 拉普拉斯算子过零点边缘检测原理以及抑制伪边缘的方法
  • 农业机械化、电气化和自动化知网英文普刊:1天录用,2周见刊发表!
  • 全链路解析:影刀RPA+Coze API自动化工作流实战指南
  • 静态时序分析与约束
  • Python 和 matplotlib 保存图像时,确保图像的分辨率和像素符合特定要求(如 64x64),批量保存 不溢出内存
  • 单机Kafka配置ssl并在springboot使用
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 4】【高通蓝牙hal主要流程介绍-中】
  • 26考研|高等代数:线性变换
  • 纯虚函数必须在派生类中给出定义吗? 虚函数必须在派生类中给出定义吗?
  • Honeywell TK-PRS021 C200
  • Redis核心用法与通用命令全解析
  • Go语言中为什么map、slice、channel需要var之后还要make一下?
  • FTP Bounce Attack:原理、影响与防御
  • 如何安装和维护 Linux 系统?
  • 2025电工杯数学建模竞赛B题 城市垃圾分类运输的路径优化与调度 保姆级教程讲解|模型讲解
  • Missashe线代题型总结
  • 编译器ar命令参数
  • java中多线程的实现方式
  • 【算法篇】二分查找算法:基础篇
  • AES加密模式详解及OpenSSL C库函数指南
  • 【SSL部署与优化​】​​OCSP Stapling配置指南:减少证书验证延迟​​
  • 相机坐标系、图像坐标系和世界坐标系
  • redis 基本命令-17 (KEYS、EXISTS、TYPE、TTL)
  • 新手SEO高效入门实战精要
  • 40 岁 Windows 开启 AI 转型:从系统到生态的智能重构
  • 「MATLAB」计算校验和 Checksum
  • C++:动态刷新打印内容
  • 使用Gemini, LangChain, Gradio打造一个书籍推荐系统 (第二部分)
  • 【Elasticsearch】给所索引创建多个别名