java分布式文件上传_分布式文件上传的思路

1.问题描述

现在好多应用都不止一台服务器,这就给文件上传带来了麻烦。尤其是对大文件的分片上传,每个分片可能到达不同的服务器,最后怎么把众多分片整合起来呢?

下面就说说这个问题的一些解决思路:

2.解决思路

2.1使用独立的服务器做上传

单独找一台服务器做上传,直接绕过对集群的处理。

因为主要是IO操作,所以服务器最好是大容量固态硬盘,CPU和内存要求可以适当降低;如果上传压力不是很大,还可以让该服务器也参与处理业务逻辑,可以将nginx的负载策略配置为权重,为该服务器分配较低权重;独立服务器的上传有现成的第三方组件,比如jQuery File Upload,支持分片/上传进度/暂停/取消/多文件上传/拖动上传等功能

优点:

支持分片

借用第三方组件,处理简单

缺点:

只有一台机器,一旦故障,上传功能就无法使用了

2.2将文件存入第三方

将集群环境"变成"单机环境。

每个服务器收到分片后,都保存到统一的位置上,比如MongoDB。分片之间的关联关系可以借助文件表中的metadata字段来维护,metadata相同的表示同一个文件;分片的顺序可以直接使用文件名来表示,比如将分片命名为 1 2 3...

优点:

支持分片

缺点:

需要额外维护分片之间关联关系

要考虑第三方对文件处理的效率

2.3多服务器+Nginx

让客户端一直向固定的服务器传分片。

第一个分片请求由nginx决定发给哪个服务器处理,服务端收到该请求后,将ip返给客户端,客户端上传后续分片时不再经过nginx,固定使用该ip,保证同一文件的分片能传到同一台服务器。文件与服务器的对应关系,可以借助第三方维护,比如redis。

优点:

支持分片

服务器集群实现负载均衡

缺点:

需要额外维护文件与服务器的对应关系

2.4使用form表单上传

一个请求传完文件。

直接使用form表单上传,不分片,服务端根据收到的流大小与总大小做上传进度的计算,使用websocket向客户端推送上传进度。

优点:

处理简单,不用考虑集群的问题

缺点:

不支持分片/暂停

只能由服务器来反馈上传进度

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值