Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >FastDFS的文件上传、下载原理以及负载均衡方法

FastDFS的文件上传、下载原理以及负载均衡方法

原创
作者头像
Lion 莱恩呀
发布于 2024-12-27 13:23:32
发布于 2024-12-27 13:23:32
47500
代码可运行
举报
文章被收录于专栏:后端开发技术后端开发技术
运行总次数:0
代码可运行

一、文件上传原理

图片
图片

fastdfs_upload_file

1.1、选择tracker server

高可用,通过冗余的方式提供服务。当集群中不止一个tracker服务时,由于tracker之间是对等的关系,客户端在上传文件时可以任意选择一个tracker。

图片
图片

fastdfs_arch

1.2、选择存储的group及其负载均衡算法

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

(1)Round robin,所有的group间轮询。

(2)Specified group,指定某一个确定的group。

(3) Load balance,选择最大剩余空 间的组上传文件 。

1.3、选择storage server及其负载均衡算法

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

  1. Round robin,在group内的所有storage间轮询。
  2. First server ordered by ip,按IP排序,也会轮询。
  3. First server ordered by priority,按优先级排序(优先级在storage上配置);可以理解为权重的方式,权重高的优先选择。比如,storage 1 为100M的带宽和storage 2为500M带宽,上传文件时优先使用500M带宽的storage。

1.4、选择storage path及其负载均衡算法

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

(1) Round robin,多个存储目录间轮询。

(2)剩余存储空间最多的优先。

可以配置多个磁盘路径。注意,同一个group中的storage的配置必须是一样的;这里的一样不是路径一样,而是path的数量要一致。多个路径对应多个磁盘,才能发挥多个磁盘并发读写能力。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# store path (disk or mount point) count, default value is 1store_path_count = 1
#存储路径(磁盘或挂载点)计数,默认值为1 

store_path_count=1

# store_path#, based on 0, to configure the store paths to store filesif store_path0 not exists, it' s value is base_path (NOTrecommended)#the paths must be exist.
#store_path#,基于0,要配置存储路径来存储filesif store_path 0不存在,它的值是base_path(NOT推荐的)#这些路径必须存在。
#
#
#工IMPORTANTNOTE:#
#工IMPORTANTNOTE:
#the store paths' order is very important, don 't mess up ! !!
#store路径的排序很重要,不要搞砸了!
#
# the base_path should be independent (different) of the store paths
# 基路径应该独立于存储路径(不同)

store_path0 = /home/fastdfs/storage_group1_23000
#store_path1 = / home/yuqing/fastdfs2

fastdfs适合小文件存储,大文件存储建议使用ceph。如果使用fastdfs存储大文件,那么是一个磁盘分摊写压力;而ceph的集群可以使用多台服务分摊写压力,写的速度会非常快。

1.5、生成Fileid

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 4 bytes  4 bytes	  8 bytes   4 bytes  2 bytes
+--------+--------+----------------+--------+-----+
|   IP   |  time  |	file_size  | crc32  |校验值|

(1)选择两级目录:

当选定存储目录之后,storage会为文件分配一个fileid,每个存储目录下有两级256*256的子目录,storage会路由到其中一个子目录,然后将文件以fileid为文件名存储到该子目录下。

(2)生成文件名:

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

图片
图片

fastdfs_file_path

文件名规则:

  1. storage_id,(ip的数值型)源storage server ID或IP地址。
  2. timestamp,文件创建时间戳。
  3. file_size,若原始值为32位则前面加入一个随机值填充,最终为64位。
  4. crc32,文件内容的检验码。
  5. 随机数 ,引入随机数的目的是防止生成重名文件。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eBuDxWCb2qmAQ89yAAAAKeR1iIo162
| 4bytes | 4bytes    | 8bytes    |4bytes | 2bytes |
| ip     | timestamp | file_size |crc32  | 校验值 |

二、下载文件逻辑

客户端upload file成功后,会拿到一个storage生成的文件名,接下来客户端根据这个文件名即可访问到该文件。

图片
图片

fastdfs_download_file

跟upload file一样,在download file时客户端可以选择任意tracker server。

client发送download请求给某个tracker,必须带上文件名信息,tracke从文件名中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求。

