17. FastDFS面试题汇总

Java全栈面试题汇总目录-CSDN博客

1. 什么是FastDFS?

FastDFS是用C语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

2. FastDFS有哪些架构?

FastDFS架构包括Tracker server,Storage server,Client。

Tracker Server

  • 主要协调调用工作,并对Storage Server起到负载均衡的作用
  • 负责管理所有的storage server和group,每个storage server启动之后会链接Tracker,告知自己所属group等信息,并保持周期性心跳
  • Tracker Server可以有多台,Tracker Server之间是相互平等,不存在单点故障,客户端请求tracker server采用轮询的方式,如果请求Tracker server无法提供服务,则换另外一台

Storage Server

  • 主要提供容量和备份服务
  • 以group为单位,每一个group里有多个storage server,数据互为备份,各个group互相独立
  • 采用分组存储方式的好处是灵活和可控性强,比如上传文件,可以有客户端指定,也可以有tracker进行调度选择
  • 一个组的存储压力过大,可以在改组增加存储服务器扩充服务能力,当容量不足时,可以增加组扩充容量

Client

  • 上传下载的数据服务器,也就是我们部署的服务器

3. FastDFS服务端有哪些角色?

Tracker:管理集群,tracker也可以实现集群。每个tracker节点地位平等,收集Storage集群的状态。

Storage:实际保存文件Storage分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有主从的概念。

4. FastDFS的存储策略?

为了支持大容量,存储节点采用分组的组织方式,存储系统由一个或多个组组成,组与组之间文件相互独立,所有组加起来就是存储系统的容量,一个组可以有一个或多个存储服务器组成,一个组下的存储服务器的文件都是相同的,组中的多台服务器起到了冗余备份和负载均衡的作用。

在组中新增加服务器时,同步已有的文件由系统自动完成,同步完成,系统将自动将新增服务器切换到线上提供服务,当存储空间不足或消耗完时,可以动态加组,只需要增加一台或者多台服务,并将它们配置成一个新组,这样就扩大了存储系统的容量。

5. Storage状态收集?

Storage server会通过配置链接集群中所有的tracker server,定时向它们报告状态,包括磁盘空间,文件同步状态,文件上传下载次数等统计信息

storage server的7个状态

  • FDFS_STORAGE_STATUS_INIT:初始化,尚未得到同步已有数据的源服务器
  • FDFS_STORAGE_STATUS_WAIT_SYNC:等待同步,已得到同步已有数据的源服务器
  • FDFS_STORAGE_STATUS_SYNCING:同步中
  • FDFS_STORAGE_STATUS_DELETED:已删除,该服务器从本组中摘除(注:本状态的功能尚未实现)
  • FDFS_STORAGE_STATUS_OFFLINE:离线
  • FDFS_STORAGE_STATUS_ONLINE:在线,尚不能提供服务
  • FDFS_STORAGE_STATUS_ACTIVE:在线,可以提供服务

当storage的状态是在线的时候,会向tracker发送心跳,tracker server会将其的状态改成,在线可以提供服务

6. FastDFS的交互过程是怎样的?

  1. client询问tracker上传到的storage,不需要附加参数
  2. tracker返回一台可用的storage
  3. client直接和storage通讯完成文件上传

7. 文件上传流程?

1. tracker server收集storage server的状态信息

storage server定时向tracker server(可以多个)发送磁盘剩余空间,文件同步状况,文件上传下载次数等信息storage server会链接整个集群中所有的tracker server,向他们发送自己的状态。

2. 选择tracker server

当集群中不止一个tracker server时,由于tracker server是对等的,客户端在upload文件可以任意选择一个tracker

3. 选择存储group

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

  • 所有group轮询
  • 指定某一个确定的group
  • 选择空间多的group

4. 选择storage server

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

  • 在group中storage轮询
  • 按IP排序选择
  • 按优先级选择,可配置

5. 选择storage path

当分配好storage server后,客户端将向storage发送写文件请求,storage将会分配一个存储目录,支持如下规则(在storage配置文件可以通过storage-path*,可以设置多个)

  • 多个存储目录轮询
  • 剩余空间最多优先

6. 生成文件名

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

7. 选择两级目录

当选定存储目录之后,storage会为文件分配一个file id,每个存储目录下有两级256*256的子目录,storage会按文件名称进行两次hash,路由到其中一个目录,然后将文件filed id为文件名存储在改子目录下

8. 生成file id

