特点:本地文件服务器是指文件数据直接存储在本地节点中。比如直接在项目目录下建立文件夹存放项目文件资源,如果按不同类型再细分,可以在项目目录下继续创建不同的子目录用于区分。
优点:简单便捷,项目可以直接引用,访问方便。
缺点:文件与代码混合存储不便于管理,随着文件的增多影响项目发布上线周期。
独立文件服务器
特点:搭建一台独立的服务器用于文件存储使用,项目上传文件时,先通过 ftp 或者 ssh 将文件上传至服务器某个目录下,再通过 Ngnix 或者 Apache Http Server 反向代理此目录,返回一个独立域名的文件 URL 地址,前端通过这个 URL 地址即可直接访问文件。
优点:独立存储,可以方便扩容、容灾和数据迁移。方便做图片访问请求的负载均衡,方便应用各种缓存策略(HTTP Header、Proxy Cache 等),也更加方便迁移到 CDN。而且图片访问是很消耗服务器资源的(因为会涉及到操作系统的上下文切换和磁盘 I/O 操作),分离出来以后,Web/App 服务器可以更专注发挥动态处理的能力。
缺点:单机存在性能瓶颈,容灾、垂直扩展性差。
分布式文件服务器
特点:分布式文件系统一般包括访问的仲裁,文件的存储,文件的容灾三大块。仲裁模块相当于文件服务器的大脑,根据一定的算法来决定文件存储的位置。文件存储模块负责保存文件。容灾模块负责文件数据的相互备份。
优点:弹性伸缩,性能优越,扩展性强,可靠性高。
缺点:系统复杂度稍高,需要更多服务器。
FastDFS 简介
FastDFS 就是我们上述所说的专用分布式文件系统,接下来我们就详细了解它的核心概念,架构体系及环境的搭建与使用。
FastDFS 是基于 C 语言开发的,是一个轻量级开源的高性能分布式文件系统。主要功能有:文件存储、文件同步、文件访问(文件上传/下载),解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。FastDFS 特别适合中大型网站以文件为载体的在线服务,适合存储 4KB ~ 500MB 之间的小文件,如照片共享网站、视频共享网站(图片、文档、音频、视频等等)。
FastDFS 是一款国产开源软件,作者余庆,项目开源地址 Github:https://github.com/happyfish100/fastdfs 官方论坛:
FastDFS 架构
Client
客户端,实现文件上传下载的服务器,就是我们自己的项目所部署在的服务器。通过专有接口,使用 TCP/IP 协议与跟踪服务器或存储服务器进行数据交互。FastDFS 向使用者提供基本文件访问接口,比如 upload、download、append、delete 等,以客户端库的方式提供给用户使用。
Tracker Server
跟踪服务器,负责文件访问的调度和负载均衡,负责管理所有的 Storage Server 和 group 组/卷。
Storage Server
存储服务器,负责文件存储,文件同步/备份,提供文件访问接口,文件元数据管理。以 group 为单位,每个 group 内可以有多台 Storage Server,数据互为备份,达到容灾的目的。每个 Storage 在启动以后会主动连接 Tracker,告知自己所属 group 等存储相关信息,并保持周期性心跳。
Group
组, 也可称为 Volume 卷。同组内服务器上的文件是完全相同的,同一组内的 Storage Server 之间是对等的,文件上传、删除等操作可以在任意一台 Storage Server 上进行。
Metadata