由于group内的文件同步时在后台异步进行的,所以有可能出现在读到时候,文件还没有同步到某些storage server上,为了尽量避免访问到这样的storage,tracker按照如下规则选择group内可读的storage:

  1. 该文件上传到的源头storage, 源头storage只要存活着,肯定包含这个文件,源头的地址被编码在文件名中。
  2. 文件创建时间戳一定是storage被同步到的时间戳 且(当前时间-文件创建时间戳) > 文件同步最大时间(如5分钟) ,文件创建后,认为经过最大同步时间后,肯定已经同步到其他storage了。
  3. 文件创建时间戳 < storage被同步到的时间戳。同步时间戳之前的文件确定已经同步了。
  4. (当前时间-文件创建时间戳) > 同步延迟阀值(如一天)。经过同步延迟阈值时间,认为文件肯定已经同步了。

思考:fastdfs上传完文件后立即读取文件问题。因为fastdfs是弱一致性,可能其他storage还没有同步文件,这时应该怎么判断从哪个storage中读取文件?

答案:可以根据时间来读取,因为fileid里有携带时间戳,可以根据时间进行匹配来进入storage ;如果某个storage没有同步

三、总结

本文旨在深入探索FastDFS的文件上传和下载原理,并介绍负载均衡的关键方法。我们将详细解析FastDFS在文件传输方面的工作原理,以及如何通过负载均衡提升性能和可靠性。主要内容包括:

1. 文件上传原理:详细介绍FastDFS的文件上传流程,包括客户端与跟踪器节点的交互、文件分片和存储节点的选择等关键步骤。

2. 文件下载原理:解析FastDFS的文件下载过程,包括客户端与存储节点的通信、文件分片的获取和组装等步骤,揭示文件下载的工作原理。

3. 负载均衡方法:介绍FastDFS中常用的负载均衡方法,如基于权重的负载均衡、一致性哈希算法等,以及它们在提升系统性能和可扩展性方面的作用。

4. 性能优化和实践经验:讨论如何通过性能优化和实践经验进一步提升FastDFS的文件上传和下载性能,包括网络优化、调整参数和合理的存储节点配置等方面的建议。

