千家信息网

FastDFS的原理和使用方法

发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,本篇内容介绍了"FastDFS的原理和使用方法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!文件系统
千家信息网最后更新 2025年01月25日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安全错误 数据库的锁怎样保障安全 jdbc如何查批量数据库 网络安全法背景 二手服务器怎样建设局域网 java原生数据库帮助类 深圳python软件开发靠谱吗 徐州运营软件开发供应 软件开发中难点怎么写 贵州数据库和阿里云数据库 如何选择服务器联机明日之后 网络安全法保持什么原则 哪些是数据库产品 数据库建复制表 如何创建图书管理系统数据库 升压站网络安全调试 斗罗大陆我的世界服务器手机版网易视频 网络安全主题巡展网警等你来 发射台网络安全事故通报制度 金山区新时代网络技术信息 迷你机房服务器 gpu服务器推荐 普陀区品质软件开发技术指导 广州韶华网络技术 头歌数据库和表的基本操作 abap数据库由两部分组成 保障无线网络安全的基本技术 附加数据库不显示文件 服务信誉好的郑州软件开发 中国小学生家庭教育网络安全 怎么找方舟直链服务器 中医药文献检索数据库
0