FastDFS - FastDFS使用
Posted MinggeQingchun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FastDFS - FastDFS使用相关的知识,希望对你有一定的参考价值。
一、分布式文件系统DFS
分布式文件系统(Distributed File System,DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(可简单的理解为一台计算机)相连;或是若干不同的逻辑磁盘分区或卷标组合在一起而形成的完整的有层次的文件系统。DFS为分布在网络上任意位置的资源提供一个逻辑上的树形文件系统结构,从而使用户访问分布在网络上的共享文件更加简便。
传统存储方式
分布式存储
分布式文件系统一般文件系统存储数据的方式数据分散的存储在多台服务器上集中存放所有数据,在一台服务器上特点分布式网络存储系统采用可扩展的系统结构,利用多台服务器分担负荷,利用位置服务器定位存储信息,不但提高了系统的可靠性、可用性和存取效率,还易于扩展,避免单点故障。传统的网络存储系统采用集中的服务器存放所有数据,到一定程度服务器会成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。
主流分布式文件系统介绍
常用的分布式文件系统有:GFS、TFS、HDFS、MooseFs、FastDfs、MogileFs、GridFs、MinIO、SeaweedFS、GlusterFS、Ceph、GlusterFS等。
1、GFS(Google File System)
Google公司为了满足本公司需求而开发的基于Linux的专有分布式文件系统。尽管Google公布了该系统的一些技术细节,但Google并没有将该系统的软件部分作为开源软件发布。
2、HDFS(Hadoop Distributed File System)
Hadoop 实现了一个分布式文件系统,简称HDFS。Hadoop是Apache Lucene创始人Doug Cutting开发的使用广泛的文本搜索库。它起源于Apache Nutch,后者是一个开源的网络搜索引擎,本身也是Luene项目的一部分。Aapche Hadoop架构是MapReduce算法的一种开源应用,是Google开创其帝国的重要基石。
参考链接:
http://hadoop.apache.org/docs/r2.9.1/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
3、Ceph
是加州大学圣克鲁兹分校的Sage Weil攻读博士时开发的分布式文件系统。并使用Ceph完成了他的论文。
由于 ceph 使用 btrfs 文件系统, 而btrfs 文件系统需要 Linux 2.6.34 以上的内核才支持。ceph目前还不足够成熟,它基于的btrfs本身也不成熟,它的官方网站上也明确指出不要把ceph用在生产环境中。
参考链接:
https://github.com/ceph/ceph
https://ceph.com
4. 、Lustre
Lustre是一个大规模的、安全可靠的,具备高可用性的集群文件系统,它是由SUN公司开发和维护的。该项目主要的目的就是开发下一代的集群文件系统,可以支持超过10000个节点,数以PB的数据量存储系统。目前Lustre已经运用在一些领域,例如HP SFS产品等。
参考链接:
http://lustre.org/
5、MooseFS
支持FUSE,相对比较轻量级,对master服务器有单点依赖,用perl编写,性能相对较差,国内用的人比较多。
参考链接:
https://moosefs.com
https://sourceforge.net/projects/moosefs/?source=directory
https://www.cnblogs.com/hjc4025/p/9956988.html
6、MogileFS
由memcahed的开发公司danga一款perl开发的产品,目前国内使用mogielFS的有图片托管网站yupoo等。MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上。
参考链接:
https://github.com/mogilefs
7、FastDFS
是一款类似Google FS的开源分布式文件系统,是纯C语言开发的。FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
参考链接:
https://github.com/happyfish100/fastdfs
https://www.cnblogs.com/shenxm/p/8459292.html
8、GlusterFS
开源分布式横向扩展文件系统,可以根据存储需求快速调配存储,内含丰富的自动故障转移功能,且摈弃集中元数据服务器的思想。适用于数据密集型任务的可扩展网络文件系统,具有可扩展性、高性能、高可用性等特点。gluster于2011年10月7日被red hat收购。
参考链接:
http://www.gluster.org
https://blog.csdn.net/liuaigui/article/details/6284551
9、TFS(Taobao File System)
TFS是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,它构筑在普通的Linux机器 集群上,可为外部提供高可靠和高并发的存储访问。TFS为淘宝提供海量小文件存储,通常文件大小不超过1M,满足了淘宝对小文件存储的需求,被广泛地应用 在淘宝各项应用中。它采用了HA架构和平滑扩容,保证了整个文件系统的可用性和扩展性。同时扁平化的数据组织结构,可将文件名映射到文件的物理地址,简化 了文件的访问流程,一定程度上为TFS提供了良好的读写性能。
参考链接:
http://code.taobao.org/p/tfs/src/
10.、GridFS
MongoDB是一种知名的NoSql数据库,GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容,文件内容按一定大小分成若干块,每一块存在一个Document中,这种方法不仅提供了文件存储,还提供了对文件相关的一些附加属性(比如MD5值,文件名等等)的存储。文件在GridFS中会按4MB为单位进行分块存储。
参考链接:
https://docs.mongodb.com/manual/core/gridfs
功能分类
1、适合做通用文件系统的有:Ceph、MooseFS、MinIO;
2、适合做中小文件存储的文件系统有:Ceph、FastDFS、MinIO、SeaweedFS;
3、适合做大文件存储的文件系统有:HDFS、MinIO、Ceph、GridFS;
4、轻量级文件系统有:FastDFS、MinIO、SeaweedFS;
5、简单易用,用户活跃的文件系统有:HDFS、FastDFS、MinIO;
综上:Ceph目前不够成熟稳定,官方也明确指出不要把ceph用在生产环境中,暂不考虑;
经初步筛选剩下的文件系统有:HDFS、FastDFS、MinIO、GridFS。
分布式文件系统比对
1、MinIO:学习成本低,部署容易,适合存储大容量非结构化的数据,且有详细的中文文档。
2、FastDFS:功能精简,支持在线扩容、冗余备份,部分支持跨集群同步,不存在单点故障,性能较好。但是不支持FUSE挂载和POSIX访问接口,且学习成本相对MinIO较高,且部署也相对比较复杂点。
3、HDFS:适合批量数据处理.可以部署在廉价的机器上。可以部署在廉价的机器上,但是不适合大量小文件,通过牺牲响应延时来换取高的吞吐量。
4、GridFS:能够简化技术栈,如果已经使用了MongoDB,那么使用GridFS,就不需要其它独立的存储工具了(但是我们当前没引入MongoDB),不过性能不如直接访问文件系统快,而且无法修改文档。如果要修改GridFS里面的文档,只能是先删除再添加(对我们当前业务没有影响)
当然我们还可以选择云存储,目前可用于文件存储的网络服务选择有很多,比如阿里云 OSS、七牛云、腾讯云等等。具体看公司需求选择即可。
二、FastDFS
1、FastDFS简介
FastDFS是一个开源的轻量级分布式文件系统,为互联网应用量身定做,简单、灵活、高效,采用C语言开发,由阿里巴巴淘宝的余庆先生所开发并开源。
FastDFS对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载、文件删除)等,解决了大容量文件存储的问题,特别适合以文件为载体的在线服务,如相册网站、文档网站、图片网站、视频网站等等。
FastDFS充分考虑了冗余备份、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
2、FastDFS特点
1、分组存储,简单灵活
2、对等结构,不存在单点
3、文件ID由FastDFS生成,作为文件访问凭证。FastDFS不需要传统的name server或meta server
4、大、中、小文件均可以很好支持,可以存储海量小文件
5、一台storage支持多块磁盘,支持单盘数据恢复
6、提供了nginx扩展模块,可以和nginx无缝衔接
7、支持多线程方式上传和下载文件,支持断点续传
8、存储服务器上可以保存文件附加属性。
3、FastDFS架构
FastDFS文件系统由两大部分构成,一个是客户端,一个是服务端
1、客户端(Client)
客户端通常指我们的程序,比如我们的Java程序去连接FastDFS、操作FastDFS,那我们的Java程序就是一个客户端,FastDFS提供专有API访问,目前提供了C、Java和php几种编程语言的API,用来访问FastDFS文件系统,如upload、download、append、delete等
服务端由两个部分构成:一个是跟踪器(tracker),一个是存储节点(storage)
2、跟踪服务器(Tracker server)
跟踪器(tracker)主要做调度工作,在内存中记录集群中存储节点storage的状态信息,是前端Client和后端存储节点storage的枢纽。因为相关信息全部在内存中,Tracker server的性能非常高,一个较大的集群(比如上百个group)中有3台就足够了。
3、存储服务器(Storage server)
存储节点(storage)用于存储文件,包括文件和文件属性(meta data)都保存到存储服务器磁盘上,完成文件管理的所有功能:文件存储、文件同步和提供文件访问等
Storage server:存储服务器(又称:存储节点或数据服务器),主要提供容量和备份服务。文件和文件属性(Meta Data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。
Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。
4、上传流程
5、下载流程
以上是关于FastDFS - FastDFS使用的主要内容,如果未能解决你的问题,请参考以下文章