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

总结FastDFS的面试题

目录

一:FastDFS的基础知识

1:定义

2:FastDFS的优点

3:tracker server

4:storage server

二:FastDFS的存储原理

1:小文件存储的问题

2:小文件合并存储

3:文件上传原理

三:FastDFS存储的同步方式

2:binlog

3:同步规则

4:一个图展示上传和同步的过程

 5:下载过程直接使用之前的一张图即可


FastDFS的简单使用_fastdfs文件添加时间-CSDN博客

 C/C++精品项目之图床共享云存储(5):FastDFS存储原理,文件的秒传-CSDN博客

 分布式FastDFS存储的同步方式_fastfds 两个storage 数据同步 配置-CSDN博客

一:FastDFS的基础知识

1:定义

FastDFS是一个开源的轻量级的分布式文件管理系统,简单来说就是存放文件的。因为是分布式,所以我们可以把文件放到多个系统中去,并且我们只需要一个系统即可控制多个系统的操作。并且还提供了高可用和负载均衡。

2:FastDFS的优点

fastdfs是一个分布式文件管理系统,其中包括文件存储,文件同步,文件上传和下载。解决了大容量存储和负载均衡,很适合相册网站,并且充分考虑到了冗余备份,负载均衡,先行扩容等机制。注重高可用高性能。

3:tracker server

他是一个协调者,她负责管理storage server 和 group ,每当storage连接上来,他会告知tracker它的所有信息包括所属的group,然后保持心跳连接。在tracker中是不存储任何数据的,因此扩展十分容易,直接添加即可。

4:storage server

存放数据的主要地方。其中一个group中含有多个storage ,在一个group中的所有的storage都是互为备份,也就是说group中storage中的数量是副本数量。并且含有多个group,因此可以做负载均衡操作。缺点是group的容量受单机存储容量的限制,一个group中的存储大小以最小的storage为准。

我们看这个图,我们先根据所在的group进行区别,M00是group中一个storage多个磁盘中的一个,然后为了单个目录下的文件数量过多,因此会在这里创建二级目录,每级256个。然后文件会被hash到其中的目录中去。

二级目录的好处就是我们查找文件速度会快。

二:FastDFS的存储原理

1:小文件存储的问题

我们在linux中存储文件分为数据部分和inode节点部分。我们每存储一个文件就会存储一个inode节点部分。一个节点大小为128或256,并且我们会磁盘中每隔1k或2k就设置一个节点。当我们一个文件不满1k或2k,那也算1k或2k。导致磁盘的利用率很低。

2:小文件合并存储

我们fastdfs有一个配置文件,可以配置小文件的和并存储。我们先开辟一个大内存,这一个大内存有一个节点,当我们要存储的文件大小小于16MB的时候,我们就将这个文件存放到这个大文件中然后再给他分配一个节点。这样就可以提高磁盘利用率了。当我们存储一个正常大小的文件,会返回这个文件对应的fileid,但是存储小文件的时候,我们返回的是这个truck文件的fileid,而不是这个文件的具体id。

3:文件上传原理

我们客户端要上传一个文件,会给tracker发送信息,表示要上传,因为tracker是完全对等的,因此会随机选择一个(冗余的方式,保证高可用)。选择好之后。tracker会选择一个可以存放文件的group(轮询,指定,选择最大存储空间),然后再选择一个storage(轮询,ip,优先级),然后再选择这个storage中的磁盘(轮询,最大存储),然后为这个文件生成一个fileid(包括时间,大小,ip等),再通过这个fileid进行两次hash,存放到这个两级目录中去。当存放到具体目录中去之后,会为这个文件生成一个文件名:group/M00/00/00+文件名(时间,大小,ip等)。然后进行返回。

 如果一个磁盘中含有100万个文件,那么这个二级目录中,一个目录含有15.7个文件,容易查找。

三:FastDFS存储的同步方式

1:我们有连接到tracker server 的线程,是为了获取同一个group组中的其他storage的所有信息。并且一个storage含有指向其他storage的线程。这个线程是用来主动推送我们传入的文件的。

2:binlog

我们上传文件只能上传到一个storage中去,当我们上传成功后,我们会将具体的操作写入binlog,其中包括时间,操作类型,文件fileid。然后其他线程会监听binlog,然后主动推送给其他storage。

3:同步规则

我们只在同一个group中进行同步,同步的时候,我们只推送源文件操作,避免循环推送。当有新的storage添加,由一个机器,将全部数据都推送给它。

4:一个图展示上传和同步的过程

 5:下载过程直接使用之前的一张图即可

0voice · GitHub 

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

相关文章:

  • Fiddler 5.21.0 使用指南:过滤浏览器HTTP(S)流量下(四)
  • 【踩坑】pip安装依赖卡在Installing build dependencies ...
  • 【WRF-Urban】SLUCM新增空间分布城市冠层参数及人为热排放AHF代码详解(下)
  • 云桌面:云计算桌面
  • WPF+LibVLC开发播放器-音量控制和倍速控制
  • 数智运营一体化平台项目经营分享
  • 记录blender学习过程中遇到的问题
  • (八)腾讯cloudstudio+Stable-Diffusion-webui AI绘画教程-安装插件
  • 记一次跑前端老项目的问题
  • 深度学习:MindSpore自动并行
  • python拆分Excel文件
  • Python实现Excel中数据条显示
  • c#如何开发后端
  • 6.Vue------async/await详细的讲解---知识积累
  • Redis面试专题-持久化
  • 如何将快捷指令添加到启动台
  • ansible自动化运维(二)ad-hoc模式
  • 技术栈6:Docker入门 Linux入门指令
  • OPStack Optimism Layer2
  • Leetcode—1498. 满足条件的子序列数目【中等】
  • 生活大爆炸版石头剪刀布(洛谷P1328)
  • OmniParser一种用于增强视觉语言模型与用户界面交互效果的技术
  • Unity引擎UI滚动列表——滚动复用基础介绍
  • 在 Windows 11 WSL (Ubuntu 24.04.1 LTS) | Python 3.12.x 下部署密码学库 charm
  • 【六足机器人】01功能开发
  • notepad++安装教程(超详细)
  • 创建简单的 PL/pgSQL 存储过程
  • Java项目实战II基于微信小程序的无中介租房系统(开发文档+数据库+源码)
  • Node.js实现WebSocket教程
  • Docker Compose实战一( 轻松部署 Nginx)