文档章节

分布式文件系统FastDFS原理介绍

凯文加内特
 凯文加内特
发布于 2015/04/18 11:26
字数 1534
阅读 4975
收藏 16

在生产中我们一般希望文件系统能帮我们解决以下问题,如:1.超大数据存储;2.数据高可用(冗余备份);3.读/写高性能;4.海量数据计算。最好还得支持多平台多语言,支持高并发。

由于单台服务器无法满足以上要求,这就迫使开发者不得不考虑使用其他方式解决此类问题。分布式文件系统就在这样迫切的需求下孕育而生。

今天为什么把标题定为“分布式文件系统”呢?是因为我想通过此次分享(FastDFS原理介绍),和大家去做更多关于分布式文件系统的研究和分享。我想这项研究应该会是一个“系列”性的专题。在本文之后还计划分享“FastDFS源码分析”,“FastDFS扩容及资源优化”。

——————————————————>我是分隔线<——————————————————————-

什么是FastDFS?

FastDFS是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务,如相册网站、视频网站等等。在UC基于FastDFS开发向用户提供了:网盘,社区,广告和应用下载等业务的存储服务。


FastDFS架构:

FastDFS服务端有三个角色:跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)。

  • tracker server:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。

  • storage server:存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。

  • client:客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。

Tracker Server:跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。
Storage Server:存储服务器(又称数据服务器)。

ps:这样的架构具有以下特点:1.轻量级(相比GFS简化了master角色,不再管理meta数据信息)。2.对等结构。3.分组方式。

FastDFS协议:

FastDFS角色间是基于TCP/IP协议进行通信,协议包格式为:header + body。具体结构如图:

FastDFS各节点间都是通过tcp/ip的方式来进行通信的。
协议包由两部分组成:header和body

上传机制:

同步时间管理:

当一个文件上传成功后,客户端马上发起对该文件下载请求(或删除请求)时,tracker是如何选定一个适用的存储服务器呢?

其实每个存储服务器都需要定时将自身的信息上报给tracker,这些信息就包括了本地同步时间(即,同步到的最新文件的时间戳)。而tracker根据各个存储服务器的上报情况,就能够知道刚刚上传的文件,在该存储组中是否已完成了同步。同步信息上报如下图:

下载机制:

精巧的FID:

说到下载就不得不提文件索引(又称:FID)的精巧设计了。文件索引结构如下图,是客户端上传文件后存储服务器返回给客户端,用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名

ps:

  • 组名:文件上传后所在的存储组名称,在文件上传成功后有存储服务器返回,需要客户端自行保存。一个组下可以有多个storage,我感觉组就是为管理storage的

  • 虚拟磁盘路径:存储服务器配置的虚拟路径,与磁盘选项store_path*对应。

  • 数据两级目录:存储服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。

  • 文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

快速定位文件:

知道FastDFS FID的组成后,我们来看看FastDFS是如何通过这个精巧的FID定位到需要访问的文件。

  1. 通过组名tracker能够很快的定位到客户端需要访问的存储服务器组,并将选择合适的存储服务器提供客户端访问;

  2. 存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。

 

本次分享的主要内容包含:FastDFS各角色的任务分工/协作,文件索引的原理设计以及文件上传/下载操作的流程。通过此次学习我们对FastDFS有了初步的了解,如:

  • FastDFS只有三个角色;且跟踪服务器和存储服务器均不存在单点。

  • 跟踪服务器被动的接收存储服务器汇报,对存储服务器进行分组管理;并为客户端选定适用的存储服务器。同一存储服务器可以同时向多台跟踪服务器汇报状态信息。

  • 存储服务器组内所有存储服务器是对等关系,存储的数据一一对应且相同;所有的存储服务器均是同时在线服务,极大的提高的服务器的使用率,分担了数据访问压力。

 


本文转载自:http://tech.uc.cn/?p=221

凯文加内特
粉丝 340
博文 698
码字总数 110557
作品 0
青岛
后端工程师
私信 提问
FastDFS安装使用实战一(安装篇)

最近在研究负载均衡和集群,其中涉及到一个主要问题是,如何让集群中的real server共享一套文件系统。在网上查到FastDFS,国人(happy fish,感谢他的开源精神)开发的一套轻量级分布式文件系...

凯文加内特
2015/03/30
483
0
CentOS 6.3(64) ---> fastdfs_v4.07 / 实现多服务器

自己闲着没事,在小黑上虚拟了 4 个 centos 64 的系统,用来安装分布式 fastdfs 、 nginx 负载均衡,过程一路艰辛,搞了一个通宵都没弄好,终于在第二天的傍晚终于弄好了,记录一下过程。 有...

shking
2013/09/29
10.8K
27
浅析FastDFS及所遇问题集锦

一、FastDFS简介 FastDFS(最新版本v3.04)是一个开源的轻量级分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过专有API对文件进行存取访问,不支持POSIX接口方...

Edwyn王
2015/11/04
284
0
springboot(十八):使用Spring Boot集成FastDFS

上篇文章介绍了如何使用Spring Boot上传文件,这篇文章我们介绍如何使用Spring Boot将文件上传到分布式文件系统FastDFS中。 这个项目会在上一个项目的基础上进行构建。 1、pom包配置 我们使用...

ityouknow
2018/10/28
0
0
FastDFS安装 --> 测试

自己闲着没事,在小黑上虚拟了 4 个 centos 64 的系统,用来安装分布式 fastdfs 、 nginx 负载均衡,过程一路艰辛,搞了一个通宵都没弄好,终于在第二天的傍晚终于弄好了,记录一下过程。 有...

shking
2013/10/05
465
1

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
13
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
16
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部