分享知识-快乐自己:FastDFS详解
在使用fdfs之前,需要对其有一定的了解,这篇文章作为准备篇,将针对fdfs的简介,功能性,使用场景等方面进行介绍
一):起源
淘宝网开放平台技术部资深架构师余庆先生首先回顾了自己在Yahoo工作时的经历,他表示Yahoo当时的相册和论坛系统整个结构都进行了针对大规模分布式存储和并发操作的改进。
余庆从整个分布式文件系统的发展说起,谈到了FastDFS文件系统的概念和具体优缺点。
据了解,yahoo论坛和相册以前一直面临着扩容问题,同步延迟问题,同步失败问题等。其pat同步、定式扫描以及farm式集中式存储的热备都带来立刻高昂的成本消耗。
2008年底,处于减低成本的考虑,中国yahoo采用分布式文件系统替换了古老的YMDB系统。
二):简介
1、FastDFS是一款类似Google FS的开源分布式文件系统,是纯C语言开发的。
它是一个开源的轻量级分布式文件系统,对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、下载)等。
可参考其作者淘宝架构师余庆同学的github地址:https://github.com/happyfish100
2、解决了大容量存储(大量存储,不是大文件存储)和负载均衡的问题,高度追求高性能和扩展性,其可安装的插件模块非常多,包括Nginx模块(提供文件访问的负载均衡)。
3、支持横向组拓展,支持同步热备,支持token防盗链等。
4、fdfs不是通用文件系统,访问需要走api,可以在作者的github上找到对应各平台的api,也可以根据源码定制自己的api,目前支持的平台有java,php,c,python。
三):功能介绍
1.常用linux命令有:
upload 上传文件,
upload_appender 上传appender文件,后续可已对其进行append操作,
upload_slave 上传从文件,
download 下载文件
delete 删除文件
append:在已有文件后追加内容
set_metadata:设置文件附加属性
get_metadata:获取文件附加属性
具体命令使用方法自行百度,这里篇幅有限不在赘述。
四):架构浅析
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,按照存储架构将文件进行分组存储,以及访问对应组内文件,生成文件id等工作。Tracker server在内存中记录分组和Storage server的状态等信息,不记录文件索引信息,占用的内存量很少。另外,客户端(应用)和Storage server访问Tracker server时,Tracker server扫描内存中的分组和Storage server信息,然后给出应答。由此可以看出Tracker server非常轻量化,不会成为系统瓶颈。
storage负责完成文件管理的所有功能,包括存储、同步和提供存取接口。
整个架构示意图如下:

1.FastDFS采用了分组存储(group)的方式。存储系统由一个或多个group组成,group与group之间的文件是相互独立的,所有group的文件容量累加就是整个存储系统中的文件容量。
2.一个group可以由一台或多台存储服务器组成,一个group下的存储服务器中的文件都是相同的,group中的多台存储服务器起到了冗余备份和负载均衡的作用。
3.一个组的存储容量为该组内存储服务器容量最小的那个,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步。
4.在group中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
5.当存储空间不足或即将耗尽时,可以动态添加group。只需要增加一台或多台服务器,并将它们配置为一个新的group,这样就扩大了存储系统的容量。
6.FastDFS会直接使用OS的文件系统存储文件,并不会对文件进行分块存储(HDFS),文件由组名和文件名进行标识。
以下是经验之谈,也会有些帮助:
1.同组之间的storage服务器的端口必须一致(23000)
2.一台服务器上可以有多个组(group),但是不能有同组的多个storage服务。
3.如果有使用nginx,则可以不用安装libevent插件,libevent是作为fdfs的http服务的依赖插件,且在5.x之后的版本已经移除这个模块。
4.启动storage server时,一直处于僵死状态.启动storage server,storage将连接tracker server,如果连不上,将一直重试。
直到连接成功,启动才算真正完成!如果集群中有2台tracker server,而其中一台tracker没有启动,可能会导致storage server一直处于僵死状态
分享知识-快乐自己:FastDFS详解的更多相关文章
- FastDFS详解
1.FastDFS是什么 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过 专有API对文件进行存取访问 ...
- 分布式文件系统FastDFS详解
上一篇文章<一次FastDFS并发问题的排查经历>介绍了一次生产排查并发问题的经历,可能有些人对FastDFS不是特别的了解,因此计划写几篇文章完整的介绍一下这个软件. 为什么要使用分布式 ...
- 分享知识-快乐自己:Hibernate 中Criteria Query查询详解
1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Cr ...
- nginx与fastdfs配置详解与坑
nginx与fastdfs配置详解与坑 环境 ubantu19.04 fastdfs-5.11 fastdfs-nginx-module-1.20 libfastcommon-1.0.39 nginx ...
- FastDFS分布式文件系统配置文件详解
一.tracker配置文件详解: # is this config file disabled# false for enabled# true for disableddisabled=false# ...
- 分享知识-快乐自己:FastDFS 图片服务器的搭建
使用一台虚拟机来模拟,只有一个Tracker.一个Storage服务,配置nginx访问图片. 1):安装依赖包 yum -y install zlib zlib-devel pcre pcre-de ...
- 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)
如约而至,Java 10 正式发布! 3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- EasyPR--中文开源车牌识别系统 开发详解(1)
在上篇文档中作者已经简单的介绍了EasyPR,现在在本文档中详细的介绍EasyPR的开发过程. 正如淘宝诞生于一个购买来的LAMP系统,EasyPR也有它诞生的原型,起源于CSDN的taotao123 ...
随机推荐
- MAC OSX--docker
http://www.cnblogs.com/yjmyzz/p/docker-install-tutorial.html http://www.cnblogs.com/yjmyzz/p/docker- ...
- django博客项目11
.....................
- Python迭代对象与迭代器
一.迭代对象 1.概念 迭代对象:可以直接作用于for循环的对象统称为可迭代对象:Iterable. 2.可以直接作用于for循环的数据类型 (1)集合类数据类型,如list, tuple, dict ...
- EJB远程客户端和本地客户端
在客户端中使用企业bean 企业bean的客户端通过依赖注入或JNDI查询的方式获得对企业bean实例的引用. 依赖注入是获得对企业bean实例的引用的最简便的方法. (紧耦合的bean之间相互依赖, ...
- disruptor 高并发编程 简介demo
原文地址:http://www.cnblogs.com/qiaoyihang/p/6479994.html disruptor适用于大规模低延迟的并发场景.可用于读写操作分离.数据缓存,速度匹配(因为 ...
- 简明python教程七----面向对象的编程(下)
继承:类之间的类型和子类型关系 代码重用:SchoolMember类被称为 基本类或超类,而Teacher和Student类被称为导出类或者子类 #!/usr/bin/python #Filename ...
- SQL LEFT JOIN
SQL LEFT JOIN 关键字 SQL LEFT JOIN 关键字 LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有 ...
- MAC下配置MAVEN环境变量配置
MAVEN环境变量的配置: 第一步:在MAVEN的官网下载MAVEN.http://maven.apache.org/download.cgi,我这里下载的是apache-maven-3.39-bin ...
- springmvc 标签
https://www.baeldung.com/spring-mvc-form-tags 1. Overview In the first article of this series we ...
- 437. Path Sum III(路径可以任意点开始,任意点结束)
You are given a binary tree in which each node contains an integer value. Find the number of paths t ...