分布式存储FastDFS详解

存储 数据管理
我们在架构图中发现,Tracker 也是分布式部署,便于扩缩容。面对访问激增的问题,可通过增加节点的方式应对。

今天主要介绍FastDFS分布式文件存储。

图片图片

场景切入

在大型网站中由于用户数和存储内容较多,存在大容量文件存储的场景,例如图片、视频、日志、文件等。如何保证这些资源的高可用性和快速访问,从而提升用户体验和网站性能?

图片图片

分布式存储的由来

我们知道,根据业务体量的增大,一般分布式的设计是从单体应用演进开始的。最初,在单体项目中,

图片图片

早期用户量可能比较少,整个系统的一个架构:服务代码跟我们的文件资源信息都存储在了一个服务器上面。

随着用户量越来越多,那么存储文件越来越多,本身服务器可能就只有比如:100G的磁盘空间,文件服务器里面存储的东西越来越多。那么,它会影响到整个服务器的资源的一个分配。

有人想,把我们这个文件服务器单独的给拆出来,作为一个单独服务器

图片图片

上边实现了资源文件和代码的解耦。但是资源文件的存储量美誉得到根本性的解决。

于是,我们就需要拓宽服务器,我拓宽到10台,20台。。。其实就是要说的这个分布式文件存储系统。

图片图片

常见的分布式存储框架

图片图片

本章重点介绍FastDFS。

FastDFS 分布式存储

简介

官方介绍:

图片图片

FastDFS是一个开源的分布式文件系统,特别适合于大容量文件存储的场景,例如图片、视频、日志、文件等。是一个开源的高性能分布式文件系统,专为解决大容量存储和负载均衡问题而设计。

中文官网[1]英文官网[2]学习地址[3]下载地址[4]源码包[5]性能测试[6]Gitee主页[7]

它具备以下核心功能:

  1. 文件存储:能够存储大量数据文件。
  2. 文件同步:确保文件在系统内的多个副本之间保持一致。
  3. 文件访问:支持用户上传和下载文件。

FastDFS 功能特性

  • 分组存储,简单灵活;
  • 对等结构,不存在单点;
  • 文件ID由FastDFS生成,作为文件访问凭证。
  • 大、中、小文件均可以很好支持,可以存储海量小文件;
  • 一台storage支持多块磁盘,支持单盘数据恢复;
  • 提供了nginx扩展模块,可以和nginx无缝衔接;
  • 支持多线程方式上传和下载文件,支持断点续传;
  • 存储服务器上可以保存文件附加属性。

FastDFS 架构及工作原理

架构设计:

图片图片

工作原理:

  • Client 客户端:实际项目的访问客户端。
  • Tracker Server: 跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。在内存中记录集群中group和storage server的状态信息,是连接client和Storage server的枢纽。
  • Storage Server: 存储服务器,文件和文件属性(meta data)都保存到存储服务器上。其功能包括:
  1. 文件存储:保存上传的文件数据。
  2. 文件同步:在多个存储节点之间同步文件,以保证数据一致性。
  3. 提供文件访问接口:允许用户通过API进行文件操作。
  4. 管理元数据:存储文件的相关属性,以键值对的形式,例如图像的宽度可以表示为 width=1024。

问题思考

如何上传文件?

图片图片

上传文件过程描述:

  1. 客户端需要上传或下载文件,向FastDFS系统发起请求。
  2. 连接到FastDFS的跟踪器服务器。跟踪器负责调度和负载均衡。
  3. 跟踪器接收到客户端的请求后,会根据当前的负载情况和存储策略,选择一个合适的存储服务器。
  4. 跟踪器将所选存储服务器的IP地址和端口号发送给客户端。
  5. 客户端根据跟踪器提供的IP地址和端口号,直接与选定的存储服务器建立连接。
  6. 客户端将文件内容和元数据发送给存储服务器。元数据可能包括文件卷名(volume)和文件名等信息。
  7. 存储服务器接收到文件后,将其保存在本地磁盘上,并根据FastDFS的配置创建多个副本,可能在同一个存储组内的其他服务器上。
  8. 文件存储完成后,存储服务器会向客户端发送响应,确认文件上传成功或提供下载链接。
  9. 客户端收到存储服务器的响应后,完成文件上传或下载操作。

