一、分布式文件系统FastDFS原理及入门

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         }

猜你喜欢

转载自www.cnblogs.com/microsoftjava/p/10656154.html