当文件存储到某个目录后,即认为文件存储成功,接下来就会为该文件生成一个文件id,有group,存储目录,两级目录,文件名,文件后缀名拼接而成。

8. 文件同步?

写文件时,客户端将文件写到group的一个storage server即认为文件写入成功,storage server写完文件后,会由后台线程将文件同步到同groupstorage server。

每个storage写文件后,同时会写一份binlog, binlog里不包含文件数据,只包含文件名信息,这份binlog用于同步,storage会记录group内其他storage同步的进度,以便重启之后接上次的进度继续同步,进度以时间戳的方式记录,所以最好把集群内所有server的时钟保持同步。

storage的同步进度会作为元数据的一部分汇报到tracker上,tacker在选择读storage的时候会已同步进度作为参考。

比如一个group内有ABC三个storage serverAC同步到进度为T1(T1以前写的文件都已经同步到B上了)BC同步到时间戳为T2(T2>T1)tracker接收到这些同步进度信息时,就会进行整理,将最小的那个做为C的同步时间戳,本例中T1即为C的同步时间戳为T1(即所有T1以前写的数据都已经同步到C上了);同理,根据上述规则,tracker会为AB生成一个同步时间戳。

9. 文件下载流程?

1. tracker server收集storage server的状态信息

  • storage server定时向tracker server发送磁盘空间,文件同步状况,文件上传下载次数信息等
  • storage server会连接整个集群tracker server,向它们报告状态

2. 选择tacker server

  • 和上传文件一样,任意选择

3. 选择可用的storage server

客户端下载download请求给某个tracker,必须带上传文件名信息,tracker会从文件名中解析group,路径信息,文件大小,创建时间,源storage server IP等信息,然后请求选择一个storage用来服务器读请求。

由于group同步是后台的一个异步线程进行,所以有可能出现在读的时候,文件还没有同步,为了避免这种情况,tacker会安装如下规则选择group可读的storage server。

  • 该文件上传到的源storage,只要源storage只要存活,肯定包含这个文件,源头的地址被编码在文件名中
  • 文件创建的时间即storage被同步到的时间戳,且当前时间-文件创建时间>文件同步最大时间,即文件同步后,认为经过最大同步时间后,文件肯定存在
  • 文件创建时间<文件同步时间戳,即文件同步时间戳之前的文件确定已经同步
  • 当前时间-文件创建时间戳>同步延迟阀值,即经过同步延迟阀值,认为文件肯定同步了

10. 新增storage server?

组内新增一台storage server A时,由系统自动完成已有数据同步,处理逻辑如下

  1. storage server A连接tracker server,tracker server将storage server A的状态设置为FDFS_STORAGE_STATUS_INIT。storage server A询问追加同步的源服务器和追加同步截至时间点,如果该组内只有storage server A或该组内已成功上传的文件数为0,则没有数据需要同步,storage server A就可以提供在线服务,此时tracker将其状态设置为FDFS_STORAGE_STATUS_ONLINE,否则tracker server将其状态设置为FDFS_STORAGE_STATUS_WAIT_SYNC,进入第二步的处理
  2. 假设tracker server分配storage server A同步已有数据源storage server为B,同组storage server和tracker server通讯得知新增storage server A,将启动同步线程,并向tracker server询问storage server A追加同步的源服务器和时间戳,storage server B将把时间戳之前的数据同步给storage server A,而其余的storage server从截止时间点之后进行正常同步,只把源头数据同步给storage server A,到了截止时间点之后,storage server B对storage server A的同步由追加同步改成正常同步,只同步源头数据
  3. storage server B向storage server A同步完所有数据,暂没有数据同步时,storage server B请求tracker server将storage server状态设置为FDFS_STORAGE_STATUS_ONLINE
  4. 当storage server A向tracker server发起心跳,tracker server将其改成FDFS_STORAGE_STATUS_ACTIE

11. FastDFS有哪些优点?

  1. 主备Tracker服务,增强系统的可用性
  2. 系统不需要支持POSIX,这样的话就降低了系统的复杂度,使得处理的速度会更高
  3. 支持主从文件,支持自定义扩展名
  4. 支持在线扩容机制,增强了系统的可扩展性
  5. 实现了软RAID,增强了系统的并发处理能力和数据容错恢复能力

