FastDFS(一)分布式文件系统
什么是文件系统
文件数据是如何存储的??
分布式文件系统
-
一台电脑存储量有限,并且并发吞吐量也有限,如何提高性能?
-
一吨货物,我要运送到吐鲁番:
- 1个人运,不敢想象
- 50个人运,太难了
- 500个人运,每个人都很轻松
这里面有集群的概念,也有分布式的概念,二者不要混淆
-
分布式:不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署不同的服务器上。解决高并发的问题
-
集群:同一个业务部署在多台服务器上,提高系统的高可用
-
栗子:
- 小饭馆原来只有一个厨师,切菜洗菜备料一手抓。客人越来越多,一个厨师忙不过来,只能再请一个厨师,两个厨师都能炒菜,也就是两个厨师的作用是一样的,这样,两个厨师的关系就是“集群”
- 为了让厨师专心炒菜,把菜炒到极致,又请了配菜师负责切菜,备料等工作。厨师和备菜师的关系是“分布式”
- 一个备菜师忙不过来,要提供两份食材给两个厨师,又请了一个备菜师,两个备菜师的关系又是“集群”
主流的分布式文件系统
HDFS
(Hadoop Distributed File System)Hadoop 分布式文件系统;
高容错的系统,适合部署到廉价的机器上;
能提供高吞吐量的数据访问,非常适合大规模数据应用;
HDFS采用主从结构,一个HDFS是由一个name节点和N个data节点组成;
name节点储存元数据,一个文件分割成N份存储在不同的data节点上。
GFS
Google File System
可扩展的分布式文件系统,用于大型的,分布式的,对大量数据进行访问的应用;
运行于廉价的普通硬件上,可以提供容错功能;
它可以给大量的用户提供总体性能较高的服务;
GFS采用主从结构,一个GFS集群由一个master和大量的chunkserver(分块服务器)组成;
一个文件被分割若干块,分散储存到多个分块server中
FastDFS
- 由淘宝资深架构师余庆编写并开源
- 专为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务
- HDFS,GFS等都是通用的文件系统,他们的优点是开发体验好,但是系统的复杂度较高,性能也一般
- 相比之下,专用的分布式文件系统体验差,但是复杂度低,性能也高,尤其fastDFS特别适合图片,小视频等小文件,因为fastDFS对文件是不分割的,所以没有文件合并的开销
- 网络通信用socket,速度快
工作原理
fastDFS包含Tracker Server和Storage Server;
客户端请求Tracker Server进行文件的上传与下载;
Tracker Server调度Storage Server最终完成上传与下载。
Tracker (译:追踪者)
- 作用是负载均衡和调度,它管理着存储服务(Storage Server),可以理解为:“大管家,追踪者,调度员”
- Tracker Server可以集群,实现高可用,策略为“轮询”
Storage (译:仓库; 贮存器)
- 作用是文件存储,客户端上传的文件最终存储到storage服务器上
- storage集群采用分组的方式,同组内的每台服务器是平等关系,数据同步,目的是实现数据备份,从而高可用,而不同组的服务器之间是不通信的
- 同组内的每台服务器的存储量不一致的情况下,会选取容量最小的那个,所以同组内的服务器之间软硬件最好保持一致
- Storage Server会连接集群中的所有Tracker Server,定时向他们汇报自己的状态,例如:剩余空间,文件同步情况,文件上传下载次数等信息
上传/下载 原理
客户端上传文件后,storage会将文件id返回给客户端
group1/M00/02/11/aJxAeF21O5wAAAAAAAAGaEIOA12345.sh
-
组名:文件上传后,在storage组的名称,文件上传成功后,由storage返回,需要客户端自行保存
-
虚拟磁盘路径:
- storage配置的虚拟路径,在磁盘选项storage_path对应
- storage_path0对应M00
- storage_path1对应M01
-
数据两级目录:
- storage在虚拟磁盘下自行创建的目录
-
文件名:
- 与上传时不同,是用storage根据特定信息生成的,里面包含:storage服务器的ip,创建时间戳,大小,后缀名等信息