咨询一个上传下载 api 问题

2019-03-20 10:27:02 +08:00
 sxw11

背景:目前有一个上传下载的 api,客户端请求 api,后端从阿里云 OSS 将响应文件下载,然后返回 stream 给客户端

服务器环境:阿里云 ECS(2 核 4G 1Mbps)

客户端环境: 网络上下行大概都是 1M/s

问题:无并发情况下载 4M 图片大概 30 秒左右,20 个并发 几分钟。

先我跟一下大家,是这种方案有问题还是服务器带宽太小的导致的,业界通用一般用什么方案来搞定这种上传下载,如果不行可能还是得搞成客户端用 OSS SDK 来下载了。

1995 次点击
所在节点    程序员
14 条回复
zhengxiaowai
2019-03-20 10:29:56 +08:00
本来就是从客户端走的,我下载一个 4G 文件,还不把内存打爆了?
Sapp
2019-03-20 10:33:44 +08:00
客户端接入 sdk 啊... 怎么能走后端,高并发和大文件传起来你受得了?
RyanOne
2019-03-20 10:34:13 +08:00
RyanOne
2019-03-20 10:35:26 +08:00
OSS 只需要购买存储空间和下行流量包即可实现降低成本(舍不得带宽的话)
python35
2019-03-20 10:39:42 +08:00
1Mbps ==> 服务器的峰值带宽 128KB/s
服务器端从 OSS 下文件吐给客户端,OSS 的好处不就显示不出来了。
建议 OSS 设置私有读写,服务器生成一个带 token 的 oss 下载链接,token 的有效时间定个 10 分钟左右,把链接返回客户端,客户端用这个链接直接下文件
sxw11
2019-03-20 10:49:26 +08:00
@zhengxiaowai @Sapp
刚开始是通过 SDK 来搞这些的,后来因为考虑了权限控制问题,流量问题,还有就是我们这个应用一般没有多大并发,顶多 30 左右,上传的文件单个大小 4M 左右,所以想尝试一下这个方案
@RyanOne 谢谢,我觉得这种可行
@python35 嗯嗯 如果我们现在这种方案搞不定,可能就只能通过 STS 授权来搞定了
wccc
2019-03-20 10:50:23 +08:00
客户端直接下载 鉴权
domty
2019-03-20 10:51:59 +08:00
阿里云的 ecs 下载阿里云的 oss 的资源可以走阿里云内网
domty
2019-03-20 10:55:30 +08:00
选三方的对象存储,目的就是为了减少存储和带宽的压力吧。
你这样走三方的上传下载,还不如自己建个文件服务器来的省事。
至于资源防盗问题,可以考虑对象存储提供的防盗链服务。
wusatosi
2019-03-20 11:01:12 +08:00
直接把 OSS 的访问权限交给用户不就好了,去看看阿里云的 STS......
gz911122
2019-03-20 11:02:00 +08:00
不需要 sdk
上传 服务端下发 token 给客户端,客户端自行上传后将 url 给服务端即可
下载 客户端自行通过 url 下载
wunonglin
2019-03-20 11:02:16 +08:00
有意思么这样?
lawler
2019-03-20 11:13:47 +08:00
只是图片的话,0 成本图床分发不 ok 吗?
wongguobin
2019-03-20 15:30:24 +08:00
阿里云 OSS 直传了解一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/546474

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX