分布式文件系统---fastDFS

一、分布式文件系统的应用场景

可以解决高效存储;用户量访问大时,怎么保证下载速度?

二、文件系统是什么?

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

在这里插入图片描述

常见的文件系统:FAT16/FAT32、NTFS(前两者都是微软开发的)、HFS(苹果开发的文件系统)、UFS(UNix)、APFS(苹果文件系统)、XFS(硅谷图形公司开发的高性能日志式文件系统)、Ext4(Linux系统下的日志文件系统)等 。

三、什么是分布式文件系统?

分布式文件系统是文件系统管理的物理存储不一定在本地节点上,而是通过计算机网路与节点相连。换句话说,通过计算机网络,将分布在网络各个节点的文件系统,组织成一个网络文件系统。

四、为什么要有分布式文件系统?

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

在这里插入图片描述

好处:

1、一台计算机的文件系统处理能力扩充到多台计算机同时处理。
2、一台计算机挂了还有另外副本计算机提供数据。
3、每台计算机可以放在不同的地域,这样用户就可以就近访问,提高访问速度。

五、fastDFS

5.1、介绍

fastDFS是C语言编写的,由淘宝资深架构师余庆编写,并开源。网络通信用socket,特别快。其他的通用性比较高,但是性能差。而fastDFS是开发体验性差,但是性能高。

5.2、架构

在这里插入图片描述

5.3、上传流程

在这里插入图片描述

Storage Server 定时上报状态信息给Tracker Server,Client发送上传请求到Tracker Server,Tracker Server给Client 返回一个IP+端口的信息,然后Client根据这个服务器地址上传到对应的服务器后,将文件存储到服务器,返回一个file_id(组名+路径信息+文件名),然后Client将file_id存储到本地。

这里是直接用的余庆老师的fastdfs-client-java,可以使用fastdfs-client,具体操作点击链接

上传代码

配置 文件

在classpath:config下创建fastdfs-client.properties文件

fastdfs.connect_timeout_in_seconds = 5 #http连接超时时间    
fastdfs.network_timeout_in_seconds = 30 #tracker与storage网络通信超时时间   
fastdfs.charset = UTF‐8 #字符编码   
fastdfs.tracker_servers = 192.168.101.64:22122 #tracker服务器地址,多个地址中间用英文逗号分隔

API

TrackerClient , TrackerServer , StorageClient(StorageClient1) , StorageServer ;
private static void uploadFile() throws IOException, MyException {
        //1.加载fastDFS配置文件
        ClientGlobal.initByProperties("config/fastdfs-client.properties");

        //2. 构造TrackerClient
        TrackerClient trackerClient = new TrackerClient();

        //3. 获取TrackerServer
        TrackerServer trackerServer = trackerClient.getConnection();

        //4. 构造StorageClient
        StorageClient1 storageClient1 = new StorageClient1(trackerServer,null);

        //5. 上传文件
        String uploadFile1 = storageClient1.upload_file1("D:/1.jpg", "jpg", null);

        System.out.println(uploadFile1);
    }

5.4、下载流程

在这里插入图片描述

Client 携带文件名请求Tracker Server,然后Tracker Server返回一个IP+端口,Client根据服务器地址,找到服务器,再根据file_id(组名+路径+文件名)找到目标文件,然后下载到本地。

下载代码

private static void downloadFile() throws Exception {
        //1.加载fastDFS配置文件
        ClientGlobal.initByProperties("fastdfs-client.properties");

        //2. 构造TrackerClient
        TrackerClient trackerClient = new TrackerClient();

        //3. 获取TrackerServer
        TrackerServer trackerServer = trackerClient.getConnection();

        //4. 构造StorageClient
        StorageClient1 storageClient1 = new StorageClient1(trackerServer,null);

        //5. 下载
        byte[] bytes = storageClient1.download_file1("group1/M00/00/06/wKjAhF28-ieABjbwAAIz-JD1R5o403.jpg");

        FileOutputStream outputStream = new FileOutputStream(new File("D:/2.jpg"));
        outputStream.write(bytes);

        outputStream.flush();
        outputStream.close();

    }

5.5、删除文件

private static void deleteFile() throws Exception {

        //1.加载fastDFS配置文件
        ClientGlobal.initByProperties("fastdfs-client.properties");

        //2. 构造TrackerClient
        TrackerClient trackerClient = new TrackerClient();

        //3. 获取TrackerServer
        TrackerServer trackerServer = trackerClient.getConnection();

        //4. 构造StorageClient
        StorageClient1 storageClient1 = new StorageClient1(trackerServer,null);

        //5. 删除
        int i = storageClient1.delete_file1("group1/M00/00/06/wKjAhF28-ieABjbwAAIz-JD1R5o403.jpg");

        System.out.println(i);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值