1、fastDFS简介
FastDFS是一个轻量级的开源分布式文件系统
FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡
FastDFS实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储 支持存储服务器在线扩容 支持相同内容的文件只保存一份,节约磁盘空间
FastDFS只能通过Client API访问,不支持POSIX访问方式
FastDFS特别适合大中型网站使用,用来存储资源文件(如:图片、文档、音频、视频等等)
2、系统架构
只有两部分:tracker和storage
3、文件上传下载
文件上传:
1. client询问tracker上传到的storage,不需要附加参数;
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件上传
文件下载:
1. client询问tracker下载文件的storage,参数为文件标识(组名和文件名);
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件下载
4、相关术语
Tracker Server:跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。记录storage server的状态,是连接Client和Storage server的枢纽。
Storage Server:存储服务器,文件和meta data都保存到存储服务器上
group:组,也可称为卷。同组内服务器上的文件是完全相同的 文件标识:包括两部分:组名和文件名(包含路径)
meta data:文件相关属性,键值对(Key Value Pair)方式,如:width=1024,heigth=768
5、数据同步机制
同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行;
文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器;
源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;
上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器
6、通信协议
协议包由两部分组成:
header和body header共10字节,格式如下:
8 bytes body length
1 byte command
1 byte status
body数据包格式由取决于具体的命令,body可以为空
7、目录结构
tracker目录:
storage目录:
8、存储方式对比
指标
FastDFS
mogileFS
系统简洁性
简洁
只有两个角色:tracker和storage
一般
有三个角色:tracker、storage和存储文件信息的mysql db
系统性能
很高(没有使用数据库,文件同步直接点对点,不经过tracker中转)
高(使用mysql来存储文件索引等信息,文件同步通过tracker调度和中转)
系统稳定性
高(C语言开发,可以支持高并发和高负载)
一般(Perl语言开发,高并发和高负载支持一般)
RAID方式
分组(组内冗余),灵活性较大
动态冗余,灵活性一般
通信协议
专有协议
下载文件支持HTTP
HTTP
技术文档
较详细
较少
文件附加属性(meta data)
支持
不支持
相同内容文件只保存一份
支持
不支持
下载文件时支持文件偏移量
支持
不支持
指标 | FastDFS | NFS | 集中存储设备 如NetApp、NAS |
线性扩容性 | 高 | 差 | 差 |
文件高并发访问性能 | 高 | 差 | 一般 |
文件访问方式 | 专有API | POSIX | 支持POSIX |
硬件成本 | 较低 | 中等 | 高 |
相同内容文件只保存一份 | 支持 | 不支持 | 不支持 |
拓展:
各种分布式文件系统简介及适用场景: