FastDFS是由国人余庆所开发,是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。前端
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。- 来源百科git
maven依赖github
<dependencies> <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.25.2-RELEASE</version> </dependency> </dependencies>
bootstrap.yml配置bootstrap
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提供上传、下载、删除、获取元数据等接口。网络
文件上传架构
文件下载负载均衡
获取组元数据maven
删除文件
接口层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文件服务器是免密访问的,若是知道文件路径能够在浏览器直接访问。
示例代码
示例
group1/M00/00/09/CuwAXFvgFLeAZukHAAAPZqRE-Dw477.png
参数说明
FastDFS部署架构
来源网络
FastDFS有两种角色:tracker和storage。
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名的对应关系。