本文为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类似googleFS,属于应用级文件系统,不是通用的文件系统,只能通过专有API访问,目前提供了C和JavaSDK,以及PHP扩展SDK。FastDFS为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性。FastDFS可以看做是基于文件的keyvalue存储系统,key为文件ID,value为文件内容,因此称作分布式文件存储服务更为合适。
2.FastDFS特点
1)分组存储,简单灵活;2)对等结构,不存在单点;3)文件ID由FastDFS生成,作为文件访问凭证。FastDFS不需要传统的nameserver或metaserver;4)大、中、小文件均可以很好支持,可以存储海量小文件;5)一台storage支持多块磁盘,支持单盘数据恢复;6)提供了nginx扩展模块,可以和nginx无缝衔接;7)支持多线程方式上传和下载文件,支持断点续传;8)存储服务器上可以保存文件附加属性。
3.FastDFS架构说明
FastDFS系统由跟踪服务器(Trackerserver)、存储服务器(Storageserver)和客户端(Client)构成。
(1)跟踪服务器(Trackerserver)
Trackerserver:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。
Tracker是FastDFS的协调者,负责管理所有的Storageserver和group,每个Storage在启动后会连接Tracker,同步自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==[storageserverlist]的映射表。Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为Trackercluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。
(2)存储服务器(Storageserver)
Storageserver:存储服务器(又称:存储节点或数据服务器),主要提供容量和备份服务。文件和文件属性(MetaData)都保存到存储服务器上。Storageserver直接利用OS的文件系统调用管理文件。
Storageserver(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内Storageserver数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内的其他机器,使得恢复时间会很长。group内每个storage的存储依赖于本地文件系统,storage可配置多个数据存储目录,比如有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个目录都配置为storage的数据存储目录。storage接受到写文件请求时,会根据配置好的规则(后面会介绍),选择其中一个存储目录来存储文件。为了避免单个目录下的文件数太多,在storage第一次启动时,会在每个数据存储目录里创建2级子目录,每级个,总共个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。
group:组,也可称为卷。同组内服务器上的文件是完全相同的,同一组内的Storageserver之间是对等的,文件上传、删除等操作可以在任意一台Storageserver上进行。
(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_7tHw.jpggroup1(组名)/M00(虚拟磁盘路径)/01/44(数据两级目录)/wKgAyVgFk9aAB8hwAA-8Q6_7tHw.jpg(文件名)
(1)组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。(2)虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。(3)数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。(4)文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
IT小胖豆:初学者踩坑之路及过程分享,希望能够帮到一些初学者,欢迎各位IT打工人,入坑讨论-_-