12. FastDFS有哪些缺点?

  1. 通过API下载,存在单点的性能瓶颈
  2. 不支持断点续传,对大文件将是噩梦
  3. 同步机制不支持文件正确性校验,降低了系统的可用性
  4. 不支持POSIX通用接口访问,通用性比较的低
  5. 对跨公网的文件同步,存在着比较大的延迟,需要应用做相应的容错策略

13. FastDFS特性有哪些?

Tracker服务器是整个系统的核心枢纽,其完成了访问调度(负载均衡),监控管理Storage服务器,由此可见Tracker的作用至关重要,也就增加了系统的单点故障,为此FastDFS支持多个备用的Tracker,虽然实际测试发现备用Tracker运行不是非常完美,但还是能保证系统可用。

在文件同步上,只有同组的Storage才做同步,由文件所在的源Storage服务器push至其它Storage服务器,目前同步是采用Binlog方式实现,由于目前底层对同步后的文件不做正确性校验,因此这种同步方式仅适用单个集群点的局部内部网络,如果在公网上使用,肯定会出现损坏文件的情况,需要自行添加文件校验机制。

支持主从文件,非常适合存在关联关系的图片,在存储方式上,FastDFS在主从文件ID上做取巧,完成了关联关系的存储。

14. FastDFS适用的场景以及不适用的场景?

FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片、视频、文档等文件。对于互联网应用,和其他分布式文件系统相比,优势非常明显。FastDFS没有对文件做分块存储,因此不太适合分布式计算场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/13993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是线程安全?如何保证线程安全?

目录 一、引入线程安全 &#x1f447; 二、 线程安全&#x1f447; 1、线程安全概念 &#x1f50d; 2、线程不安全的原因 &#x1f50d; 抢占式执行&#xff08;罪魁祸首&#xff0c;万恶之源&#xff09;导致了线程之间的调度是“随机的” 多个线程修改同一个变量 修改…

ESP8266实现获取天气情况

利用太极创客提供的ESP8266 心知天气库获取天气情况并显示 心知天气库地址&#xff1a; ESP8266-心知天气: 本库主要功能为使用ESP8266物联网开发板通过心知天气 API 获取天气等信息。 clone到本地: git clone https://gitee.com/taijichuangke/ESP8266-Seniverse.git 安装该…

跟着Kimi学习结构化提示词:19套内置提示词都在这里了!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

C++ Primer Plus第十六章复习题

1、考虑下面的 类声明 class RQ1 { private:char * st; public:RQ1(){st new char [1]; strcpy(st,"");}RQ1(const RQ1 & rq){st new char [strlen(rq.st)1]; strcpy(st,rq.st);}~RQ1(){delete [] st};RQ & OPERATOR (cosnt RQ &rq); }; 将它转换为使…

Java技术深度解析:高级面试问题与精粹答案(一)

Java 面试问题及答案 问题1&#xff1a;请解释什么是Java虚拟机&#xff08;JVM&#xff09;以及它的作用是什么&#xff1f; 答案1&#xff1a; Java虚拟机&#xff08;JVM&#xff09;是一个可以执行Java字节码的虚拟计算机。它是一个抽象的计算机&#xff0c;能够通过软件…

【笔记】树(Tree)

一、树的基本概念 1、树的简介 之前我们都是在谈论一对一的线性数据结构&#xff0c;可现实中也有很多一对多的情况需要处理&#xff0c;所以我们就需要一种能实现一对多的数据结构--“树”。 2、树的定义 树&#xff08;Tree&#xff09;是一种非线性的数据结构&#xff0…

作物水文模型AquaCrop---用于评估作物对水的需求、灌溉计划和管理策略

AquaCrop是由世界粮食及农业组织&#xff08;FAO&#xff09;开发的一个先进模型&#xff0c;旨在研究和优化农作物的水分生产效率。这个模型在全球范围内被广泛应用于农业水管理&#xff0c;特别是在制定农作物灌溉计划和应对水资源限制方面显示出其强大的实用性。AquaCrop 不…

如何在海豚调度器自动监测报表是否跑出数据

在数据仓库报表开发时,有的报表依赖的表多,虽然在海豚调度任务上是跑成功,但实际上没有跑出数据来。开发人员负责的任务和表越来越多,每天去手动检查费时费力,不去理睬默认是成功的,等到业务或产品发现问题时,又给人一种不专业不负责的感觉。 比较好的方式是用代码进行自…

Python知识点复习

