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.rhkb.cn/news/341345.html

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

相关文章

ru域名如何申请ssl证书

SSL证书是一种数字证书,通过它可以在客户端和服务器之间建立加密通道,保证数据在传输过程中的安全性。对于.ru域名来说,申请SSL证书可以有效提升网站的安全性,增强用户对网站的信任度,提高网站的排名和权重。今天就随S…

C#使用GDI对一个矩形进行任意角度旋转

C#对一个矩形进行旋转GDI绘图,可以指定任意角度进行旋转 我们可以认为一张图片Image,本质就是一个矩形Rectangle,旋转矩形也就是旋转图片 在画图密封类 System.Drawing.Graphics中, 矩形旋转的两个关键方法 //设置旋转的中心点 public v…

【遂愿赠书 - 2期】:618火热来袭,网络安全书单推荐

文章目录 一、网络安全书单背景二、网络安全与编程实践书单2.1 🏰《内网渗透实战攻略》2.2 🛡️《Kali Linux高级渗透测试(原书第4版)》2.3 🎖️《CTF那些事儿》2.4 🚀《权限提升技术:攻防实战与…

JVM学习-类加载过程(二)

Initialization初始化阶段 为类的静态变量赋予正确的初始值 具体描述 类的初始化是类装载的最后一个阶段,如果前面的步骤没有问题,那么表示类可以顺利装载到系统中,此时,类才会开始执行Java字节码(即,到了初始化阶段…

LLVM技术在GaussDB等数据库中的应用

目录 LLVM和数据库 LLVM适用场景 LLVM对所有类型的SQL都会有收益吗? LLVM在OLTP中就一定没有收益吗? GaussDB中的LLVM 1. LLVM在华为应用于数据库的时间线 2. GaussDB LLVM实现简析 3. GaussDB LLVM支持加速的场景 支持LLVM的表达式&#xff1a…

【Kubernetes】k8s集群的污点、容忍、驱逐 以及排障思路

污点和容忍以及驱逐 一、污点(Taint) 污点介绍 节点亲和性,是Pod的一种属性(偏好或硬性要求),它使Pod被吸引到一类特定的节点。Taint 则相反,它使节点能够排斥一类特定的 Pod。 Taint 和 Tol…

非递归实现快排排序及归并排序(尾篇)

1.快速排序(双指针实现) 2.非递归实现快排 3.递归实现归并排序 4.非递归实现归并排序 5.总代码 1.快速排序(双指针实现) 俩有个指针一前一后的排放着,cur先走并且去找比kye对应值小的数组值,一旦找到后…

隐藏 IP 地址的重要性是什么?

在当今的数字时代,保护我们的在线身份至关重要。从保护个人信息到保护隐私,互联网用户越来越多地寻求增强在线安全性的方法。保持匿名和保护敏感数据的一个关键方面是隐藏您的 IP 地址。在这篇博文中,我们将深入探讨隐藏 IP 地址的重要性&…

Java中条件运算符的嵌套使用技巧总结

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

从零开始:如何通过美颜SDK构建自己的直播美颜工具

今天,我将详细介绍如何通过美颜SDK从零开始构建自己的直播美颜工具。 一、了解美颜SDK 什么是美颜SDK 开发者可以通过集成SDK,快速在应用中实现这些功能,而无需从头编写复杂的图像处理算法。 选择合适的美颜SDK 选择时可以根据以下几个方…

PS系统教程11

HUD拾色器 作用:它可以帮助使用者更加高效地选择和使用颜色,从而提高工作效率和设计质量。 先确定色相值改变饱和度改变亮度使用HUD拾色器选中画笔工具画笔模式-正常shiftAlt右键 色相轮 上下移动从黑到白亮度变化左右移动从浅到深饱和度的变化选中颜…

Docker基础篇之Docker常规软件安装

文章目录 1. 总体步骤2. 安装tomcat3. 安装Mysql4. 安装Redis 1. 总体步骤 安装软件的总体步骤如下所示: 搜索镜像拉取镜像查看镜像启动镜像停止容器移除容器 2. 安装tomcat docker hub上查找tomcat镜像 或者使用一下命令查找: docker search tomca…

Mac硬件设备系统环境的升级/更新 macOS

Mac硬件设备上进行系统环境的升级/更新macOS 1.大版本(升级)判断(比如:我买的这台电脑设备最高支持Monterey) 点击进入对应的大版本描述说明页查看相关的兼容性描述,根据描述确定当前的电脑设备最高可采用哪个大版本系统(Sonoma/Ventura/Monterey/Big Su…

“探索‘循环购‘:快消品行业的新商业模式与增长策略“

大家好,我是吴军,来自一家深耕于软件开发和商业模式创新的科技公司。我们的专长在于为各类企业量身打造商城系统,并提供个性化的商业模式解决方案。迄今为止,我们已经助力众多企业成功实施了超过200种前沿的商业模式,实…

Python函数进阶

文章目录 1 函数多返回值2 函数多种传参方式2.1 位置参数2.2 关键字参数2.3 缺省参数2.4 不定长参数 3 匿名函数函数作为参数传递lambda匿名函数 1 函数多返回值 def test_return():return 1,2,3 x,y,z test_return() print(x) print(y) print(z)2 函数多种传参方式 2.1 位置参…

Java集合简略记录

一、集合体系结构 单列集合:Collection 双列集合:Map 二、单列集合 List系列集合:添加的元素是有序、可重复、有索引 有序指的是存和取的顺序是一致的,和之前排序的从小到大是没有任何关系的 Set系列集合:添加的元素是…

STM32自己从零开始实操04:显示电路原理图

一、TFT-LCD 屏接口 1.1指路 以下是该部分的设计出来后的实物图,我觉得看到实物图可能更方便理解这部分的设计。 图1 实物图 这部分设计的是一个屏幕的接口,很简单。使用的屏幕是:2.8inch 16BIT Module MRB2801。 1.2数据手册 &#xff0…

【python深度学习】——torch.einsum|torch.bmm

【python深度学习】——torch.einsum|torch.bmm 1. 基本用法与示例2. torch.bmm 1. 基本用法与示例 基本用法: torch.einsum(equation, *operands)equation: 一个字符串,定义了张量操作的模式。 使用逗号来分隔输入张量的索引,然后是一个箭头&#xff…

免费的维吾尔语翻译器:维汉翻译通App,最近新增了什么功能呢?让我们一起来看看!好用的维语翻译工具支持语音评分功能、支持汉语查拼音等等。

“阿拉伯语是知识,波斯语是糖,印度语是盐,而维吾尔语则是艺术。” 这是一句流传在西域的古老谚语,它不仅道出了维吾尔语言的独特魅力,也表达了人们对语言艺术的无限热爱。 而今,我们带着这份热爱&#x…

颠沛流离学二叉树(完结撒花篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…