FastDFS分布式文件系统

tech2025-11-07  4

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:端口
最新回复(0)