文章目录 Input & OutputVariables & Data typesPython字符串重复&#xff08;字符串乘法&#xff09;字符串和数字连接在一起print时&#xff0c;要强制类型转换int为str用input()得到的用户输入&#xff0c;是str类型&#xff0c;如果要以int形式计算的话&#xff0c…

SkyWalking 介绍及部署

1、SkyWalking简介2、SkyWalking的搭建 2.1 部署Elasticsearch2.2 部署SkyWalking-Server2.3 部署SkyWalking-UI3、应用接入 3.1 jar包部署方式3.2 dockerfile方式3.3 DockerFile示例4、SkyWalking UI 界面说明 4.1 仪表盘 4.1.1 APM &#xff08;1&#xff09;全局维度&#x…

UBUNTU22.04无法安装nvidia-driver-550 依赖于 nvidia-dkms-550 (<= 550.54.15-1)

类似的报错信息&#xff0c;就是卡在了nvidia-dkms-550无法安装 Loading new nvidia-550.40.07 DKMS files… Building for 6.5.0-15-generic Building for architecture x86_64 Building initial module for 6.5.0-15-generic ERROR: Cannot create report: [Errno 17] File e…

前端canvas项目实战——在线图文编辑器(十):小地图MiniMap(上)

目录 前言一、 效果展示二、 实现步骤0. 行动前的思考1. 为小地图更新「背景图」2. 为小地图更新「滑动窗口」2.1 获取新的滑动窗口「宽高」2.2 获取新的滑动窗口「位置」3. 为小地图更新「遮罩」后记前言 上一篇博文中,我们引入了「逻辑画布」的概念,让整个工具的页面看起来…

JPA 3万字面试宝典

目录 什么是JPA? JPA和Hibernate有什么区别? 什么是ORM(对象关系映射)? 什么是Entity?

【机器学习】在电子商务(淘*拼*京*—>抖)的应用分析

机器学习与大模型&#xff1a;电子商务的新引擎 一、电子商务的变革与挑战二、机器学习与大模型的崛起三、机器学习与大模型在电子商务中的应用实践个性化推荐精准营销智能客服库存管理与商品定价 四、总结与展望 随着互联网的飞速发展&#xff0c;电子商务已经成为我们生活中不…

NDIS小端口驱动(四)

NDIS中断相关 1. 注册和取消注册中断&#xff1a; 微型端口驱动程序调用 NdisMRegisterInterruptEx 来注册中断。 驱动程序分配并初始化 NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS 结构&#xff0c;以指定中断特征和函数入口点&#xff0c;驱动程序将结构传递给 NdisMRegister…

【三剑客和正则表达式】

文章目录 学习目标一、什么是三剑客1.三剑客grep2.三剑客sed3.三剑客awk4.正则过滤例子15.正则过滤例子2 总结 学习目标 1.学会使用 grep 2.学会使用 sed 3.学会使用 awk 4.学会使用正则表达式一、什么是三剑客 正则三剑客&#xff1a;grep sed awk 1.三剑客grep # 擅长过滤…

【MySQL精通之路】查询优化器的使用(8)

MySQL通过影响查询计划评估方式的系统变量、可切换优化、优化器和索引提示以及优化器成本模型提供优化器控制。 服务器在column_statistics数据字典表中维护有关列值的直方图统计信息&#xff08;请参阅第10.9.6节“Optimizer统计信息”&#xff09;。与其他数据字典表一样&am…

#Ethereum 现货ETF 问题汇总 转

专题&#xff1a; #Ethereum 现货ETF 问题汇总&#xff0c;包括了多数小伙伴们的疑问&#xff0c;有任何忽略请留言给我&#xff0c;我会补充。 1. #ETH 现货ETF何时公布&#xff1f; 一般来说会在北京时间的5月24日凌晨2点至4点之间&#xff0c;不排除稍微延后到凌晨6点的可能…

基于大语言模型的应用

在AI领域&#xff0c;大语言模型已成为备受瞩目的焦点&#xff0c;尤其在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;其应用愈发广泛。BLM作为一种多任务语言建模方法&#xff0c;旨在构建一个具备多功能的强大模型。在给定文本和查询条件下&#xff0c;该模型能…

【深度学习】YOLOv8训练,交通灯目标检测

文章目录 一、数据处理二、环境三、训练 一、数据处理 import traceback import xml.etree.ElementTree as ET import os import shutil import random import cv2 import numpy as np from tqdm import tqdmdef convert_annotation_to_list(xml_filepath, size_width, size_he…