文件管理系统FastDFS详解
什么是FastDFS
很多以文件为载体的在线服务,如相册网站、视频网站等,都需要对文件进行管理,包括文件的存储、同步、访问(文件上传、文件下载)等,同时肯定会伴随着大容量存储和负载均衡的问题。
在日常的一些项目中,比如做用户的KYC认证等,也需要存储文件、图片、视频等。此时可以选择使用OSS云服务,也可以自己构建相对专业的文件管理系统。
FastDFS是一个开源的轻量级分布式文件系统,用于解决大数据量存储和负载均衡等问题,并需要通过专有API进行访问。满足大容量文件存储问题,并保证高性能和高扩展性。它能够很好的解决上述提到的业务场景。
FastDFS的特性
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
优点:
- 文件不分块存储,文件和系统中的文件一一对应。
- 对文件内容做hash处理,避免出现重复文件,节约磁盘空间。
- 下载文件支持HTTP协议,可基于内置Web Server或外部Web Server。
- 支持在线扩容,动态添加卷。
- 支持文件冗余备份和负载均衡。
- 存储服务器上可以保存文件属性(meta-data)V2.0 网络通信采用libevent,支持大并发访问,整体性能更好。
缺点:
- 直接按文件存储,可直接查看文件内容,缺乏文件安全性。
- 数据同步无校验,存在静默IO问题,降低系统可用性。
- 单线程数据同步,仅适合存储小文件(4KB到500MB之间)。
- 备份数根据存储分卷(分组)决定,缺乏文件备份数设置灵活性。
- 单个挂载点异常会导致整个存储节点下线。
- 缺乏多机房容灾支持。
- 静态的负载均衡机制。
优点与缺点并存,但针对中小型系统已经完全足够使用了。
FastDFS的角色
初次接触或部署FastDFS的朋友往往会有些疑惑,为什么要部署那么多服务才能使用FastDFS。这是由FastDFS的角色构成决定的。
FastDFS系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。
如果通过Http访问,通常情况下,还需要部署Nginx服务。
Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的storage server和group,每个storage在启动后会连接 Tracker,同步自己所属group等信息,并保持周期性心跳。它是客户端和数据服务器交互的枢纽。
Storage Server:存储服务器,主要提供容量和备份服务;以group为单位,每个group内可以有多台storage server,数据互为备份。文件及属性(Meta Data)都保存在该服务器上。
Client:客户端,上传下载数据请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。
下面通过一张图来看看FastDFS的不同角色在整个流转过程中的作用。
上图中Tracker相当于一个调度中心,上传和下载都通过它来进行分配指定。
上面我们提到Nginx,客户端通常会使用Ngnix等静态服务器来调用或者做一部分的缓存。后面搭建环境时便是基于Nginx。
Storage cluster部分,由Volume1、Volume2……VolumeK组成,它们称为卷(或者叫做组),卷与卷之间是平行的关系,可以根据资源的使用情况随时增加,卷内服务器文件相互同步备份,以达到容灾的目的。
上传过程
当服务启动之后,Storage Server会定期的向Tracker Server发送存储信息。如果Tracker Server是集群形式,则每个Tracker之间的关系是对等的,客户端上传时选择任意一个Tracker即可。
整体流程:当客户端请求Tracker进行上传操作时,会获取存储服务器相关信息,主要包括IP和端口。根据返回信息上传文件,通过存储服务器写入磁盘,并返回给客户端file_id、路径信息、文件名等信息。
对应流程图如下:
其中,当Tracker收到客户端上传文件的请求时,会为该文件分配一个可以存储文件的group,当选定了group后就要决定给客户端分配group中的哪一个storage server。
当分配好storage server后,客户端向storage发送写文件请求,storage将会为文件分配一个数据存储目录。然后为文件分配一个fileid,最后根据以上的信息生成文件名存储文件。
生成的文件名基本格式如下:
下载过程
跟上传一样,在下载时客户端可以选择任意Tracker server。
客户端带文件名信息请求Tracker,Tracker从文件名中解析出文件的group、大小、创建时间等信息,然后选择一个storage用来服务处理请求,返回对应文件。
对应流程图如下:
如果是基于Web的http请求,此处的Client可以是Nginx代理服务。下面这张图更加形象的描述了相关的流程。
小结
关于FastDFS的基本特性和原理已经介绍完毕,重点关注三个角色和两个流程,以及将三个角色融入到两个流程中进行分析。明白了这个大的方向之后,至于执行的细节部分就可以逐步了解和掌握。
下一篇文章我们将来介绍基于Docker如何部署FastDFS。关注微信公众号【程序新视界】获得持续更新内容。
原文链接:《文件管理系统FastDFS详解》
程序新视界
公众号“程序新视界”,一个让你软实力、硬技术同步提升的平台
文件管理系统FastDFS详解相关推荐
- BOOT客户管理系统(详解)
BOOT客户管理系统(详解) Github:https://github.com/wz20 Gitee:https://gitee.com/Wang-ZeLXM/boot-crm 本文中的代码不可以直 ...
- 分布式文件系统FastDFS详解-附带视频教程
目录 1.FastDFS教程 2.FastDFS安装 安装FastDFS FastDFS配置文件详解 FastDFS启动 3.FastDFS重启与FastDFS关闭 FastDFS关闭 4.FastD ...
- atitit.mp4 视频文件多媒体格式结构详解
atitit.mp4 视频文件多媒体格式结构详解 1. 一.基本概念1 2. MP4文件概述2 3. mp4是由一个个"box"组成的,2 4. 典型简化mp43 5. Fragm ...
- 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)
Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...
- oracle sap 用友 保险财务系统比较,SAP和用友的财务管理系统比较详解
SAP和用友的财务管理系统比较详解 发表时间:2015-11-30 发布者:奥维奥科技 (一)SAP的财务管理体系 SAP 是基于流程的管理,流程管理是为了客户需求而设计的,一种以规范化的构造端到端的 ...
- php中读取大文件实现方法详解
php中读取大文件实现方法详解 来源: 时间:2013-09-05 19:27:01 阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解 ...
- Android init.rc文件解析过程详解(三)
Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...
- Android init.rc文件解析过程详解(二)
Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...
- Android init.rc文件解析过程详解(一)
Android init.rc文件解析过程详解(一) 一.init.rc文件结构介绍 init.rc文件基本组成单位是section, section分为三种类型,分别由三个关键字(所谓关键字 ...
最新文章
- [CQOI2009]中位数图 详细题解
- Linux学习 Unit 12
- 记录到二进制的内容配置
- SpringBoot 项目war包部署 配置外置tomcat方法
- window无法对计算机进行,电脑按Win+E快捷键无法打开“计算机”如何解决
- linux添加windows网络打印机,Linux Mint如何添加windows分享的网络打印机?
- td之间的间距怎么改_论文的一级标题、二级标题格式怎么弄?
- JS_异步任务之流程控制
- 无可奈何花落去,数据丢失时时来;何当共谈完整性,却话巴山夜雨时----详解SQL Server 数据库库完整性检查和置疑修复
- android对象关系映射框架ormlite之一对多(OneToMany)
- {知道力} = {怎么做} + {为什么} 并且 {为什么} {怎么做}
- 发票分类代码地区代码列表
- 《现代操作系统(中文第四版)》课后习题答案 第二章 进程与线程
- tex中的书签与链接hyperref
- 聊一聊固态硬盘的那些事
- Thinking in java-29 解耦合Decouple
- 站长平台之360推送工具
- xxxxxxxxxxxxxxxxx
- 用html做相册需要什么,如何快速有效的生成HTML相册?
- 计算机专业梦想作文,我的理想是电脑工程师作文
热门文章
- 横杠转义(正则表达)
- 怎么安装aptdaemon模块_dlt-daemon安装教程
- 同比、定比和环比分析
- 第6期丨一周电商零售News10条(2.15-2.21)淘宝在微信“开店”/人民网评茶颜悦色被指侮辱女性/最高检重点监督直播带货
- 白话电子签章原理及风险
- matlab解常微分方程
- matlab把华氏度,MATLAB GUI实例1——摄氏度与华氏度的转换
- 项目编译不成功原因之一的引用jar包问题
- C++笔记005:用面向过程和面向对象方法求解圆形面积
- 使用纯 python 实现 Instruments 协议,跨平台 (win,mac,linux) 获取 iOS 性能数据