分布式文件存储FastDFS(一)初识FastDFS
一、FastDFS简单介绍
FastDFS是一款开源的、分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发。作为一个分布式文件系统,它对文件进行管理。功能包括:文件存储、文件同步、文件訪问(文件上传、文件下载)等,攻克了大容量存储和负载均衡的问题,特别适合中小文件(建议范围:4KB < file_size <500MB),对以文件为载体的在线服务,如相冊站点、视频站点等等具有显著的效果。
二、FastDFS架构
FastDFS由client,跟踪服务器和存储服务器构成,基本架构例如以下图所看到的。
Storage Server
Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包括多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置同样,以免造成存储空间的浪费。
以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比方将不同应用数据存到不同的group就能隔离应用数据,同一时候还可依据应用的訪问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同一时候当group内有机器坏掉时,数据恢复仅仅能依赖group内地其它机器,使得恢复时间会非常长。
group内每一个storage的存储依赖于本地文件系统,storage可配置多个数据存储文件夹。比方有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个文件夹都配置为storage的数据存储文件夹。
storage接受到写文件请求时。会依据配置好的规则(后面会介绍),选择当中一个存储文件夹来存储文件。
为了避免单个文件夹下的文件数太多,在storage第一次启动时。会在每一个数据存储文件夹里创建2级子文件夹,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到当中某个子文件夹下,然后将文件数据直接作为一个本地文件存储到该文件夹中。
Tracker Server
Tracker是FastDFS的协调者,负责管理全部的storage server和group。每一个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳。tracker依据storage的心跳信息,建立group==>[storage serverlist]的映射表。
Tracker须要管理的元信息非常少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不须要持久化不论什么数据,这样使得tracker非常easy扩展,直接添加tracker机器就可以扩展为tracker cluster来服务,cluster里每一个tracker之间是全然对等的,全部的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。
Client
client,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。
三、FastDFS的存储策略
为了支持大容量,存储节点(服务器)採用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成。卷与卷之间的文件是相互独立的,全部卷的文件容量累加就是整个存储系统中的文件容量。一个卷能够由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是同样的。卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中添加服务器时,同步已有的文件由系统自己主动完毕,同步完毕后。系统自己主动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,能够动态加入卷。仅仅须要添加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
四、FastDFS的上传过程
FastDFS向使用者提供基本文件訪问接口,比方upload、download、append、delete等,以client库的方式提供给用户使用。
依据前边的解说。我们知道Storage Server会定期的向Tracker Server发送自己的存储信息。当Tracker Server Cluster中的Tracker Server不止一个时,各个Tracker之间的关系是对等的,所以client上传时能够选择随意一个Tracker。
当Tracker收到client上传文件的请求时,会为该文件分配一个能够存储文件的group。当选定了group后就要决定给client分配group中的哪一个storage server。当分配好storage server后,client向storage发送写文件请求,storage将会为文件分配一个数据存储文件夹。然后为文件分配一个fileid。最后依据以上的信息生成文件名称存储文件。文件名称的格式例如以下:
五、FastDFS的文件同步
写文件时。client将文件写至group内一个storage server即觉得写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其它的storage server。
每一个storage写文件后,同一时候会写一份binlog,binlog里不包括文件数据,仅仅包括文件名称等元信息,这份binlog用于后台同步,storage会记录向group内其它storage同步的进度。以便重新启动后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内全部server的时钟保持同步。
storage的同步进度会作为元数据的一部分汇报到tracker上。tracke在选择读storage的时候会以同步进度作为參考。
比方一个group内有A、B、C三个storage server,A向C同步到进度为T1 (T1曾经写的文件都已经同步到B上了),B向C同步到时间戳为T2(T2 > T1),tracker接收到这些同步进度信息时,就会进行整理。将最小的那个做为C的同步时间戳。本例中T1即为C的同步时间戳为T1(即全部T1曾经写的数据都已经同步到C上了);同理,依据上述规则,tracker会为A、B生成一个同步时间戳。
六、FastDFS的文件下载
clientuploadfile成功后,会拿到一个storage生成的文件名称,接下来client依据这个文件名称就可以訪问到该文件。
跟upload file一样。在downloadfile时client能够选择随意tracker server。tracker发送download请求给某个tracker,必须带上文件名称信息。tracke从文件名称中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求。
本文是在阅读某大神的文章时进行的整理和摘录,同一时候加入了自己的一些思考,以下附上大神的链接:http://blog.yunnotes.net/index.php/fastdfs_design/
分布式文件存储FastDFS(一)初识FastDFS的更多相关文章
- 分布式文件存储:FastDFS简单使用与原理分析
引言 FastDFS 属于分布式存储范畴,分布式文件系统 FastDFS 非常适合中小型项目,在我接手维护公司图片服务的时候开始接触到它,本篇文章目的是总结一下 FastDFS 的知识点. 用了 2 ...
- 我心中的核心组件(可插拔的AOP)~分布式文件上传组件~基于FastDFS
回到目录 一些概念 在大叔框架里总觉得缺点什么,在最近的项目开发中,终于知道缺什么了,分布式文件存储组件,就是缺它,呵呵,对于分布式文件存储来说,业界比较公认的是FastDFS组件,它自己本身就是集群 ...
- .Net平台下,分布式文件存储的实现
遇到的问题 对于Web程序,使用一台服务器的时候,客户端上传的文件一般也都是存储在这台服务器上.但在集群环境中就行不通了,如果每个服务器都存储自己接受到的文件,就乱套了,数据库中明明有这个附件的记录, ...
- 【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用
[网络爬虫入门05]分布式文件存储数据库MongoDB的基本操作与爬虫应用 广东职业技术学院 欧浩源 1.引言 网络爬虫往往需要将大量的数据存储到数据库中,常用的有MySQL.MongoDB和Red ...
- 分布式文件存储数据库 MongoDB
MongoDB 简介 Mongo 并非芒果(Mango)的意思,而是源于 Humongous(巨大的:庞大的)一词. MongoDB 是一个基于分布式文件存储的 NoSQL 数据库.由 C++ 语言编 ...
- (转) 分布式文件存储FastDFS(一)初识FastDFS
http://blog.csdn.net/xingjiarong/article/details/50559849 一.FastDFS简介 FastDFS是一款开源的.分布式文件系统(Distribu ...
- Centos7部署分布式文件存储(Fastdfs)
目录 FastDFS介绍 楼主目标:前可H5撩妹,后可Linux搞运维 环境:Centos7 软件: 软件链接: 安装前所有准备,上传软件到Centos7上的/opt的目录下 安装依赖软件和类库(安装 ...
- 1Nginx+fastdfs分布式文件存储
准备,将所需的软件传到服务器上,服务器的列表如下: fastdfs-nginx-module_v1.15.tar.gz FastDFS_v4.06.tar.gz libevent-2.0.21- ...
- 分布式文件存储FastDFS(七)FastDFS配置文件具体解释
配置FastDFS时.改动配置文件是非常重要的一个步骤,理解配置文件里每一项的意义更加重要,所以我參考了大神的帖子,整理了配置文件的解释.原帖例如以下:http://bbs.chinaunix.net ...
随机推荐
- ZBrush实用插件ZAppLink简介
ZAppLink是ZBrush版本推出时被评为最值得期待的插件.事实证明,ZAppLink的出现让工具与工具之间有了交流,搭起软件与软件的沟通桥梁. ZAppLink插件专用于扩展ZBrush®的绘制 ...
- shell 整数
[] (())和[[]] -eq == 或= -ne != -gt > -ge >= -lt < -le <= [root@web02 ~ ...
- HTTP——学习笔记(8)
HTTP中的一些协议内容会限制某些网站的功能使用 比如,Facebook这类的社交网站,需要实时地观察到海量用户公开发布的内容,而HTTP中的以下标准就会成为瓶颈: 一条连接上只可发送一个请求 请求只 ...
- Maven集成jetty插件
本机环境 JDK 7 Maven 3.2 Jetty 8.1.9 Eclipse Luna pom.xml 配置 在你的 pom.xml 文件里加入 jetty 插件的描写叙述信息(查看Jetty很多 ...
- sas数据导入终极汇总-之中的一个
将数据文件读入SAS --DATA Step / PROC IMPORT 1.将SAS文件读入SAS-- data sasuser.saslin; set "F:\sa ...
- 查看CPU是几核
命令1 (查看有几个CPU):cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 命令2 (每个CPU几核):cat /p ...
- Linux 经常使用快捷键
桌面下: Alt+F5 取消最大化窗体 Alt+F9 最小化窗体 Alt+F10 最大化窗体 Alt+空格 打开窗体的控制菜单 (点击窗体左上角图标出现的菜单) ctl+r ...
- nj11--http
概念:Node.js提供了http模块.其中封装了一个高效的HTTP服务器和一个建议的HTTP客户端. http.server是一个基于事件的HTTP服务器.内部有C++实现.接口由JavaScrip ...
- thinkPHP的模板是做什么用的
thinkPHP的模板是做什么用的 问题 为什么PHP中ThinkPHP有做类似模板引擎的东西?smarty也是?这些到底有何用? 我是真没发现它们的用处在哪里?分离了前端和PHP的依赖?HTML文件 ...
- python-搭建django环境
python-搭建django环境 标签(空格分隔): python Django简介 Django,发音为[`dʒæŋɡəʊ],是用python语言写的开源web开发框架,并遵循MVC设计.劳伦斯出 ...