IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> java电商项目搭建-------分布式文件存储系统(fastDFS) -> 正文阅读

[系统运维]java电商项目搭建-------分布式文件存储系统(fastDFS)

人之所以痛苦,那是因为你在成长。--------magic_guo

微服务项目,由于访问量和系统的高可用性能,会将上传的文件图片等存放在搭建的分布式文件存储系统;现在比较流行的文件存储系统有fastDFS和OSS(在下一篇描述);但是两者各有利弊:
1、fastDFS的搭建需要更多的资源,搭建步骤繁琐,还要考虑到后期的维护成本;
2、OSS是阿里云的存储服务,只需要一些配置就可以乱传乱滋溜,也不用考虑后期维护问题,等项目的访问量上来以后,只管拿钱配置就可以了;毕竟钱这东西,谁说不香呢?!!!!

今天我们两个列子都搭建一波,具体的选择,还要业务需求和项目资金来考虑;
使用docker来搭建fastDFS
搭建DFS有两种方式,一种是在服务器上下载fastDFS的压缩包来安装,再进行一系列的配置(确实比较繁琐);另一种是在服务器上直接起docker服务,docker镜像已经将大部分的配置搞定了,其余的就是一些简单必要的配置,如容器之间的通信等。

1、进入dockerhub官网,搜索fastdfs镜像:
在这里插入图片描述其中有很多版本,我们选择集成了nginx的版本;毕竟处理静态文件,负载均衡这块儿,nginx还是拿捏得死死的;
在这里插入图片描述
点进去之后我们会发现其中有一些docker的启动命令,先搞下来:
后面启动镜像时需要注意两点:
1.将–network=fastdfs-net 改成–network=host(即保持容器的网络和宿主机的网络是一致的)
2.将-e TRACKER_SERVER=tracker:22122 中的tracker改成自己的宿主机ip;

docker network create fastdfs-net
docker run -dit --network=fastdfs-net --name tracker -v /var/fdfs/tracker:/var/fdfs ygqygq2/fastdfs-nginx:latest tracker
docker run -dit --network=fastdfs-net --name storage0 -e TRACKER_SERVER=tracker:22122 -v /var/fdfs/storage0:/var/fdfs ygqygq2/fastdfs-nginx:latest storage
docker run -dit --network=fastdfs-net --name storage1 -e TRACKER_SERVER=tracker:22122 -v /var/fdfs/storage1:/var/fdfs ygqygq2/fastdfs-nginx:latest storage

然后我们去虚拟机拉取此镜像:
先搜索此镜像:

docker search fastDFS

在这里插入图片描述
选择整合了nginx的版本,然后拉取此镜像:

docker pull ygqygq2/fastdfs-nginx 

拉取后查看镜像,看到已经拉去下来了:

docker images

在这里插入图片描述
接下来我们来分析这几条命令:
docker network create fastdfs-net:创建一个名字为fastdfs-net的docker局域网络

docker -dit:
-d:–detach:在后台运行容器,并且打印容器id
-i:–interactive:即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用
-t:–tty:分配一个伪tty,一般与 -i 连用
总的来说就是:在后台启动此容器,以标准输入的方式给容器产生一个交互性shell命令行
–name storage1:给次容器起个别名为storage1

-e TRACKER_SERVER=tracker:22122:设置一个名为TRACKER_SERVER的环境变量为,并绑定内容为tracker:22122;

-v /var/fdfs/storage1:/var/fdfs:这是宿主机与docker之间挂载的共享目录卷

ygqygq2/fastdfs-nginx:latest:镜像的名字和tag;(表示是最新版本的镜像)

最后一个storage表示此容器为 storage类型;

其中storage的整条命令的意思为:起一个storage类型的容器,名字为storage1,设置环境变量为tracker的host和端口,并挂在一些宿主机和容器的目录;

解释一下fastDFS的真个存储架构:
在这里插入图片描述
在这里插入图片描述
Tracker server
Tracker是FastDFS的协调者,负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表;

Storage server
Storage server以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费;

启动镜像:
启动命令更改过以后,先启动tracker的服务镜像,再启动storage服务镜像(如果只是测试,可以启动一个);
启动后可以看到是三个容器已经起来了:
在这里插入图片描述
如果按照以上方式启动镜像,不需要更改别的配置,或许会遇到存储空间不足的问题,分别进到tracker和storage容器中,修改/etc/fdfs/tracker.conf文件:
在这里插入图片描述在这里插入图片描述
fastDFS搭建完成之后该是编写java代码:
pom文件:

        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
            <version>1.26.1-RELEASE</version>
        </dependency>

controller层:

@RestController
@RequestMapping("/uploadController")
public class FdsUploadController {

    @Autowired
    private FastFileStorageClient fastFileStorageClient;

    @Value("${dsfHostName}")
    private String dsfHostName;

    @RequestMapping("/uploadPng")
    public ResultEntity uploadPng(MultipartFile file) {

        try {
            System.out.println(file);
            String fileExtName = FilenameUtils.getExtension(file.getOriginalFilename());
            System.out.println(fileExtName+"******************************");
            StorePath storePath = fastFileStorageClient.uploadImageAndCrtThumbImage(file.getInputStream(), file.getSize(), fileExtName, null);
            String fullPath = storePath.getFullPath();
            System.out.println(dsfHostName + fullPath);
            return ResultEntity.success(dsfHostName + fullPath);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

启动此模块,访问接口,因为要上传文件,因此需要在postman上测试:
在这里插入图片描述
返回一个整体的路径,到时候将此路径返回给前端处理;此路径可直接访问图片:
在这里插入图片描述
也可以根据路径在服务器上找到此图片:
在这里插入图片描述
感受:
突然间发现,自己写一个博客开源出去,会影响好多人(虽然也没有人看吧),自己不敢有丝毫的差错,生怕误导人家!另外有些原理和配置研究的太过肤浅,但是我的本心是将这些博客当做笔记记录下来的;希望在其中发现错误的朋友们能够指出我的问题,我也好继续反省;如果此博客能够帮助到大家,那是真的很开心!谢谢大家批评指正!


本文章教学视频来自:https://www.bilibili.com/video/BV1tb4y1Q74E?p=3&t=125


静下心,慢慢来,会很快!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 12:03:21  更:2021-07-29 12:05:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:52:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码