龙空技术网

Linux新手入门系列:FastDFS概念和原理

IT小胖豆 155

前言:

现在看官们对“fastdfs原理”都比较重视,朋友们都需要剖析一些“fastdfs原理”的相关知识。那么小编也在网上网罗了一些对于“fastdfs原理””的相关内容,希望看官们能喜欢,朋友们快快来学习一下吧!

本文为FastDFS的基本概念和原理。

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。

注意:

Linux下区分大小写;

Linux多用户多线程;

Linux下每个文件和目录都有访问权限;

FastDFS概念和原理

本文为FastDFS的基本概念和原理。

#FastDFS#、#FastDFS概念#、#FastDFS原理#、#FastDFS简介#、#FastDFS特点#、#FastDFS架构#、#FastDFS文件上传下载流程#

1.FastDFS简介

FastDFS是一款开源的分布式文件系统,功能主要包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了文件大容量存储和高性能访问的问题。FastDFS特别适合以文件为载体的在线服务,如图片、视频、文档等等。

FastDFS作为一款轻量级分布式文件系统,FastDFS用C语言实现,支持Linux、FreeBSD、MacOS等类UNIX系统。FastDFS类似google FS,属于应用级文件系统,不是通用的文件系统,只能通过专有API访问,目前提供了C和Java SDK,以及PHP扩展SDK。

FastDFS为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性。FastDFS可以看做是基于文件的key value存储系统,key为文件ID,value为文件内容,因此称作分布式文件存储服务更为合适。

2.FastDFS特点

1)分组存储,简单灵活;2)对等结构,不存在单点;3)文件ID由FastDFS生成,作为文件访问凭证。FastDFS不需要传统的name server或meta server;4)大、中、小文件均可以很好支持,可以存储海量小文件;5)一台storage支持多块磁盘,支持单盘数据恢复;6)提供了nginx扩展模块,可以和nginx无缝衔接;7)支持多线程方式上传和下载文件,支持断点续传;8)存储服务器上可以保存文件附加属性。
3.FastDFS架构说明

FastDFS系统由跟踪服务器(Tracker server)、存储服务器(Storage server)和客户端(Client)构成。

(1)跟踪服务器(Tracker server)

Tracker server:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。

Tracker是FastDFS的协调者,负责管理所有的Storage server和group,每个Storage在启动后会连接Tracker,同步自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表。

Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为Tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。

(2)存储服务器(Storage server)

Storage server:存储服务器(又称:存储节点或数据服务器),主要提供容量和备份服务。文件和文件属性(Meta Data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。

Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。

以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内Storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内的其他机器,使得恢复时间会很长。

group内每个storage的存储依赖于本地文件系统,storage可配置多个数据存储目录,比如有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个目录都配置为storage的数据存储目录。

storage接受到写文件请求时,会根据配置好的规则(后面会介绍),选择其中一个存储目录来存储文件。为了避免单个目录下的文件数太多,在storage第一次启动时,会在每个数据存储目录里创建2级子目录,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

group:组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的Storage server之间是对等的,文件上传、删除等操作可以在任意一台Storage server上进行。

(3)客户端(Client)

client:客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

(4)上传流程(5)下载流程(6)总结

总的来说,Tracker相当于FastDFS的大脑,不论是上传还是下载都是通过Tracker来分配资源;客户端一般可以使用ngnix等静态服务器来调用或者做一部分的缓存;Storage内部分为group卷(或者叫做组),卷与卷之间是平行的关系,可以根据资源的使用情况随时增加,卷内服务器文件相互同步备份,以达到容灾的目的。

4.FastDFS的FID

FastDFS的FID是客户端上传文件后存储服务器返回给客户端,用于以后访问该文件的索引信息。文件索引信息包括:组名(卷名),虚拟磁盘路径,数据两级目录,文件名。

FID格式:组名/虚拟磁盘路径/数据两级目录/文件名如:group1/M00/01/44/wKgAyVgFk9aAB8hwAA-8Q6_7tHw351.jpggroup1(组名)/M00(虚拟磁盘路径)/01/44(数据两级目录)/wKgAyVgFk9aAB8hwAA-8Q6_7tHw351.jpg(文件名)
(1)组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。(2)虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。(3)数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。(4)文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

IT小胖豆:初学者踩坑之路及过程分享,希望能够帮到一些初学者,欢迎各位IT打工人,入坑讨论-_-

标签: #fastdfs原理