FastDFS分布式文件系统

一、概述

FastDFS是一款由国人余庆开发的轻量级开源分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,主要解决大容量文件存储和高并发访问问题,通过纯C语言实现并支持多种UNIX系统。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。它采用专有API进行文件存取,不支持POSIX接口和挂载使用,属于应用级分布式文件存储服务。

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

什么是分布式文件系统

文件系统

文件系统是操作系统用于明确存储设备(如硬盘、闪存或CD/DVD)或分区上的文件的方法和数据结构。它负责为用户和操作系统提供文件和目录的层次结构视图,并管理数据的存储、检索和更新。常见的文件系统类型包括FAT(FAT12、FAT16、FAT32)、exFAT、NTFS(Windows系统常用)、HFS+(Mac OS X系统常用)、ext系列(Linux系统常用,如ext2、ext3、ext4)、XFS、Btrfs、ZFS等。每种文件系统都有其特定的设计目标和优势,适用于不同的应用场景。

 

分布式文件系统

分布式文件系统(Distributed File System,DFS)是指文件系统管理的物理存储资源不直接连接在本地节点上,而是通过计算机网络与节点(可理解为计算机或服务器)相连,或者是将多个不同的逻辑磁盘分区或卷标组合在一起,形成一个完整、有层次的文件系统。一些常见的分布式文件系统包括Google的GFS、Hadoop的HDFS、FastDFS等。这些系统通常用于处理大规模的数据存储和访问需求,如云计算、大数据分析、图像和视频存储等领域。

主流的分布式文件系统

NFS:

NFS(Network File System,网络文件系统)是一种分布式文件系统协议,它允许计算机客户端将远程NFS服务器上的共享目录挂载(mount)到自己的文件系统中,从而在本地对远程共享目录中的文件和目录进行访问,就像访问本地文件系统中的文件和目录一样。通常应用在数据中心、云计算、高性能计算等领域。

gooleFs:

GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,可以提供容错功能。它可以给大量的用户提供总体性能较高的服务。

(1)GFS采用主从结构,一个GFS集群由一个master和大量的chunkserver组成。

(2)master存储了数据文件的元数据,一个文件被分成了若干块存储在多个chunkserver中。

(3)用户从master中获取数据元信息,从chunkserver存储数据。 

HDFS:

HDFS(Hadoop Distributed FileSystem,Hadoop分布式文件系统)是Hadoop项目中的一个核心组件,用于存储和管理Hadoop集群中的大量数据。HDFS是一个高度容错性的系统,设计用于部署在低廉的硬件上,并且能够提供高吞吐量来访问应用程序的数据。HDFS适用于存储和分析大规模数据集,如日志文件、图像、视频等。

 

二、fastDFS

fastDSF架构

FastDFS架构包括 Tracker server和Storageserver。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。

Tracker:

Tracker Server作为中心结点,管理拓扑集群结构,作用是负载均衡和调度。Tracker server在内存中记录分组和Storage server的状态等信息,但不记录文件索引信息。客户端和Storage server访问Tracker server时,Tracker server扫描内存中的分组和Storage server信息,然后给出应答。

FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server 不存在单点故障。客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。

Storage:

Storage Server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的 文件系统而是使用操作系统的文件系统来管理文件。可以将storage称为存储服务器。

Storage集群通过实施分组存储架构,极大地提升了系统的灵活性和可控性。该集群由若干个独立的组构成,其总存储容量即为集群内所有组存储容量之和。每个组内部包含一台或多台存储服务器,这些服务器之间保持平等关系,并通过相互连接实现文件同步,以确保组内各服务器上存储的文件完全一致。值得注意的是,一个组的存储容量受限于其内部存储服务器中容量最小的那一台,因此建议组内各服务器的软硬件配置保持一致性。

分组存储策略的优势在于其高度的灵活性和可扩展性。在文件上传过程中,客户端可以直接指定目标组,或者由集群的调度器(tracker)进行智能选择。当某个组的存储服务器面临较大的访问压力时,可以通过向该组添加更多的存储服务器来实现服务能力的纵向扩展。而面对系统整体存储容量不足的情况,则可以通过增加新的组来横向扩展存储容量,从而满足不断增长的存储需求。这种设计策略为Storage集群提供了强大的扩展性和灵活性,使其能够适应各种复杂的存储场景。

Storage状态收集:

Storage server会与集群内的所有Tracker servers建立连接,并定期向它们报告其当前状态,这些状态信息详尽地涵盖了磁盘剩余空间、文件同步的最新状况以及文件上传和下载次数的统计数据等。

文件上传流程

文件上传:

  • 客户端会先向Tracker server询问存储地址。
  • Tracker server查询到存储地址后返回给客户端。
  • 客户端拿着地址直接和对应的Storage server通讯,将文件上传至该Storage server。

文件下载流程

文件下载:

  • 客户端会向Tracker server询问地址,并带上要查询的文件名和组名。
  • Tracker server查询后会将地址返回给客户端。
  • 客户端拿着地址和指定Storage server通讯并下载文件。 

 

