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
原文地址:https://www.cnblogs.com/hank-hush/p/12077221.html