FastDFS:01---分布式存储概述、fastdfs入门介绍
一、文件系统概述
-
文件系统一般分为以下几种:
- ①操作系统文件系统:是对磁盘文件的组织形式。例如nfs、ext3、ext4等
- ②用户态文件系统:实现在用户空间的文件系统框架。例如fuse等
- ③分布式文件系统:fastdfs、gfs、tfs等
二、分布式存储技术对比
- 普通存储方案:Rsync、DAS(IDE/SATA/SAS/SCSI 等块)、NAS(NFS、CIFS、SAMBA 等文件系统)、 SAN(FibreChannel,iSCSI, FoE 存储网络块),其他Openfiler、FreeNas(基于ZFS快照复制)
- 由于生产环境中往往由于对存储数据量很大,而SAN存储价格又比较昂贵,因此大多会选择分布式存储来解决以下问题:
- 1. 海量数据存储问题
- 2. 数据高可用问题(冗余备份)问题
- 3. 较高的读写性能和负载均衡问题
- 4. 支持多平台多语言问题
- 5. 高并发问题
- 几种常见分布式存储对比:
FastDFS | TFS | MFS | HDFS | Ceph | MogileFS | ClusterFS | |
适合类型 | 建议 4KB~500MB | 大小文件 | 小于 64KB 性能不高 | 大文件 | 对象、文 件、块 | 海量小图片,效率比 MFS 高 | 适合大文件存储 |
文件分布 | 小文件合并存储,不分片处 理 | 小文件合并,以 Block 组织 分片 | 文件分片 | 大 文 件 分 块 分片存储 | OSD 一 主 多从 | AFR(raid1) Stripe(raid0) DHT(弹性哈希) | |
系统性能 |
1.很高(未使用数据库),文 件访问点对点,不经 tracker 中转 2.无法动态调整磁盘空间负 载 3.客户端需记录存储信息 |
1. 主从 NameServer(由 HA agent 实现高可用) 2.DataServer、支持异地灾 备 3. 客户端需记录存储信息 | Master 相对占内存 | AvatarNod e/BackupN ode 两种 HA 方案 | 通 过 CRUSH 算 法 分 布式 元数据, 不 太 成熟 基 于 Btrfs | 高(MySQL 存储文件索引信 息,文件同步由 tracker 调 度中转) | 无元数据服务器 |
复杂度 | 简 单 (tracker 和 storage 两个角色) | 部署较复杂 | 包 含 master 、 metalogger 、 chunkserver 三 个 角色 | NameNode 和 DataNode 角 色 | 复杂 | 一般(tracker、storage 和 存储文件信息的 MySQL) | 简单 |
是否支持 FUSE | 不支持 | 不支持 | 支持 | 支持 | 支持 | 需要 mount-mogilefs 支 持 | 支持 |
是否支持 POSIX | 不支持 | 不支持 | 支持 | 支持 | 支持 | 不支持 | 支持 |
备份机制 | 分组组内冗余 | Block 存储多份,主辅集群 灾备 | 多点备份,动态冗 余 | 多副本 | 多副本 | 动态冗余 | 镜像 |
通讯协议接口 | 原生 API、HTTP | 原生 API、HTTP | 使用 fuse 挂载 | 原生 API、使 用 httpfs 提 供 HTTP接口、 Thrift | 原生 API | 原生 API、HTTP | IP/RDMA |
活跃度 | 国内使用较多 | 较少 | 较多 | 较多 | 较少 | 文档较少 | 使用较多 |
文件附加属性 | 支持 | 支持 | 支持 | 不支持 | 支持 | ||
去重性 | 依赖 FastDHT | 去重接口结合 Tair | 结 合MapReduce | 不支持 | 依赖 dedup xlator | ||
语言 | C 语言 | C++ | Perl 语言 | Java 语言 | C++ | Perl 语言 | C 语言 |
缺点 |
1. 服 务器配 置不统 一 无 法动态 调整磁 盘 空间负载压力 2. 客 户端需 记录存 储 信息 |
1. 目 前还 不 太 成 熟 , 基于 Btrfs |
三、FastDFS介绍
- FastDFS 是一款开源的、分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发
- 它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载、文件删除)等,解决了大容量存储和负载均衡的问题
- FastDFS 是通过纯 C 实现,支持 Linux, FreeBSD 等 Unix 系统类 Google FS,不是通用的文件系统,只能够通过专有 API 访问,目前提供了C,Java 和 PHP API 为互联网应用量身定做
- 追求高性能和高扩展性 FastDFS 可以看做是基于文件的 key-value 存储系统,称为分布式文件存储服务更为合适。适合存储 4KB~500MB 之间的小文件,如图片网站、短视频网站、文档、app 下载站等,UC、京东、支付宝、迅雷、酷狗等都有使用,其中 UC 基于 FastDFS 向用户提供网盘、广告和应用下载的业务的存储服务
- FastDFS 与 MogileFS、HDFS、TFS 等都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务
- 开源地址:https://github.com/happyfish100/fastdfs/
- 旧地址:https://code.google.com/archive/p/fastdfs/
- 相关文档:http://www.csource.org/
四、FastDFS架构
- 详情参阅后面的文章:https://blog.****.net/qq_41453285/article/details/107150127
-
我们以一个Client端上传文件为例:
- ①首先客户端 client 发起对 FastDFS 的文件传输动作,是通过连接到某一台 Tracker Server 的指定端口来实现的
- ②Tracker Server 根据目前已掌握的信息,来决定选择哪一台 Storage Server ,然后将这个 Storage Server 的地址等信息返回给 client
- ③然后 client 再通过这些信息连接到这台 Storage Server,将要上传的文件传送到给 Storage Server 上
-
FastDFS 服务端有两个重要角色:
- 跟踪器(tracker):跟踪器主要做调度工作,在访问上起负载均衡的作用
- 存储节点(storage):存储节点存储文件,完成文件管理的所有功能