FastDFS_简介和原理
一、什么是FastDFS?
DFS(distributed file system):分布式文件系统。
FastDFS是一种开源的轻量级分布式服务器,用来解决大容量存储的问题,并充分考虑了冗余备份,负载均衡,线性扩容等机制,注重高可用、高性能等指标。特别适合中小文件,对以文件为载体的在线服务提供了非常好的解决方案。
主要功能:文件存储,文件同步,文件访问(文件上传、文件下载)等。
二、FastDFS由什么组成?
FastDFS由跟踪服务器(TrackerServer)、存储服务器(Storage Server)和客户机(Client)构成。
跟踪服务器 TrackerServer:
主要起到调度工作,起到均衡作用,负责管理所有的Storage Server 和 Group ,每个Storage 在启动之后会自动连接Tracker ,告知自己所署的Group的信息,并保持周期性心跳,Tranker 会根据Storger的心跳信息,建立Group -> Storage Serverlist 【因为一个Group 可以由多个StorageServer构成】,由于Storage会保持周期性的心跳,所以Tracker 需要管理的元信息就很少,会全部存储在内存中,本身并不需要持久化任何数据,这样的话,就使得Tracker非常容易扩展,仅仅增加Tracker 即可扩展为 Tracker Cluster 集群服务。Cluster里的每个Tracker 之间是完全对等的,所有的Tracker都接收Storage的心跳信息,生成元数据信息来提供读写服务。
存储服务器 StorageServer:
主要提供容量和备份服务,以Group为单位,每个Group 内有多个Storage Server,数据互相备份,当一个Storage Server损坏时,可以通过其他的Storage Server进行恢复。
以Group 为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制【副本数即为Storage Server 的数量】,比如将不同的应用数据存储到不同的Group就能实现简单的应用数据隔离,同时可以根据应用不同的访问特性来分配不同的Group,做到负载均衡。
客户端 Client:
此时,这个客户端并不是用户所在的客户端,而是部署了我们项目的服务器,每个客户端(搭载项目的服务器)都需要安装Nginx,客户端(搭载项目的服务器)和文件存储服务器之间的数据交流也是服务器之间的交流。
三、FastDFS工作流程
Ⅰ、上传
0:Storage Server会定时向Tracker Server 发送自己的Group以及文件夹信息。使得Tracker Server 会保留最近的元数据。
1:普通用户向Client(服务器)发送请求。
2:Client(服务器)会向TrackerServer发送请求存储。
3:TrackerServer 会向Client反馈一个不是太忙的Storage Server 信息。
4:Client(服务器)收到消息,请求StorageServer。
5:Storage Server存储数据,并反馈给Client一个id,这个id也就是存储文件的路径。
(路径分为组名、文件夹、文件名和后缀,也就是后面用来访问此文件的方式)
模拟对话:
StorageServer:Tracker老哥,我还活着,你要记得我啊!
用户1:我要上传个电脑啊,服务器!(哇,有点过分了啊!)
Client(服务器):好勒,东西给我,我帮你把东西存起来。
Client(服务器):TrackerServer,我要存一台电脑,给我找一个仓库。
TrackerServer:老铁等一下,我给你找一个地大一点的仓库,要不就去A小区B栋302仓库吧。
Client(服务器):嘿,StorageServer,呐,这个是我的东西。
StorageServer:OJBK,东西放好了,给你个编号(9827),以后凭着编号来找你的东西啊!
Client(服务器):把A小区/B栋/302/9527记录到账本上。
A小区:就是对应的GroupA
B栋:就是对应的Storage Server
302:就是Storage Server下的文件夹
9527:就是文件名
电脑:就是文件后缀名
账本:就是数据库。
由于是项目需要FastDFS,所以学习了一下,现在写了个总结,如果有同样在学的,可以稍加参考。由于时间匆忙,也参考了一下别人的文章,和自己的稍加整合,若有失误,还请指出。