1、简介:FastDFS是用C语言编写的一款开源的分布式文件系统,FastDSF充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等特点,使用FastDFS可以很容易的搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
2、原理:FastDFS系统结构如下图所示:
FastDFS分为Tracker、Storage,其中Storage负责存储文件,Tracker负责存储文件所在地址,主要作用是负载均衡和资源调度。
Tracker、Storage都可以实现集群部署,Tracker的每个节点地位平等,而Storage可以分为多个组,每个组之间保存的文件是不同的,组内部分为多个成员,每个成员保存的内容是一样,组成员地位一致,没有主从概念。
使用FastDFS存储文件优点:可以应对互联网的海量文件存储,一旦文件较多,可以随时横向扩展,且集群的实现也使系统不存在单点故障问题,用户不会因为服务器宕机而无法访问文件资源。
3.工作流程
文件上传:Client会先向Tracker询问存储地址,Tracker查询到存储地址后返回给Client,Client拿着地址直接和对应的Storage通讯,将文件上传至改Storage。
文件下载:同样,Client会向Tracker询问地址,并带上要查询的文件名和组名,Tracker查询后会将地址返回给Client,Client拿着地址和指定Storage通讯并下载文件。
4.安装部署
FastDFS安装过程很复杂,需要配置许多参数,我会另外写一篇专门配置FastDFS的文档。
5.测试Demo
1.创建Maven工程fastdfsdemo
安装Jar包到Maven本地仓库,使用如下命令:
mvn install:install-file -DgroupId=org.csource.fastdfs -DartifactId=fastdfs -Dversion=1.2 -Dpackaging=jar -Dfile=d:\setup\fastdfs_client_v1.20.jar
在pom.xml中引入:
<dependency>
<groupId>org.csource.fastdfs</groupId>
<artifactId>fastdfs</artifactId>
<version>1.2</version>
</dependency>
添加配置文件:fdfs_client.conf,修改服务器地址:
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
tracker_server=192.168.1.106:22122
创建Java测试类:
1 // 1、加载配置文件,配置文件中的内容就是 tracker 服务的地址。 2 ClientGlobal.init("D:/maven/fastdfsdemo/src/fdfs_client.conf"); 3 // 2、创建一个 TrackerClient 对象。 4 TrackerClient trackerClient = new TrackerClient(); 5 // 3、使用 TrackerClient 对象创建连接,获得一个 TrackerServer 对象。 6 TrackerServer trackerServer = trackerClient.getConnection(); 7 // 4、创建一个 StorageServer 的引用,值为 null 8 StorageServer storageServer = null; 9 // 5、创建一个 StorageClient 对象,需要两个参数 TrackerServer 对象、StorageServer 的引用 10 StorageClient storageClient = new StorageClient(trackerServer, storageServer); 11 // 6、使用 StorageClient 对象上传图片。 12 //扩展名不带"." 13 String[] strings = storageClient.upload_file("D:/pic/demo1.jpg", "jpg",null);14 // 7、返回数组。包含组名和图片的路径。 15 for (String string : strings) { 16 System.out.println(string); 17 }