fastDFS优缺点

优点:
1.高性能:

  • 文件不分块存储,文件和系统中的文件一一对应,减少了分块合并的开销。
  • 网络通信采用libevent(V2.0版本),支持高并发访问,整体性能更好。

2.高可用性:

  • 支持在线扩容,动态添加卷,方便进行存储容量的扩展。
  • 支持文件冗余备份和负载均衡,提高了系统的容错能力和稳定性。

3.灵活性:

  • 采用分组存储方式,提供了灵活的扩展策略,可以根据需要进行纵向或横向扩容。
  • 客户端可以直接指定上传到的组,也可以由tracker进行调度选择,提供了灵活的存储管理方式。

4.文件管理:

  • 对文件内容做hash处理,避免了重复文件的存储,节约了磁盘空间。
  • 存储服务器上可以保存文件属性(meta-data),方便进行文件管理和查询。

5.下载支持:

  • 下载文件支持HTTP协议,可基于内置Web Server或外部Web Server,提供了灵活的访问方式。

缺点:

1.管理复杂性:

  • 分布式存储管理相对复杂,需要进行服务器集群的搭建和管理,对于非专业人员来说可能较为困难。

2.依赖库需求:

  • 在Java项目中使用FastDFS需要引入相应的客户端SDK,增加了项目的依赖复杂性。

3.上传速度限制:

  • 由于采用了分块传输和多副本备份策略,文件上传速度可能受到一定程度的限制,特别是当文件较大时。

4.安全性:

  • 直接按文件存储,可直接查看文件内容,缺乏文件安全性。

5.数据同步问题:

  • 数据同步无校验,存在静默IO问题,可能降低系统可用性。

6.备份策略限制:

  • 备份数根据存储分卷(分组)决定,缺乏文件备份数设置的灵活性。 

fastDFS与HDFS对比:

  •  设计:fastDFS是专为中小文件在线服务设计的高性能、高扩展性分布式文件系统,而HDFS则是Hadoop生态中针对大规模数据集提供高吞吐量访问的分布式文件系统。
  • 架构:fastDFS通过Tracker和Storage服务器实现文件的分布式存储和管理,而HDFS则采用主从结构,通过NameNode和DataNode来管理大规模数据集。
  • 扩展性:fastDFS通过增加新的逻辑存储组来实现存储容量的线性扩容。而HDFS通过添加更多的数据节点来扩展存储容量和吞吐量。

三、总结

fastDFS作为一款分布式文件系统,在提供高性能、高可用性和灵活性的同时,也存在一些管理和安全性方面的问题,在中小文件中有着良好的表现,但是在大数据存储上相对其他分布式文件存储系统没有表现的那么优异,具体问题要具体分析,大数据存储建议考虑HDFS.

(以上部分资料来自黑马程序员,侵删。)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

佛教祭拜小程序-寺庙小程序-纪念馆小程序

大家好,我是程序员小孟。 现在有很多的产品或者工具都开始信息话了,寺庙或者佛教也需要小程序吗? 当然了! 前面我们还开发了很多寺庙相关的小程序,都有相关的介绍: 1,优质的寺庙小程序-H5寺庙网页 今天…

文献解读-肿瘤测序-第五期|《局部晚期或转移性儿童及青少年分化型甲状腺癌的基因特征与临床特征及131I疗效的关系》

关键词:应用遗传流行病学;群体测序;肿瘤测序; 文献简介 标题(英文):The relationship between genetic characteristics and clinical characteristics and the efficacy of 131I therapy in c…

Ktor库的高级用法:代理服务器与JSON处理

在现代网络编程中,Ktor是一个高性能且易于使用的框架,它提供了对异步编程、WebSockets、HTTP客户端和服务器等特性的原生支持。Ktor是使用Kotlin语言编写的,充分利用了Kotlin的协程特性来简化异步编程。本文将深入探讨Ktor库的高级用法&#…

Doris Connector 结合 Flink CDC 实现 MySQL 分库分表

1. 概述 在实际业务系统中为了解决单表数据量大带来的各种问题,我们通常采用分库分表的方式对库表进行拆分,以达到提高系统的吞吐量。 但是这样给后面数据分析带来了麻烦,这个时候我们通常试将业务数据库的分库分表同步到数据仓库时&#x…

如何让委外加工管理更轻松?

中小制造企业,受制于场地、资金、环保、质量、交期等等因素影响,在生产制造过程中,多数会将一些生产工序或者在制品外发给其他制造工厂进行委外加工生产。随着各地监管部门对环境、能耗管控力度的加大,这种情况在机加工行业尤为突…

【笔记】基于差分法的白噪声道路模型

理论如下: 式(13-7)中等式左边的路面位移随时间的导数可用差分法近似,即 整理可得 代码如下: C级路面 clc clear close all%% 参数定义 dt=0.01;%仿真间隔时间 t_end=10;%仿真总时长 t=0:dt:t_end; n00=0.011;%下截止频率 u=60;%车速,km/h u=u/3.6;%车速转化为m/s f0=2* …

SmartEDA:革新电子教学,引领未来工程师的启航之旅

在数字化浪潮席卷而来的今天,电子教学已成为教育领域的一股强劲风潮。SmartEDA,作为一款前沿的电子教学辅助工具,正以其独特的魅力,助力学校电子教学的蓬勃发展,打造未来工程师的摇篮。 SmartEDA凭借其智能化的特点&a…

运行软件缺失vcruntime140.dll怎么办?vcruntime140.dll缺失的详细解决方法分享

vcruntime140.dll 是一个动态链接库文件,它是 Microsoft Visual C Redistributable Package 的一部分,为使用 Visual C 编译器开发的应用程序提供必要的运行时环境。该文件包含了大量应用程序运行时需要调用的库函数,这些函数是实现 C 标准库…

1.计算机系统概述

1.计算机系统概述 1.1计算机系统层次结构 第1级是微程序机器层 第2级是传统机器语言层 第3级是操作系统层:向上提供广义指令 第4级是汇编语言层 第5级是高级语言层 1、2层是硬件,3-5层是软件。 没有配备软件的纯硬件系统称为裸机,第3-5…

AWVS+BP+XRAY三层联动扫描漏洞

1. 前言 本报告详细记录了使用AWVS(Acunetix Web Vulnerability Scanner)、Burp Suite和Xray进行的漏洞扫描结果。旨在帮助开发团队识别和修复系统中的安全漏洞,提升整体安全性。 2. 扫描工具简介 AWVS(Acunetix Web Vulnerabi…

Spring家族中的消息通信解决方案

相信大家对消息通信架构以及各种消息中间件应该都不陌生。在分布式系统的设计和开发过程中,消息通信是用于实现系统解耦、提高扩展性的一大技术体系。而业界关于如何实现消息通信系统也有很多解决方案和对应的开发框架。不知道你有没有发现,在我们每天都…

小米路由器如何设置去广告功能,如何设置小米路由器的自定义Hosts(小米路由器如何去除小米广告、去除小米电视盒子开屏广告、视频广告)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 实现方案 📒📝 操作步骤📝 注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 小米设备的广告一直是用户头疼的问题,无论是开屏广告、应用内广告还是系统广告,都影响了用户体验。本文将详细介绍如何通过小米路由器实现去除广告…

升级你的提问技巧:ChatGPT-4o时代,如何让对话更智能?

最近,我一直在尝试使用升级版的ChatGPT,也就是GPT-4o,它带来了许多令人兴奋的新功能。要充分利用这个新工具,我们得在提问方式上做些小小的调整。下面,我会从简单到复杂,一一介绍这些调整。 提高提示词的具…

日、周、月度累计发电量、上网电量数据统计平台开发实施案例

一、项目背景及需求 项目需求方为江苏国信集团关联单位:华靖光伏、新能昊扬,项目地点在江苏泰州、江苏扬州,对应分布式光伏发电数采项目。 项目背景:光伏发电并网项目发电量数据采集与开发统计。 需求:对光伏电表数…

STC8增强型单片机进阶开发--OLED显示器(SPI)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

新手快速上手IDEA【常用快捷键】

目录 一、常用二、进阶(提高编码速度)三、其他四、查找、替换与关闭最后 一、常用 说明快捷键复制代码ctrl c粘贴ctrl v剪切ctrl x撤销ctrl z反撤销ctrl shift z保存-save allctrl s全选-select allctrl a 二、进阶(提高编码速度&a…

深入理解可燃气体报警器检验标准:守护工业安全新举措

在工业生产领域,可燃气体报警器扮演着至关重要的角色。它能在气体浓度达到危险水平之前发出警报,为工作人员争取宝贵的逃生时间。 为了确保可燃气体报警器的准确性和可靠性,我们需要遵循一系列严格的检验标准。 在这篇文章中,佰…

【wiki知识库】05.分类管理模块--后端SpringBoot模块

📝个人主页:哈__ 期待您的关注 目录 一、🔥今日目标 二、☀SpringBoot代码修改 1.使用逆向工程生成Category表结构 2. 新增CategoryQueryParam 3.新增CategorySaveParam 4.新增CategotyQueryVo 三、🤖新增分类管理的相关接口…

MySQL—多表查询—多表关系介绍

一、引言 提到查询,我们想到之前学习的单表查询(DQL语句)。而这一章节部分的博客我们将要去学习和了解多表查询。 对于多表查询,主要从以下7个方面进行学习。 (1)第一部分:介绍 1、多表关系 2、…

记录layui-table中操作列的宽度随着权限变化而变化

最近做一个项目,某个页面因为角色不同,所以显示的的按钮有所不同。 管理员权限 普通人员权限 layui引入的table宽度是写死的,不能随着自动变化,查了一些资料,让写入css的方法 .layui-table th, .layui-table td { whi…