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.

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

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

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

相关文章

jenkins应用2-freestyle-job

1.jenkins应用 1.jenkins构建的流程 1.使用git参数化构建,用标签区分版本 2.git 拉取gitlab远程仓库代码 3.maven打包项目 4.sonarqube经行代码质量检测 5.自定义制作镜像发送到远程仓库harbor 6.在远程服务器上拉取代码启动容器 这个是构建的整个过程和步骤…

保姆级教程:Redis 主从复制原理及集群搭建

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…

线程池的工作原理

文章目录 一、应用场景二、工作原理三、主要函数 一、应用场景 传统并发变成的缺陷: 1.创建和销毁线程上花费的时间和消耗的系统资源,甚至可能要比花在处理实际的用户请求的时间和资源要多得多 2. 活动的线程需要消耗系统资源,如果启动太多&…

26、matlab多项式曲线拟合:polyfit ()函数

1、polyfit 多项式曲线拟合 语法 语法:p polyfit(x,y,n) 返回次数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(基于最小二乘指标)。 语法:[p,S] polyfit(x,y,n) 还返回一个结构体 S 语法:[…

优化 mac 储存空间的方法 只需一招为你的苹果电脑提速

在职场中,许多人都对苹果电脑情有独钟。苹果电脑以其简洁美观的设计、流畅稳定的性能以及出色的用户体验,成为了众多职场人士的得力助手。无论是处理文档、制作演示文稿,还是进行创意设计等工作,苹果电脑都能展现出其独特的优势&a…

微信小程序公众号二合一分销商城源码系统 基于PHP+MySQL组合开发的 可多商户商家入驻 带完整的安装代码包以及搭建教程

系统概述 微信小程序公众号二合一分销商城源码系统,是基于PHPMySQL组合开发的一款高效、稳定的电子商务平台解决方案。该系统创新性地将微信公众号与小程序的功能进行了深度整合,为商家提供了一个功能齐全、易于管理的分销商城系统。通过此系统&#xf…

Vue3+vant 带你实现常见的历史记录的业务功能

前言 大部分小伙伴不管是开发PC端还是H5移动端,都会遇到历史搜索的功能。对用户的历史记录进行增删查可以是接口,也可以是前端用缓存实现,一般用浏览器缓存实现的比较多,这篇文章就来教你如何用LocalStorage对历史记录数据的存储、…

视创云展元宇宙虚拟展厅,带来沉浸式的逛展体验!

近年来,随着科技的飞速发展和市场需求的不断演变,众多企业纷纷将目光转向线上虚拟展厅的建设。视创云展元宇宙虚拟展厅凭借其创新性和实用性,为众多企业带来了前所未有的宣传体验,成为了商企展示自我、推广产品的全新舞台。 与传统…

Java 生成SSL证书

第一步: cmd打开指令窗口 第二步: 运行指令: keytool -keystore hk.jks -storepass 123456 -deststoretype jks -genkeypair -keyalg RSA -validity 365 -alias contrastserver -dname "CN111.230.63.59, OUHK, OHK, LZH, STGD, CCN&…

XSKY对象存储深度结合Alluxio分布式缓存系统,GPU利用率提高至90%以上

近日,Alluxio分布式缓存系统完成了与XSKY星辰天合的 XEOS V6.4 对象存储的兼容性测试,旨在解决数据管理和加速方面的挑战。双方进行了深度的产品对接和联合开发,将 Alluxio 分布式缓存系统与 XEOS 对象存储的众多应用特性进行结合&#xff0c…

38. 【Java教程】日期和时间处理

本小节我们将学习 Java 中的日期和时间,日期和时间在我们的实际开发中非常常用,例如用户的注册、数据的增删改、对敏感信息的操作等等都需要记录下日期和时间。通过本小节的学习,你将了解到什么是日期、什么是时间、什么是时区,Ja…

3072. 将元素分配到两个数组中 II

题目 给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 现定义函数 greaterCount ,使得 greaterCount(arr, val) 返回数组 arr 中 严格大于 val 的元素数量。 你需要使用 n 次操作,将 nums 的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操…

WebGL画粗线

目录 前言 基本思路 求左右端点 实现 组织数据 顶点着色器计算端点坐标 效果 前言 WebGL绘制模式有点、线、面三种;通过点的绘制可以实现粒子系统等,通过线可以绘制一些连线关系;面就强大了,通过面,我们可以…

视频监控汇聚平台LntonCVS国标GB28181协议实现语音对讲功能

在当今这个智能技术飞速发展的时代,人工智能已经成为了电子产品领域的一股不可忽视的热门趋势。随着科技的不断进步,越来越多的电子产品开始融入人工智能技术,从而为其开拓了全新的发展路径。在这个大背景下,安防摄像头无插件直播…

基于springboot实现智慧校园之家长子系统项目【项目源码】计算机毕业设计

基于springboot实现智慧校园之家长子系统演示 SpringBoot框架介绍 本课题程序开发使用到的框架技术,英文名称缩写是SpringBoot,在JavaWeb开发中使用的流行框架有SSH、SpringBoot、SpringMVC等,作为一个课题程序采用SSH框架也可以&#xff0c…

【学习】测试用例设计与执行的黄金法则

在软件测试领域,测试用例的设计与执行是确保产品质量的关键环节。一个优秀的测试用例能够揭示软件中的缺陷,而高效的执行则能保障测试覆盖的全面性。如同璀璨的星辰指引航船前行,以下黄金法则将引领测试用例设计与执行的过程,确保…

Go 群发邮件Redis 实现邮件群发

一、安装 go get github.com/go-redis/redis/v8 go get gopkg.in/gomail.v2 二、使用"gopkg.in/gomail.v2"群发 package mainimport (gomail "gopkg.in/gomail.v2" )func main() {// 邮件内容m : gomail.NewMessage()m.SetHeader("From", &qu…

【杂谈】AIGC之Stable Diffusion:AI绘画的魔法

Stable Diffusion:AI绘画的魔法 引言 在AI的世界里,Stable Diffusion就像一位魔法师,它能够将我们脑海中的幻想,用画笔一一描绘出来。今天,就让我们一探这位魔法师的奥秘,看看它是如何从无到有&#xff0…

安装MongoDB单副本说明

参考:https://blog.csdn.net/weixin_43464076/article/details/126509254 https://driverzhang.github.io/post/mongo%E5%BC%80%E5%90%AF%E4%BA%8B%E5%8A%A1%E4%B9%8B%E5%89%AF%E6%9C%AC%E9%9B%86%E9%87%87%E5%9D%91/ https://dev.to/alexalvess/getting-started-wi…

实习面试题(答案自敲)、

1、为什么要重写equals方法,为什么重写了equals方法后,就必须重写hashcode方法,为什么要有hashcode方法,你能介绍一下hashcode方法吗? equals方法默认是比较内存地址;为了实现内容比较,我们需要…