什么是FastDFS
一个开源的轻量级分布式文件系统,能够实现文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡问题。
充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标。
商城系统哪里用了FastDFS,用这个文件系统构建了商城相册,用于存储图片的管理单元,先将商品图片上传到商城相册中,添加商品的时候需要添加图像可以直接在相册中选择,在添加商品后将图像地址也保存在商品表中。
底层有一个相册表,保存了相册信息,并将相册内的图像地址以列表的形式保存在image_items这一字段当中。
FastDFS原理
FastDFS 架构包括 Tracker server 和 Storage server。客户端请求 Tracker server 进行文件上传、下载,通过Tracker server 调度最终由 Storage server 完成文件上传和下载。
Tracker server 作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些策略找到Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。Storage server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上,Storageserver 没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。
每个Tracker节点也是集群形式,增强系统可用性
每个storage节点都是集群形式,以保证高可用
扩展storage节点非常方便,也就是说该系统能够很轻松地实现线性扩容
FastDFS上传流程
- storage定时向tracker上传状态信息
- 客户端发起上传请求给tracker
- tracker查询当前可用的storage
- tracker返回给客户端可用的storage的ip和端口号
- client上传文件
- storage收到上传文件请求,先生成file_id
- 将上传内容写入到磁盘中
- 给client返回file_id(路径信息和文件名)
- client存储文件信息
客户端上传文件后存储服务器将文件 ID 返回给客户端,此文件 ID 用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储、服务器 IP 地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
FastDFS有什么缺点
- 通过API下载,存在单点的性能瓶颈;
- 不支持断点续传,对大文件将是噩梦;
- 同步机制不支持文件正确性校验,降低了系统的可用性;
- 对跨公网的文件同步,存在着比较大的延迟,需要应用做相应的容错策略
- 不支持POSIX通用接口访问,通用性比较的低;
FastDFS特性
- 同组storage文件同步,由文件所在的源Storage服务器push至其它Storage服务器,目前同步是采用Binlog方式实现,由于目前底层对同步后的文件不做正确性校验,因此这种同步方式仅适用单个集群点的局部内部网络,如果在公网上使用,肯定会出现损坏文件的情况,需要自行添加文件校验机制。
- 支持主从文件,非常适合存在关联关系的图片,在存储方式上,FastDFS在主从文件ID上做取巧,完成了关联关系的存储。