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