首页天道酬勤主流分布式文件系统(分布式文件系统问题)

主流分布式文件系统(分布式文件系统问题)

admin 11-29 16:38 217次浏览

作者:小琪地址:https://blog.52itstyle.vip/archives/4837/

前言

最近在做一个图片床服务。如前一篇文章所述,阿里巴巴云OSS之前是集成存储图片的。虽然小批量储存不贵,但少肉还是有点痛苦。

正好双十一搞活动,顺手买了腾讯云的2C4G3MB云服务器,不得不说真香!从600多开始,真的很甜。毕竟,这是3MB带宽。

不要问我为什么不买阿里巴巴云双十一,因为我不如老用户和狗,只有续费和所谓的福利少多少。

简介

FastDFS是用C语言编写的开源分布式文件系统,充分考虑了冗余备份、负载均衡、线性扩展等机制,注重高可用性、高性能等指标。其功能包括文件存储、文件同步、文件访问(文件上传和文件下载)等。解决了海量存储和负载均衡的问题。特别适合中小文件(推荐范围:4KB file_size 500MB)、以文件为载体的在线服务,如相册网站、视频网站等。

结构

软件

SpringBoot2.0就更不用说了,它了解Nginx,提供http服务Docker,一个安装容器,而在它的背后,不需要用C语言编写的开源分布式文件系统libfastconly FastDFS,里面包含了FastDFS操作所需的一些基本库,Nginx结合Fastdfs-nginx-module插件实现HTTP协议安装。

如果一步一步地安装FastDFS及其依赖项,那就极其复杂了,有可能你一上午都配置不了!在这里,建议大家使用Docker一键安装,只需映射存储目录即可。

docker run-name fastdfs-privileged=true-net=host \

-e IP=192 . 168 . 1 . 156-e WEB _ PORT=8080 \

-v/home/fast DFS 3360/var/local/fdfs \

-d -重启=始终\

registry.cn-beijing.aliyuncs.com/itstyle/fastdfs:1.0

成功安装后,将在/home/fastdfs目录中生成两个目录文件夹,即跟踪器和存储。

这里有几点需要注意:

要映射主机的存储文件路径IP,必须将其配置为内部网或公共地址,并且网络类型必须设置为主机类型。安装完成后,浏览器访问:http://ip:8080如果显示Nginx欢迎页面,说明安装配置成功。

合并

接下来,我们将与SpringBoot集成。pom.xml引入了第三方工具类:

属国

groupIdcom.github.tobato/groupId

artifactIdfastdfs-客户端/artifactId

版本1 . 26 . 6/版本

/依赖性

在应用程序中引入配置。属性:

#===================================

#分布式文件系统FDFS配置

#===================================

#连接超时

fdfs . connect-超时=600

#读取超时

fdfs.so-timeout=1500

#缩略图的宽度和高度

fdfs.thumb-image.height=150

fdfs.thumb-image.width=150

#跟踪器服务配置地址列表,替换为自己服务的IP地址,并支持多个

跟踪者列表=192 . 168 . 1 . 136868666616

fdfs.pool.jmx-enabled=false

最后,写一个工具类,基本搞定,等待上传:

@组件

公共类FastdfsUtils {

公共静态最终字符串DEFAULT _ CHARSET=' UTF-8 ';

@自动连线

私有FastFileStorageClient FastFileStorageClient;

/**

*上传

* @param文件

* @返回

* @抛出IOException

*/

公共存储路径上传(多部分文件)引发IOException(

//设置文件信息

SetMetaData mataData=new HashSet();

matadata . add(new MetaData(' author ',' fastdfs ');

matadata . add(new MetaData(' description ',file . getoriginalfilename()));

//上传

StorePath StorePath=fastfilestorageclient . uploadfile(

file.getInputStream()、file.getSize(),

filenameutils . getextension(file . getoriginalfilename()),

null);

返回storePath

}

/**

*删除

* @param路径

*/

公共无效删除(字符串路径){ 0

fastfilestorageclient . delete file(路径);

}

/**

*删除

* @param组

* @param路径

*/

公共无效删除(字符串组,字符串路径){ 0

fastfilestorageclient . delete file(组,路径);

}

/**

*文件下载

* @param path文件路径,例如:/group 1/path=M00/00/00/it style . png。

* @param文件名下载的文件名

* @返回

*/

公共无效下载(字符串路径、字符串文件名、HttpServletResponse响应)引发IOException {

//获取文件

存储路径存储路径=存储路径。ParseFromURl(路径);

if (StringUtils.isBlank(文件名)){ 0

filenameutils。getname(存储路径。getpath());

}

byte[]bytes=fastfilestorageclient。downloadfile(storepath。getgroup()、storePath.getPath()、new DownloadByteArray());

回应。reset();

回应。setcontenttype('应用程序in/octet-stream ');

回应。setheader('内容处理','附件;filename=' URLEncoder.encode(文件名,《UTF-8》);

ServletOutputStream out=响应。getoutputstream();

out.write(字节);

出去。close();

}

}

图床预览

注意事项

生产环境中建议集群使用,搭建高可靠的云存储服务。如果是本地开发云服务器需要开放8080、22122 端口,生产环境不建议开启,所有的请求最好走内网。

基数统计功能 云内存 UMem Redisjava代码获取内存信息深入解析设计模式中的装饰器模式在iOS应用开发中的实现基于AndroidXML解析与保存的实现
rsync同步mysql(fastdfs nginx) 金泰克固态硬盘咋样啊(固态硬盘怎么用)
相关内容