通过本文,读者将深入了解FastDFS的文件上传和下载原理,以及负载均衡的关键方法。我们将解析FastDFS在文件传输方面的内部工作流程,探讨如何通过负载均衡提升系统性能和可靠性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
1.FastDFS分布式的文件存储系统入门介绍与实践
0x00 基础介绍 0.前言 Q: 传统的文件系统面临的问题与挑战? 描述: 在传统WEB应用中,前端、后端、以及其它API服务部署在同一台服务器,所有文件都作为静态资源访问,随着业务量的不断增长,久
全栈工程师修炼指南
2022/09/29
3.5K0
1.FastDFS分布式的文件存储系统入门介绍与实践
FastDFS轻量级分布式存储文件系统
FastDFS系统分为三个角色,跟踪服务器(tracker server),存储服务器(storage server),客户端(client).
小土豆Yuki
2020/06/15
1.4K0
分布式文件服务器fastDFS
FastDFS 是用 c 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
一点博客
2019/07/24
1.5K0
FastDFS原理及部署
FastDFS是一个c语言编写的一个开源的轻量级分布式文件系统,它对文件进程管理,功能包括:文件存储,文件同步,文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题,特别适合以文件为载体的在线服务,如相册网站,视频网站等等,FastDFS为互联网量身定制,充分考虑了冗余备份,负载均衡,现行扩容等,并注重高可用,高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载服务。
小手冰凉
2020/03/31
1K0
FastDFS原理及部署
FastDFS分布式文件系统
一,简介 FastDFS是一个开源的轻量级 分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务,如相册网站、视频网站等等。使用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。同时FastDFS提供了Java,C和PHP等语言的客户端API,我们可以在应用服务端通过API操作文件系统。 二,原理分析 F
java达人
2018/01/31
1.8K0
FastDFS分布式文件系统
FastDFS–原理篇
FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用。准确地讲,Google FS以及FastDFS、mogileFS、HDFS、TFS等类Google FS都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。
星哥玩云
2022/07/03
8830
FastDFS–原理篇
FastDFS 海量小文件存储解决之道
支持 Linux、FreeBSD、AID 等Unix系统,解决了大容量的文件存储和高并发访问问题,文件存取实现了负载均衡,适合存储 4KB~500MB 之间的小文件,特别适合以文件为载体的在线服务,如图片、视频、文档等等。
2020labs小助手
2022/04/26
2.2K0
分布式文件系统FastDFS详解
上一篇文章《一次FastDFS并发问题的排查经历》介绍了一次生产排查并发问题的经历,可能有些人对FastDFS不是特别的了解,因此计划写几篇文章完整的介绍一下这个软件。 为什么要使用分布式文件系统呢? 嗯,这个问题问的好,使用了它对我们有哪些好处?带着这个问题我们来往下看: 单机时代 初创时期由于时间紧迫,在各种资源有限的情况下,通常就直接在项目目录下建立静态文件夹,用于用户存放项目中的文件资源。如果按不同类型再细分,可以在项目目录下再建立不同的子目录来区分。例如: resources\static\fil
纯洁的微笑
2018/04/18
1.9K0
分布式文件系统FastDFS详解
分布式文件系统(HDFS和FastDFS)
FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
码客说
2020/10/23
5.3K0
JavaWeb项目架构之FastDFS分布式文件系统
分布式文件系统:Distributed file system, DFS,又叫做网络文件系统:Network File System。一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
小柒2012
2018/03/30
1.2K2
JavaWeb项目架构之FastDFS分布式文件系统
Linux下FastDFS分布式存储-总结及部署记录
一、分布式文件系统介绍 分布式文件系统:Distributed file system, DFS,又叫做网络文件系统:Network File System。一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。 特点:在一个分享的磁盘文件系统中,所有节点对数据存储区块都有相同的访问权,在这样的系统中,访问权限就必须由客户端程序来控制。分布式文件系统可能包含的功能有:透通的数据复制与容错。 分布式文件系统是被设计用在局域网。而分布式数据存储,则是泛指应用分布式运算技术的文件
洗尽了浮华
2018/03/28
2.3K0
Linux下FastDFS分布式存储-总结及部署记录
【FastDFS】一文学会一个分布式文件系统!
在引入分布式文件存储之前,在哪个项目中上传的图片就存储到哪个项目所在的服务器。其他项目模块可以通过 HTTP请求 获取图片。
行百里er
2022/11/22
4100
【FastDFS】一文学会一个分布式文件系统!
分布式文件系统FastDFS如何做到高可用
FastDFS是用C语言编写的一款开源的轻量级分布式文件系统。它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。 FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。 与Hadoop有什么区别?   Hadoop也是一个分布式文件系统,had
欢醉
2018/01/22
2.1K0
分布式文件系统FastDFS如何做到高可用
FastDFS学习笔记
fastdfs作者及软件的下载方式:https://github.com/happyfish100
保持热爱奔赴山海
2019/09/18
9910
FastDFS学习笔记
解密FastDFS:揭秘小文件存储的秘密
(1)Facebook存储了600亿张以上的图片,推出了专门针对海量小图片定制优化的Haystack进行存储。
Lion 莱恩呀
2024/12/26
2900
解密FastDFS:揭秘小文件存储的秘密
Centos7下FastDFS从安装到入门
Github介绍: https://github.com/happyfish100/fastdfs
Devops海洋的渔夫
2019/08/20
2.2K0
Centos7下FastDFS从安装到入门
FastDFS概念、原理及CentOS7下安装实战
    FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。主要功能包括文件存储、文件同步、文件访问(上传、下载)、存取负载均衡、在线扩容、相同内容只存储一份等功能,适合有大容量存储需求的应用或系统。做分布式系统开发时,其中要解决的一个问题就是图片、音视频、文件共享的问题,分布式文件系统正好可以解决这个需求。同类的分布式文件系统有谷歌的GFS、HDFS(Hadoop)、TFS(淘宝)等。
阿豪聊干货
2018/08/09
4400
FastDFS概念、原理及CentOS7下安装实战
快速学习-什么是fastDFS
FastDFS是用c语言编写的一款开源的分布式文件系统,它是由淘宝资深架构师余庆编写并开源。FastDFS专为互联 网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很 容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
cwl_java
2020/01/14
8340
快速学习-什么是fastDFS
FastDFS 分布式文件系统入门
分布式:不同的业务模块部署在不同的服务器上或者同一个业务模块拆分为多个子业务,部署在不同的服务器上,解决高并发的问题。
RendaZhang
2020/10/26
1.4K0
文件管理系统FastDFS详解
很多以文件为载体的在线服务,如相册网站、视频网站等,都需要对文件进行管理,包括文件的存储、同步、访问(文件上传、文件下载)等,同时肯定会伴随着大容量存储和负载均衡的问题。
程序新视界
2020/07/24
9860
相关推荐
1.FastDFS分布式的文件存储系统入门介绍与实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验