分布式文件系统 - FastDFS
分布式文件系统 - FastDFS
别问我在哪里
也许我早已不是我自己,别问我在哪里,我一直在这里。
突然不知道说些什么了...
初识 FastDFS
记得那是我刚毕业后进入的第一家公司,一个技术小白进入到当时的项目组后,在开发中上传用户头像调用了一个据说是叫 FastDFS 的东西,我并不懂是什么,只知道是一个文件服务器,据说还是在 Linux 上部署的,还是多台服务器什么的,还是切片存储、说京东用的就是,反正很厉害的样子,我其实并接触不到这玩意儿,我的任务也只是调用大神们封装好的接口就行了,这可能是我第一次和 FastDFS 的第一次亲密接触。
后来不知道为什么,当时的文件服务器老是出问题,每次图片下载不下来我就低声下气的去找运维说:文件又下载不了了,老大让你重启一下 Storage 服务器
。这时候我也并不知道 Storage服务器
是什么鬼,反正就好像项目一出问题都是程序猿的错,真特么的!!!
FastDFS is an open source high performance distributed file system (DFS). It's major functions include: file storing, file syncing and file accessing, and design for high capacity and load balance.
翻译:FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。
这是余庆老师在他的 Github 上介绍关于 FastDFS 这个开源项目的描述。说的很明白了,这是一个高性能的轻量级开源分布式文件系统,解决了我们日常项目中众所周知的文件存储性能问题,几乎适合市面上所有项目使用,据说好多家你知道的大公司也在使用,甚至你使用的各大网盘公司也在使用(尽管最近多家网盘公司关闭了),反正就是特别好用。感谢余庆老师对开源世界的无私奉献,这是余老师的 GitHub 地址: https://github.com/happyfish100/fastdfs
试着简单了解一下
大家都在用,肯定错不了。正好最近公司想搭建自己的文件服务器,好像据说是原来用的七牛产生了巨额流量费用,领导安排了解一下这个开源分布式文件系统。了解一个东西,我们就要进入她的内部,人也一样。那我们首先来看一下他的内部是怎么工作或者说设计的吧!
FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和
客户端(Client)。
- Tracker Server: 跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server
和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。 - Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。
- Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。
这里免不了放一张余庆老师介绍 FastDFS 的 PPT 中的一张架构图,清晰的说明了上述职责及关系:
上述架构优点:1.高可靠性:无单点故障 2.高吞吐性:只要 Group 足够多,数据流量将足够分散。
那么怎么上传下载以及同步文件这么操作呢?我在这就不详细说全部流程了,大概上传流程就是客户端发送上传请求到Tracker Server
服务器,接着Tracker Server
服务器分配group
和Storage Server
,当然这是有一定规则的,选择好Storage Server
后再根据一定规则选择存储在这个服务器会生成一个file_id
,这个file_id
包含字段包括:storage server ip、文件创建时间、文件大小、文件 CRC32 校验码和随机数;每个存储目录下有两个 256 * 256 个子目录,后边你会知道一个Storage Server
存储目录下有好多个文件夹的,storage 会按文件file_id
进行两次 hash ,路由到其中一个子目录,然后将文件存储到该子目录下,最后生成文件路径:group 名称、虚拟磁盘路径、数据两级目录、file_id和文件后缀就是一个完整的文件地址。
可能我理解的也不是很彻底,下载、同步操作我不写了,这里有一篇文章 分布式文件系统FastDFS设计原理 讲解的很详细,我就不班门弄斧了,大家可以点击去看看。
下面我要做什么?
接下来我可能会安装配置一下 FastDFS 服务,试着搭建一个分布式文件服务器,我试着把整体的详细步骤都记录下来,对以后项目中使用做技术储备或者说让自己以后翻起来也简单一些。可能有时候说不定就帮助到你了...
我的搭建环境是:
- 操作系统: CentOS 7 或 CentOS 6.8
- FastDFS: fastdfs-5.05 、 fastdfs-nginx-module-v1.16 、 libfastcommon-v1.0.7
- Nginx : nginx-1.10.1
应该都是截至目前最新版本了,可能和你网上能搜到的 4.05 、4.06 甚至 2.? 的版本步骤不一样,我大概会分下面两篇具体的文章来记录这个过程:
我保证这也行是目前 FastDFS 最新最稳定最简单坑最少的一个配置安装部署教程了。期间我也会把我踩的坑都放出来,我保证大家照着做就几乎不会有坑。其实我在写这篇文章的时候已经踩了好多坑了,哈哈...
总结一下
FastDFS 是一个由 C 语言实现的开源轻量级分布式文件系统,作者余庆(happyfish100),支持 Linux、FreeBSD、AID 等 Unix 系统,解决了大数据存储和读写负载均衡等问题,适合存储 4KB~500MB 之间的小文件,如图片网站、短视频网站、文档、app 下载站等,UC、京东、支付宝、迅雷、酷狗等都有使用。
再次感谢余庆老师对开源世界的无私奉献,这是余老师的 GitHub 地址: https://github.com/happyfish100/
分布式文件系统 - FastDFS的更多相关文章
- 【架构设计】分布式文件系统 FastDFS的原理和安装使用
本文地址 分享提纲: 1.概述 2. 原理 3. 安装 4. 使用 5. 参考文档 1. 概述 1.1)[常见文件系统] Google了一下,流行的开源分布式文件系统有很多,介绍如下: -- mo ...
- 网站文件系统发展&&分布式文件系统fastDFS
网站文件系统发展 1.单机时代的图片服务器架构 初创时期由于时间紧迫,开发人员水平也很有限等原因.所以通常就直接在website文件所在的目录下,建立1个upload子目录,用于保存用户上传的图片文件 ...
- 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署
少啰嗦,直接装 看过上一篇分布式文件系统 - FastDFS 简单了解一下的朋友应该知道,本次安装是使用目前余庆老师开源的最新 V5.05 版本,是余庆老师放在 Github 上的,和目前你能在网络上 ...
- 分布式文件系统 - FastDFS 简单了解一下
别问我在哪里 也许我早已不是我自己,别问我在哪里,我一直在这里. 突然不知道说些什么了... 初识 FastDFS 记得那是我刚毕业后进入的第一家公司,一个技术小白进入到当时的项目组后,在开发中上传用 ...
- 分布式文件系统 - FastDFS 配置 Nginx 模块及上传测试
也不说废话,直接干 上一篇 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署 中安装了 FastDFS 后,并配置启动了 Tracker 和 Storage 服务,已经可以上传文件 ...
- [转]分布式文件系统FastDFS架构剖析
[转]分布式文件系统FastDFS架构剖析 http://www.programmer.com.cn/4380/ 文/余庆 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实 ...
- 分布式文件系统FastDFS设计原理
原文地址: http://blog.chinaunix.net/uid-20196318-id-4058561.html FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker ...
- 分布式文件系统 FastDFS Ceph
分布式文件系统 FastDFS Cephhttp://www.oschina.net/p/fastdfshttp://www.oschina.net/p/ceph FastDFS 的 Go 客户端 f ...
- 分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置(单点安装)——第一篇
分布式文件系统 FastDFS 5.0.5 & Linux CentOS 7 安装配置(单点安装)--第一篇 简介 首先简单了解一下基础概念,FastDFS是一个开源的轻量级分布式文件系统,由 ...
随机推荐
- 十大Intellij IDEA快捷键(转)(2015年06月15日)
注:本文转自:http://blog.csdn.net/dc_726/article/details/42784275 Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow ...
- 关于async与await的FAQ 转
(译)关于async与await的FAQ 传送门:异步编程系列目录…… 环境:VS2012(尽管System.Threading.Tasks在.net4.0就引入,在.net4.5中为其增加了更丰富的 ...
- Part 14 ng hide and ng show in AngularJS
ng-hide and ng-show directives are used to control the visibility of the HTML elements. Let us under ...
- Part 8 Coalesce function in sql server
- Part 45 to 47 Talking about Enums in C#
Part 45 C# Tutorial Why Enums Enums are strongly typed constants. If a program uses set of integ ...
- Struts2_概述
- 数组的join()函数操作
join()函数的功能为:把数组的所有元素放入一个字符串,元素通过指定的分隔符分隔. 设置这样的数组操作 var a = []; a.push(1);a.push(3.1415926);a.push( ...
- hdu 六度分离 floyd
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1869 题意分析:比较简单的最短路算法,最后只需判断最远两点距离是否大于7即可. /*六度分离 Time ...
- ASCII 码表
下面的 ASCII 码表包含数值在0-127之间的字符的十进制.八进制以及十六进制表示. 十进制 八进制 十六进制 字符 描述 0 0 00 NUL 1 1 01 SOH start of hea ...
- wix xslt for adding node
Using xslt to add new node item to wix source code. Original wix code: <Fragment> <Director ...