FastDFS分布式文件系统入门(一)-FastDFS介绍

一、什么是FastDFS?

FastDFS是一个开源的轻量级分布式文件系统,使用C语言开发,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,并且支持在线扩容,冗余备份、解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

二、FastDFS架构

FastDFS由三个角色组成:跟踪服务器Tracker Server、存储服务器Storage Server、客户端Client

Tracker server:跟踪调度服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。

Storage Server:储存服务器,用于存储数据,以组(卷,group或volume)为单位组织;

Client:客户端,就是我们的应用程序,作为业务请求的发起方; 

  • tracker服务器与Storage 存储服务器的特点

tracker服务器:

  1. tracker服务器集群是相互独立的机器 。

  2. storage集群服务器定时向tracker服务器汇报自身状态信息(每30s),包括健康信息、磁盘容量信息、同步信 息,ip等

  3. 负载均衡

    storage 存储服务器:

  4. 分卷存储文件,每卷(组)可以由多台服务器组成,同一卷组下的服务器之前数据是同步的,所以每台服务器的数据是一样的。

  5. 组和组之间存储的数据是不一样的,分块存储,使用场景:扩容

文件上传机制

具体流程描述:

  1. Storage Server会定时(每隔30秒)向tracker汇报状态信息,包括健康状态,当前磁盘容量信息等。

  2. Client发起上传文件的请求。

  3. Tracker Server接收到Client发起的上传请求后,根据Storage Server反馈的状态信息,获取可用的Storage,并将该storage的ip和端口返回给client。

  4. client向该ip和端口的storage地址直连,上传文件.

  5. storage server完成文件的存储,并生成文件的file_id,将file_id返回至client

  6. client获取文件的存储信息。

那么,通过上面的描述疑问:

  1. storage如果是由多个group组成,那么如何知道向哪个group中上传文件呢?

    storage会定时向tracker汇报状态信息,tracker根据存储策略来确定通过哪种策略上传到相应的group中

    策略包括:0.轮询策略,1.固定访问某台group服务器,2.负载均衡,默认选择最大空闲空间的group服务器,系统默认选择2.负载均衡。

  2. 每个group中包括多台服务器, 那么如何知道写入同组的哪个storage服务器呢?

    根据storage策略确定存入同组的哪个服务器,策略包括:0.轮询策略,1.根据ip排序存储,2.根据优先级

    系统默认选择0.轮询策略。

  3. 如何知道文件写入到storage中的哪个磁盘呢?

    根据存储路径策略确认出入到磁盘哪个路径下,策略包括:0.轮询策略,2.最大空闲空间策略

    系统默认选择0.轮询策略。

  4. 当文件存储到某个目录后,会为该文件生成一个文件名,那么文件名是由哪些信息组成呢?

    下图是文件存储成功后,fastdfs系统返回给client的文件路径,其中group1表示组名,M00表示虚拟磁盘目录,/00/00是文件的目录,后面组成的就是文件的名称和文件类型。

    文件名这一串字符是将源服务器的ip地址、文件的创建时间、文件的大小、文件的crc32、随机数拼接然后通过base64编码后形成的文件名。

文件下载机制

具体流程描述:

1.storage定时向tracker汇报状态信息。

2.客户端发起下载文件的请求

3.tracker检验storage同步状态,如果同步完成,返回storage的ip和端口并根据文件名file_id找到指定的storage服务器查找相应的文件,将该文件返回给client。如果同步未完成,tracker则根据请求的文件名解析出源服务器地址,找到源服务器下的相应的文件,将该文件返回给client。

猜你喜欢

转载自blog.csdn.net/java_cxrs/article/details/106322587