1 什么是FastDFS
- 文件系统
2 为什么要去使用它
- 开始我在想我们直接将文件(图片,视频,文本)直接上传到云端服务器,存放在云端的服务器上的某个文件夹下面,然后通过nginx服务器来访问静态资源不就OK了
随之这个疑问的提出,我联想到了实际环境中,会出现服务器的各种异常(宕机,网络波动...),那么那个时候,可能会出现用户访问不了相关的资料以及数据资料的丢失,所以面对这样的情况,我去学习了fastDFS
- 那么为什么是选择fastDFS呢,这个主要是看业务,如果你和我一样仅仅是存放用户上传的图片,表情包之类的小文件,那么选择fastDFS。如果你是上传大文件(电影),那么建议你使用其他的文件存储系统(googleFS和hdfs)。
- 这个我在提一下,使用fastDFS,是不会对文件进行分块存储,减少分块合并的开销,使用了socket通信,这个就可以实现文件的快速存储以及读取(不适合大文件)。而通用文件系统NFS和GFS的系统复杂,性能一般。
3 整体架构图
-
3.1 client
- 表示客户端的访问(上传/下载/查询)
-
3.2 tracker 集群
- 追踪服务器或调度服务器,作用是
负载均衡和调度
- Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server 不存在单点故障。客户端请求
Tracker server采用轮询方式
,如果请求的tracker无法提供服务则换另一个tracker
- 追踪服务器或调度服务器,作用是
-
3.3 storage集群
- storage会采用分组的情况,
组内的文件完全一致
(就算一台服务器先开机几天,后面加入组内的服务器也会将之前的数据进行同步),不同组之间无法进行通信
- storage集群由一个或多个组构成,集群存储总容量为集群中所有组的
存储容量之和
- 一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向 扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。
- Storage server会连接集群中
所有的Tracker server
,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步 状况、文件上传下载次数等统计信息。
- storage会采用分组的情况,
4 文件上传
客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包 括:组名,虚拟磁盘路径,数据两级目录,文件名。
- 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
- 虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00, 如果配置了store_path1则是M01,以此类推。
- 数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
- 文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创 建时间戳、文件大小、随机数和文件拓展名等信息。
5 文件下载
tracker根据请求的文件路径即文件ID 来快速定义文件。
比如请求下边的文件:
- 通过组名tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客 户端访问。
- 存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到 客户端需要访问的文件。