千家信息网

FastDFS的原理和使用方法

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容介绍了"FastDFS的原理和使用方法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!文件系统
千家信息网最后更新 2026年11月01日FastDFS的原理和使用方法

本篇内容介绍了"FastDFS的原理和使用方法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

文件系统是负责管理和存储文件的系统软件,它是操作系统和硬件驱动之间的桥梁,操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件。

分布式文件系统是面对互联网的需求而产生,互联网时代对海量数据如何存储?靠简单的增加硬盘的个数已经无法满足我们的要求,因为硬盘传输速度有限但是数据在急剧增长,另外我们还要做好数据备份、数据安全等。

采用分布式文件系统可以将多个地点的文件系统通过网络连接起来,组成一个文件系统网格,结点之间通过网络进行通信,一台文件系统的存储和传输能力有限,我们让文件在多台计算机上存储,通过多台计算共同传输。

好处:

1、一台计算机的文件系统处理能力扩充到多台计算机同时处理

2、一台计算机挂了还要另外副本计算机提供给数据

3、每台计算机可以放在不同的地域,这样用户就可以就近访问,提供访问速度

主流的分布式文件系统:NFS,GFS,HDFS,

分布式文件服务提供商:阿里OSS,七牛云,百度云

FastDFS是用C语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用,高性能等指标,使用FastDFS很容易搭建一套高性能等文件服务器集群提供文件上传、下载等服务。与上述主流的分布式文件系统相比,,FastDFS虽然开发体验差,但是系统复杂性低并且性能高,非常适合存储图片等那些小文件,FastDFS不对文件进行分块,所以它就没有分块合并对开销, 网络通信采用socket,通信速度很快。

FastDFS架构

FastDFS架构包括Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。

Tracker server作用是负载均衡和调度,通过Tracker server在文件上传时可用根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。

Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将Storage称为存储服务器。

Tracker集群

FastDFS集群中的Tracker server可以,Tracker server之间是相互平等关系同时提供服务,Tracker server不存在单点故障。客户端请求Tracker server

采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。

Storage集群

Storage集群采用分组存储方式,storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量只和。一个组由一台或多台存储服务器组成,组内的Storage server之间的平等关系,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个Storage上的文件完全一致。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。

采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由Tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力。当系统容量不足时,可以增加组来扩充存储容量。

Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步状态、文件上传下载次数等统计信息。

文件上传流程:

1、Client发送上传连接请求,给Tracker server

2、Tracker server查询可用storage,并将查询到的信息(Storage的ip和端口)返回给Client

3、Client上传文件到Storage server

4、Storage server生成文件ID,并且存储文件,将文件ID返回给Client

5、Client存储文件ID

注意:文件ID包含组名,虚拟磁盘路径,数据两级目录,文件名

文件下载流程

1、Client发送下载链接请求,给Tracker server

2、Tracker server查询可用Storage,并将查询到的信息(Storage的ip和端口)返回给Client

3、Client发送文件ID,给Storage server

4、Storage server根据文件ID查找文件,并且返回文件内容给Client

入门代码:

一、导入依赖

    4.0.0    lianbang.wu    FastDFSDemo    1.0-SNAPSHOT            org.springframework.boot        spring-boot-starter-parent        2.0.4.RELEASE                            net.oschina.zcx7878            fastdfs-client-java            1.27.0.0                            org.springframework.boot            spring-boot-starter-test                            org.apache.commons            commons-io            1.3.2            

二、配置文件,在类路径下创建fastdfs-client. properties

fastdfs.connect_timeout_in_seconds = 5fastdfs.network_timeout_in_seconds = 30fastdfs.charset = UTF-8fastdfs.tracker_servers = 192.168.0.0:22222

三、测试代码

package lianbang.wu.fastDFS;import org.csource.common.MyException;import org.csource.common.NameValuePair;import org.csource.fastdfs.*;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;@SpringBootTest@RunWith(SpringRunner.class)public class FastdfsTest {    /**     * 文件上传     */    @Test    public void testUpload(){        try{            //加载全局配置            ClientGlobal.initByProperties("config/fastdfs_client.properties");            //创建客户端            TrackerClient trackerClient = new TrackerClient();            //连接tracker server            TrackerServer trackerServer = trackerClient.getConnection();            if (trackerServer == null){                return;            }            //获取一个storage server            StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);            StorageClient storageClient = new StorageClient(trackerServer, storeStorage);            NameValuePair [] list = null;            String[] fileId = storageClient.upload_file("C:\\user\\admin\\1.png", "png",list );            System.out.println(fileId);        }catch (Exception e){            e.printStackTrace();        }    }    /**     * 文件查询     */    @Test    public void testQueryFile() throws IOException, MyException {        //加载全局配置        ClientGlobal.initByProperties("config/fastdfs_client.properties");        TrackerClient trackerClient = new TrackerClient();        TrackerServer trackerServer = trackerClient.getConnection();        StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);        StorageClient storageClient = new StorageClient(trackerServer, storeStorage);        FileInfo fileInfo = storageClient.query_file_info("group1", "M00/00/01/w.png");        System.out.println(fileInfo);    }    /**     * 文件下载     */    @Test    public void testDownloadFile() throws IOException, MyException {        //加载全局配置        ClientGlobal.initByProperties("config/fastdfs_client.properties");        TrackerClient trackerClient = new TrackerClient();        TrackerServer trackerServer = trackerClient.getConnection();        StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);        StorageClient storageClient = new StorageClient(trackerServer, storageServer);        byte[] bytes = storageClient.download_file("group1", "M00/00/01/w.png");        FileOutputStream fileOutputStream = new FileOutputStream(new File("d:/1.png"));        fileOutputStream.write(bytes);        fileOutputStream.close();    }    }

"FastDFS的原理和使用方法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

文件 系统 存储 服务 服务器 集群 之间 分布式 容量 数据 客户 客户端 计算机 查询 配置 操作系统 多台 调度 通信 互联网 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网与科技 互联网科技产业 互联网和科技技术 科技互联网龙头 金诺互联网科技 没上市的科技互联网公司 互联网科技金融公司 互联网科技媒体 青岛中康互联网医疗科技有限公司 欧洲十大科技互联网公司 厦门比较好的科技互联网公司 成都互联网科技公司工作好不好 哈尔滨屹滨互联网科技有限公司 健康食品互联网创新科技园项目 四川慕妮娅互联网科技有限公司 互联网公司高科技产品 伍佰万互联网科技怎么赚钱 中国互联网有什么科技 互联网科技大会大佬 互联网大会出现的黑科技 深圳九邦互联网科技有限公司 新华互联网科技学院 深圳互联网科技公司 海南购全球互联网科技 朱啸虎曾投资哪些互联网科技企业 元气玛特互联网科技公司是外包吗 小米互联网科技园入驻 广州百诚互联网科技有限公司官网 昆明中奇联合互联网科技 西安左小互联网科技有限公司
0