FastDFS分布式文件系统

1.介绍FastDFS

	1.fastDFS: 
			    是以C语言开发的一项开源轻量级分布式文件系统,他对文件进行管理,
			主要功能有:文件存储,文件同步,文件访问(文件上传/下载),特别适合以文件
			为载体的在线服务,如图片网站,视频网站等:
	2.什么是分布式文件系统:
				基于客户端/服务器的文件存储系统,对等特性允许一些系统扮演客户端和服务器的双重角色,
			可供多个用户访问的服务器,比如,用户可以“发表”一个允许其他客户机访问的目录,
			一旦被访问,这个目录对客户机来说就像使用本地驱动器一样
	3.FastDFS架构:
				FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。
			跟踪器主要做调度工作,在访问上起负载均衡的作用。
	4.优点:
			①海量的存储:主从型分布式存储,存储空间方便拓展,
			②fastDFS对文件内容做hash处理,避免出现重复文件
			③然后fastDFS结合Nginx集成, 提供网站效率。

2.tracker server 和 storage server

	1.Tracker server 追踪服务器
			追踪服务器负责接收客户端的请求,选择合适的组合storage server ,tracker server
			 与 storage server之间也会用心跳机制来检测对方是否活着。Tracker需要管理的信息
			 也都放在内存中,并且里面所有的Tracker都是对等的(每个节点地位相等),很容易
			 扩展客户端访问集群的时候会随机分配一个Tracker来和客户端交互。
	2.Storage server 储存服务器
			实际存储数据,分成若干个组(group),实际traker就是管理的storage中的组,而组内
			机器中则存储数据,group可以隔离不同应用的数据,不同的应用的数据放在不同group里面;

3.文件上传和下载分析

	1.文件上传过程:

在这里插入图片描述

	2.文件下载过程:

在这里插入图片描述

4.FastDFS工具类

import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
public class FastDfsUtil {
    //从classpath
    public static String CONF_FILENAME  = FastDfsUtil.class.getClassLoader()
            .getResource("fdfs_client.conf").getFile();
    /**
     * 上传文件
     * @param file
     * @param extName
     * @return
     */
    public static  String upload(byte[] file,String extName) {
        try {
            ClientGlobal.init(CONF_FILENAME);
            TrackerClient tracker = new TrackerClient();
            TrackerServer trackerServer = tracker.getConnection();
            StorageServer storageServer = null;
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            NameValuePair nvp [] = new NameValuePair[]{};
            String fileIds[] = storageClient.upload_file(file,extName,nvp);
            System.out.println(fileIds.length);
            System.out.println("组名:" + fileIds[0]);
            System.out.println("路径: " + fileIds[1]);
            return  "/"+fileIds[0]+"/"+fileIds[1];
        } catch (Exception e) {
            e.printStackTrace();
            return  null;
        }
    }
    /**
     * 上传文件
     * @param extName
     * @return
     */
    public static  String upload(String path,String extName) {
        try { 
            ClientGlobal.init(CONF_FILENAME);
            TrackerClient tracker = new TrackerClient(); 
            TrackerServer trackerServer = tracker.getConnection(); 
            StorageServer storageServer = null;
            StorageClient storageClient = new StorageClient(trackerServer, storageServer);
            String fileIds[] = storageClient.upload_file(path, extName,null);
            System.out.println(fileIds.length); 
            System.out.println("组名:" + fileIds[0]); 
            System.out.println("路径: " + fileIds[1]);
            return  "/"+fileIds[0]+"/"+fileIds[1];
        } catch (Exception e) {
            e.printStackTrace();
            return  null;
        }
    }
    /**
     * 下载文件
     * @param groupName
     * @param fileName
     * @return
     */
    public static byte[] download(String groupName,String fileName) {
        try {
            ClientGlobal.init(CONF_FILENAME);
            TrackerClient tracker = new TrackerClient(); 
            TrackerServer trackerServer = tracker.getConnection(); 
            StorageServer storageServer = null;
            StorageClient storageClient = new StorageClient(trackerServer, storageServer); 
            byte[] b = storageClient.download_file(groupName, fileName);
            return  b;
        } catch (Exception e) {
            e.printStackTrace();
            return  null;
        } 
    }
    /**
     * 删除文件
     * @param groupName
     * @param fileName
     */
    public static void delete(String groupName,String fileName){
        try { 
            ClientGlobal.init(CONF_FILENAME);
            TrackerClient tracker = new TrackerClient(); 
            TrackerServer trackerServer = tracker.getConnection(); 
            StorageServer storageServer = null;
            StorageClient storageClient = new   				StorageClient(trackerServer, storageServer); 
            int i = storageClient.delete_file(groupName,fileName);
            System.out.println( i==0 ? "删除成功" : "删除失败:"+i);
        } catch (Exception e) {
            e.printStackTrace();
            throw  new RuntimeException("删除异常,"+e.getMessage());
        } 
    }
}

5.配置文件 fdfs_client.conf

	里面配置FastDFS服务器的 ip+端口  -->tracker_server=ip:端口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值