什么是FastDFS

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

FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。- 来源百科



SpringCloud集成FastDFS

maven依赖



<dependencies>
 <dependency>
 <groupId>com.github.tobato</groupId>
 <artifactId>fastdfs-client</artifactId>
 <version>1.25.2-RELEASE</version>
 </dependency>
</dependencies>



bootstrap.yml配置



fdfs:
 soTimeout: 30000
 connectTimeout: 20000
 thumbImage:
 width: 150
 height: 150
 trackerList:
 - 192.168.1.156:22122


定义配置类及客户端操作类


@Configuration
@Import(FdfsClientConfig.class)
public class FastDFSConfig {
}

定义客户端操作类:FastDFSClient

微服务架构的数据共享模式 微服务 文件共享_大数据

 

FastDFSClient提供上传、下载、删除、获取元数据等接口。

文件上传

微服务架构的数据共享模式 微服务 文件共享_分布式_02

 

文件下载

微服务架构的数据共享模式 微服务 文件共享_大数据_03

 

获取组元数据

微服务架构的数据共享模式 微服务 文件共享_linux_04

 

删除文件

微服务架构的数据共享模式 微服务 文件共享_linux_05

 

接口层Controller

上传接口接收到前端上传文件请求并获取MultipartFile文件对象,通过fdw.uploadFile(file)上传到 192.168.1.156文件服务器。


MultipartFile file = request.getFile(iter.next());
fdw.uploadFile(file);


如果文件上传成功,会返回图片存储相对路径。


group1/M00/00/09/CuwAXFvgFLeAZukHAAAPZqRE-Dw477.png


一般文件上传到fastdfs文件服务器是免密访问的,如果知道文件路径可以在浏览器直接访问。

微服务架构的数据共享模式 微服务 文件共享_分布式_06

示例代码

微服务架构的数据共享模式 微服务 文件共享_linux_07

 



FastDFS存储路径说明

示例



group1/M00/00/09/CuwAXFvgFLeAZukHAAAPZqRE-Dw477.png


参数说明

  • group1表示文件存储服务器(storage)组ID
  • M00表示存储路径(存储设备)编号
  • 00/09表示两级目录分层,其中09表示九月份。storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
  • CuwAXFvgFLeAZukHAAAPZqRE-Dw477.png表示文件名,不是用户上传时文件名,而是由服务器生成hash文件名


FastDFS原理分析

FastDFS部署架构

微服务架构的数据共享模式 微服务 文件共享_微服务架构的数据共享模式_08

来源网络

FastDFS有两种角色:trackerstorage

tracker负责文件访问的跟踪和负载均衡。storage负责存储文件,它的功能包括:文件存储、文件同步、提供文件访问接口,storage还负责管理文件的元数据,这些数据是以键值对的形式表示的,如:width=1024,键是“width”,值是“1024”。

所有服务器都是对等的,不存在Master-Slave关系,存储服务器采用分组方式,同组内存储服务器上的文件完全相同,不同组的storage server之间不会相互通信。

tracker和storage可以是一个或多个服务器。在tracker或storage的集群中,任何时候都可以从中删除服务器,对线上服务没有任何影响。tracker集群中的服务器是点对点的。由storage server主动向tracker server报告状态信息,tracker server之间通常不会相互通信

卷/组

存储服务器以 卷/组 形式组织,以获取高容量。存储系统包括一个或多个卷,卷与卷之间的文件是相互独立的。整个存储系统的总容量等于所有卷的容量之和。一个文件卷包括一个或多个存储服务器,一个卷中的存储服务器之间的文件是一样的。一个文件卷中的服务器会互相备份,且这些服务器之间是负载均衡的。当添加一个存储服务器到一个卷的时候,卷中的文件会自动复制到新的服务器,复制完以后,系统会把新服务器切换到线上,已提供存储服务。

当存储容量不足时,你可以添加一个或多个卷来扩展存储容量。一个文件的标识包括两部分:卷名和文件名



总结

目前FastDFS不支持可视化管理界面维护,同时用户在把文件上传的服务器时,原来的文件名变成了FastDFS自创的hash文件名,所以如果有需要,可以在业务层表设计存储源文件名与hash名的对应关系。