如何下载文件?

图片图片

文件下载过程描述:

  1. 客户端想要获取存储在FastDFS系统中的文件,向系统发起下载请求。
  2. 发送请求到FastDFS的跟踪器服务器。跟踪器负责管理文件的元数据,并知道文件存储的位置。
  3. 跟踪器接收到客户端的请求后,根据文件的卷名(volume name)和文件名(filename)查找文件存储信息。
  4. 跟踪器确定文件所在的存储服务器,并将该服务器的IP地址和端口号返回给客户端。
  5. 客户端使用跟踪器返回的IP地址和端口号,直接与存储服务器建立连接。
  6. 客户端向存储服务器发送文件下载请求,包括卷名和文件名。
  7. 存储服务器接收到请求后,根据提供的卷名和文件名检索文件。
  8. 一旦找到文件,存储服务器将文件内容发送回客户端。
  9. 客户端接收到文件内容,下载流程完成。

如何保证高可用?

FastDFS设计为一个多副本分布式文件系统。多副本机制是FastDFS保证数据可靠性和容错能力的关键。

图片图片

几个关键点:

  • 至少有一个副本,或者多个。
  • 文件和文件副本位于同一个组(Group)或者叫卷(Volume)
  • 不同卷之间有效的资源隔离
  • 文件和文件副本位于不同的机器上,如图:副本i,副本ii...位于不同的主机上,对应不同的ip和port
  • 同步机制:同步和异步两种方式
  • 自动副本同步: 当向存储组添加新的存储服务器时,现有文件的副本会自动同步到新服务器上。

通过以上设计提高容错能力和单点故障问题,保证高可用。

如何解决性能瓶颈?

我们在架构图中发现,Tracker 也是分布式部署,便于扩缩容。面对访问激增的问题,可通过增加节点的方式应对。

图片图片

几个关键点:

  1. 通过增加Tracker服务器的数量,可以分担请求调度和负载均衡的任务,从而提高系统的整体性能。
  2. 通过增加更多的存储服务器或存储卷来扩展存储容量,减少单个服务器的负载。
  3. 根据业务需求选择合适的同步策略,权衡同步复制的性能开销和异步复制的延迟。

总结

文章主要介绍分布式存储FastDFS 结构设计和原理和使用过程中的一些问题思考。

使用过程中FastDFS几个关键特性的优缺点对比:

特性

优点

缺点

架构设计

易于扩展、负载均衡

同步延迟

冗余备份

支持在线扩容

存储空间利用率不高

高性能

C语言编写,执行效率高

单点性能瓶颈

内存管理

- 内存零拷贝,减少系统开销

- 对内存要求较高

责任编辑:武晓燕 来源: 码易有道
相关推荐

2019-10-10 09:16:34

Zookeeper架构分布式

2018-01-18 17:14:58

分布式文件系统FastDFS

2017-10-27 08:40:44

分布式存储剪枝系统

2012-10-09 16:43:47

FastDFS分布式文件系统

2012-05-10 14:04:07

分布式文件系统架构

2018-08-02 08:42:57

分布式存储Ceph

2015-05-12 13:03:54

开源分布式存储HDFS

2010-03-24 17:07:52

无线分布式系统

2018-02-22 08:42:04

分布式存储安全

2019-07-05 15:01:32

区块链系统分布式存储

2017-10-17 08:33:31

存储系统分布式

2019-01-28 11:03:03

NginxFastDFS服务器

2012-10-11 14:31:57

FastDFSMogileFS

2017-01-10 16:18:26

分布式存储建设

2018-10-09 10:45:40

2018-01-02 20:00:28

数据库MySQL分布式存储

2017-04-14 09:48:25

分布式存储系统

2012-10-11 14:03:56

FastDFS分布式文件系统

2010-09-10 08:54:02

2017-11-07 15:20:06

分布式存储解决
点赞
收藏

51CTO技术栈公众号