day9 FastDFS

FastDFS是由淘宝的余庆先生所开发的一个轻量级、高性能的开源分布式文件系统。用纯C语言开发,功能丰富:

文件存储

文件同步

文件访问(上传、下载)

存取负载均衡

在线扩容

 

架构图

day9 FastDFS_第1张图片

上传和下载流程

day9 FastDFS_第2张图片

 

安装流程:

1.实现图片上传

1.1.搭建项目(重新搭建ly-upload微服务)

1.1.1.创建module

1.1.2.依赖

我们需要EurekaClient和web依赖:

1.1.3.编写配置

1.1.4.启动类

 

1.2.编写上传功能

1.2.1.controller

编写controller需要知道4个内容:

 

请求方式:上传肯定是POST

请求路径:/upload/image

请求参数:文件,参数名是file,SpringMVC会封装为一个接口:MultipleFile

返回结果:上传成功后得到的文件的url路径

 

1.2.2.service

 

在上传文件过程中,我们需要对上传的内容进行校验:

 

校验文件大小

校验文件的媒体类型

校验文件的内容

文件大小在Spring的配置文件中设置,因此已经会被校验,我们不用管。

 

这里有一个问题:为什么图片地址需要使用另外的url?、

图片不能保存在服务器内部,这样会对服务器产生额外的加载负担

一般静态资源都应该使用独立域名,这样访问静态资源时不会携带一些不必要的cookie,减小请求的数据量

 

1.2.3.测试上传

1.2.4.绕过网关

 

图片上传是文件的传输,如果也经过Zuul网关的代理,文件就会经过多次网路传输,造成不必要的网络负担。在高并发时,可能导致网络阻塞,Zuul网关不可用。这样我们的整个系统就瘫痪了。

 

所以,我们上传文件的请求就不经过网关来处理了。

 

1.2.4.1.Zuul的路由过滤

Zuul中提供了一个ignored-patterns属性,用来忽略不希望路由的URL路径,示例:

1.2.4.2.Nginx的rewrite指令

1.2.5.跨域问题

不过庆幸的是,这个错误已经不是第一次见了,跨域问题。

我们在upload-service中添加一个CorsFilter即可:

 

1.2.6.之前上传的缺陷

先思考一下,之前上传的功能,有没有什么问题?

 

上传本身没有任何问题,问题出在保存文件的方式,我们是保存在服务器机器,就会有下面的问题:

单机器存储,存储能力有限

无法进行水平扩展,因为多台机器的文件无法共享,会出现访问不到的情况

数据没有备份,有单点故障风险

并发能力差

这个时候,最好使用分布式文件存储来代替本地文件存储。

你可能感兴趣的:(乐优商城)