fastdfs简单介绍

简介: fastdfs简单介绍

fastdfs

功能

FastDFS主要的功能包括:

  • 文件存储,
  • 同步和访问,
  • 设计基于高可用和负载均衡。
  • FastDFS非常适用于基于文件服务的站点

组成

FastDFS由跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)三个部分组成,主要解决海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size < 500MB) 为载体的在线服务,例如图片分享和视频分享网站

  • 跟踪服务器
  • tracker提供负载均衡,集群中的每一个tracker都要保存storage集群的所有信息,供client访问并上传文件
  • 负载均衡:
  • 可以看见不同的group中的对应空间有多少,根据空间大小来选择在哪个group中上传,选择到指定group后就会确定一个storage server给客户端涉及到两个部分的选择group的选择
  • round robin,所有的group间轮询
  • specified group,指定某一个确定的group
  • load balance,选择剩余空间最大的
  • storage server的选择
  • round robin,在指定group内的所有storage间轮询
  • First server ordered by ip,按ip排序
  • First server ordered by priority,按优先级排序
  • 存储服务器
  • storage可以是集群,所有的group都要上报到tracker集群的每一个tracker
  • storage集群
  • 同一个group内的storage存储的数据是一样的
  • 客户端
  • 用于上传文件与下载文件,fdfs提供了对应源码实现
  • client访问tracker目的是为了获取哪一个storage可以上传文件

上传文件流程:

  • client访问trackertracker通过负载均衡指定一个group,然后再在这个group中指定一个storage server返回给clientclient向这个storage server发送写文件请求,storage server会为文件分配一个数据存储目录
  • storage server收到client发送的写请求后进行的处理
  • 生成fileid:由ip,创建时间,文件大小,文件crc32和一个随机数拼接而成,然后进行base64编码,转化为了可打印的字符串
  • 选择两级目录
  • 生成文件名:格式组名/磁盘/目录/fileid.txt
  • fastdfs上传一个文件指令
> ls
hello.txt
> fdfs_upload_file /etc/fdfs/client.conf hello.txt
/group1/M00/00/00/wKg4aWRT1ZeAM66YAAAAKYfybsk605.txt
  • 解析返回的文件名
  • 存储在哪个gourpgroup1
  • 在哪个磁盘:M00
  • 在哪个目录:00/00

ClientTrackerServerStorage定时向tracker上传状态信息上传连接请求获取可用storage节点返回可用storage节点返回可用存储节点(storage的ip和端口)上传文件到可用存储节点(file content和metadata)生成file_id将上传内容写入磁盘返回file_if(路径信息和文件名)存储文件信息ClientTrackerServerStorage

下载文件流程:

  • client访问trackertracker会告诉clientgroup中的哪一个storage中下载文件
  • fastdfs下载一个文件指令
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKg4aWRTdjKAKYp2AAAHeD18SIc60.conf

ClientTrackerServerStorage定时向tracker上传状态信息下载连接请求获取可用storage节点(检验同步状态)返回可用storage节点返回节点(storage的ip和端口)信息根据组名/目录/文件名查找文件查找文件返回file_contentClientTrackerServerStorage

如何支持高可用

高可用指系统能够在预期的时间内一直处于可用状态

  • tracker是集群
  • 同一组的storage的内容是相同的(一个group建议3storage
  • 强一致性,若一致性
  • 如果是强一致性,同一组中上传完毕后需要等待其他storage同步完毕
  • 数据更安全可靠,等待时间长
  • 如果是弱一致性,当前的storage存储完毕就返回
  • 数据不太可靠,等待时间短
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
存储 自然语言处理 算法
高维向量压缩方法IVFPQ :通过创建索引加速矢量搜索
向量相似性搜索是从特定嵌入空间中的给定向量列表中找到相似的向量。它能有效地从大型数据集中检索相关信息,在各个领域和应用中发挥着至关重要的作用。
883 0
|
前端开发 API UED
React 按需加载 Lazy Loading
随着 Web 应用复杂度增加,页面加载速度成为影响用户体验的关键因素。React 提供了按需加载(Lazy Loading)功能,通过 `React.lazy` 和 `Suspense` 实现动态加载组件,减少初始加载时间,提升性能。本文从基础概念入手,探讨常见问题、易错点及解决方案,并通过代码示例详细说明。
605 0
|
SQL 算法 Java
Mybatis-plus超详细讲解(2022)
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
4308 1
|
机器学习/深度学习 存储
线性化注意力综述:突破Softmax二次复杂度瓶颈的高效计算方案
大型语言模型虽在各领域表现出色,但其核心的softmax注意力机制存在显著的计算资源消耗问题。本文探讨通过线性时间复杂度的替代方案突破这一瓶颈,介绍线性注意力机制、门控线性注意力及状态空间模型(SSM)等创新方法,旨在优化计算效率与内存容量之间的权衡,提升模型性能。
577 9
线性化注意力综述:突破Softmax二次复杂度瓶颈的高效计算方案
|
12月前
|
人工智能 开发者
零门槛,即刻拥有DeepSeek-R1满血版
阿里云百炼DeepSeek解决方案提供高效、低成本的AI模型调用服务。用户无需购买昂贵显卡,按需付费,新用户享100万次免费试用。10分钟快速开通,支持自动扩容,高峰期不卡顿。DeepSeek模型擅长中文处理,多才多艺,生成速度快。避免官方服务拥堵,提供VIP通道和托管服务,降低自建成本,适合各类企业和开发者使用。
388 0
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
572 4
|
存储 NoSQL MongoDB
MongoDB 8.0现已全面可用
如何从MongoDB旧版本升级至8.0,可登录参考升级指南:https://www.mongodb.com/zh-cn/docs/manual/tutorial/upgrade-revision/
|
Java Spring 容器
什么情况下会导致@Async异步方法会失效?
什么情况下会导致@Async异步方法会失效?
311 1
|
监控 数据安全/隐私保护 Python
ERP系统中的业务流程优化与重构解析
【7月更文挑战第25天】 ERP系统中的业务流程优化与重构解析
1510 0
|
数据可视化 Python
Seaborn中的时间序列图:展示数据随时间的变化趋势
【4月更文挑战第17天】使用Seaborn创建时间序列图可展现数据随时间变化的趋势。首先,确保数据集包含日期时间格式的时间戳字段。借助Pandas处理数据,然后使用Seaborn的`lineplot`创建基本图表。通过`line_kws`自定义线条样式,添加标题和轴标签以增强可视化。结合Pandas的`rolling`计算滚动平均值,`resample`进行数据重采样,或使用Statsmodels进行时间序列分析和预测,从而提升图表功能和分析深度。有效定制图表有助于更好地理解和传达数据趋势。