zoukankan      html  css  js  c++  java
  • fastDFS

    1.fastDFS介绍

    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
    FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
    分布式文件系统:
    基于客户端/服务器的文件存储系统
    对等特性允许一些系统扮演客户端和服务器的双重角色,可供多个用户访问的服务器,比如,用户可以“发表”一个允许其他客户机访问的目录,一旦被访问,这个目录对客户机来说就像使用本地驱动器一样
    fastDFS是由三部分组成
     
    1.客户端Client
    主要是上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。每个客户端服务器都需要安装Nginx
     
     
     
     
     
    2.管理服务器Tracker Server
     
    追踪服务器负责接收客户端的请求,选择合适的组合storage server ,tracker server 与 storage server之间也会用心跳机制来检测对方是否活着。
    Tracker需要管理的信息也都放在内存中,并且里面所有的Tracker都是对等的(每个节点地位相等),很容易扩展
    客户端访问集群的时候会随机分配一个Tracker来和客户端交互。
    3.Storage server 储存服务器
     

    实际存储数据,分成若干个组(group),实际traker就是管理的storage中的组,而组内机器中则存储数据,group可以隔离不同应用的数据,不同的应用的数据放在不同group里面,

    优点:

    • 海量的存储:主从型分布式存储,存储空间方便拓展,
    • fastDFS对文件内容做hash处理,避免出现重复文件
    • 然后fastDFS结合Nginx集成, 提供网站效率

    FastDFS的特性

    • 分组存储,灵活简洁、对等结构,不存在单点
    • 文件ID由FastDFS生成,作为文件访问凭证,FastDFS不需要传统的name server
    • 和流行的web server无缝衔接,FastDFS已提供apache和nginx扩展模块
    • 大、中、小文件均可以很好支持,支持海量小文件存储
    • 支持多块磁盘,支持单盘数据恢复
    • 支持相同文件内容只保存一份,节省存储空间
    • 存储服务器上可以保存文件附加属性
    • 下载文件支持多线程方式,支持断点续传

    系统架构-上传文件流程图

        1》client询问tracker上传到的storage;
        2》tracker返回一台可用的storage;
        3》client直接和storage通信完成文件上传,storage返回文件ID。

    系统架构-下载文件流程图

        1》client询问tracker下载文件的storage,参数为文件ID(组名和文件名);
        2》tracker返回一台可用的storage;
        3》client直接和storage通信完成文件下载。

    入门Demo

    我们在Linux上安装好fastDFS 记录对应的ip

    在maven中引入

        <dependencies>
            <dependency>
                <groupId>org.csource.fastdfs</groupId>
                <artifactId>fastdfs</artifactId>
                <version>1.2</version>
            </dependency>
        </dependencies>

    配置文件

    # connect timeout in seconds
    # default value is 30s
    connect_timeout=30
    
    # network timeout in seconds
    # default value is 30s
    network_timeout=60
    
    # the base path to store log files
    base_path=/home/fastdfs
    
    # 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.200.128:22122
    
    #standard log level as syslog, case insensitive, value list:
    ### emerg for emergency
    ### alert
    ### crit for critical
    ### error
    ### warn for warning
    ### notice
    ### info
    ### debug
    log_level=info
    
    # if use connection pool
    # default value is false
    # since V4.05
    use_connection_pool = false
    
    # connections whose the idle time exceeds this time will be closed
    # unit: second
    # default value is 3600
    # since V4.05
    connection_pool_max_idle_time = 3600
    
    # if load FastDFS parameters from tracker server
    # since V4.05
    # default value is false
    load_fdfs_parameters_from_tracker=false
    
    # if use storage ID instead of IP address
    # same as tracker.conf
    # valid only when load_fdfs_parameters_from_tracker is false
    # default value is false
    # since V4.05
    use_storage_id = false
    
    # specify storage ids filename, can use relative or absolute path
    # same as tracker.conf
    # valid only when load_fdfs_parameters_from_tracker is false
    # since V4.05
    storage_ids_filename = storage_ids.conf
    
    
    #HTTP settings
    http.tracker_server_port=80
    
    #use "#include" directive to include HTTP other settiongs
    ##include http.conf

    代码

    public class TestFastDFS  {
        public static void main(String[] args)throws Exception {
            //1读取配置文件
            ClientGlobal.init("E:\ideaProject\fastDFSdemo\src\main\resources\fdfs_client.conf");
            //2  创建管理对象
            TrackerClient trackerClient = new TrackerClient();
            //3 通过管理对象获取链接
            TrackerServer connection = trackerClient.getConnection();
            //4 创建存储端对象
            StorageClient1 storageClient = new StorageClient1(connection, null);
            // 5  上传文件
            NameValuePair[] meta_list = new NameValuePair[3];
            meta_list[0] = new NameValuePair("fileName", "huangjunan");
            meta_list[1] = new NameValuePair("ExtName", "jpg");
            meta_list[2] = new NameValuePair("zuozhe", "hank");
            String path = storageClient.upload_file1("F:\ujiuye\1.jpg", "jpg", meta_list);
            //6  打印文件地址
            //sout
            System.out.println(path);
        }
    }

    结果 将结果输入URL栏 我们就可以获取我们上传的图片

    控制台打印

    group1/M00/00/01/wKjIgF391_GAZwwPAAAuCIHAgDA714.jpg
  • 相关阅读:
    json批量设置DIV属性
    随机产生div背景颜色变化
    发送验证码倒计时
    购物网站倒计时
    ARC066B
    [Poi2011]Conspiracy
    CF1103E Radix Sum
    NOI2018 冒泡排序
    CometOJ 5E
    NOI2020 命运
  • 原文地址:https://www.cnblogs.com/hank-hush/p/12077221.html
Copyright © 2011-2022 走看看