zoukankan      html  css  js  c++  java
  • 一、分布式文件系统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:setupfastdfs_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         }
  • 相关阅读:
    [转]当鼠标点击ListView下面的空白区域时,如何使ListView的原item选项仍然为选中状态
    [转]图像处理去噪的方法
    C# 图片上画连线时 自定义两点间的划线段样式
    C# WinForm (笨方法)根据不同的样式配置 设置窗体相关控件的背景 以改变窗体风格
    [转]sqlserver 数据类型 及使用考虑
    C# WinForm 关于窗体最大化时的是否全屏效果与是否遮盖任务栏
    [转]C# 画圆角矩形
    Ruby常用的内部变量
    document.getElementsByClassName的理想实现
    转:ie6与firefox操作iframe中DOM节点的一点不同
  • 原文地址:https://www.cnblogs.com/microsoftjava/p/10656154.html
Copyright © 2011-2022 走看看