需求是客户会上传单个或者很多文件,要求提供的接口把处理结果返回客户端。 我目前的思路有: 对于单个文件可以直接等待处理完成,然后把结果返回客户端。 对于批量文件可以通过 celery 把处理任务发送其他 worker 去处理,然后,返回一个新的接口供客户端进行结果轮询。
(服务端处理这些文件需要好几分钟) 现在有几个问题就是:
谢谢!
1
fatedier 2017-07-03 21:04:03 +08:00
异步任务 && IO 多路复用
|
2
Reign 2017-07-03 21:09:01 +08:00 via iPhone
与其在这多耗脑细胞不如多买几台服务器
|
3
beneo 2017-07-03 21:11:27 +08:00
上传都走 CDN,客户端传 URL 到服务端
|
4
misaka19000 2017-07-03 21:26:20 +08:00 via Android
@Reign 服务器就是钱啊。。。
|
5
misaka19000 2017-07-03 21:29:18 +08:00 via Android
感觉用户量多的时候无解,只能做集群来提升任务处理能力
|
6
itertools OP @fatedier 那有什么异步框架可以推荐下?
还有几个疑问请教:就是如果服务端接口采用异步框架处理这个任务。 (假设这耗时任务使用了 5 分钟) 1.如果客户端使用同步请求,那么客户端是否就一直阻塞五分钟?这样不会出现请求超时,连接中断问题吗? 2.如果客户端使用异步请求,那么客户端五分钟之后就能接到处理结果?这五分钟之内是怎么保持连接不中断的? 谢谢! |
7
SlipStupig 2017-07-03 21:46:14 +08:00
@beneo 上传走 cdn 作用不大,都是 stream 数据,cdn 根本 cache 不到
我的想法是 HAProxy 做负载均衡,后台开多个 server,用 celery 可以开多个 worker,可以选 gevent,然后把相关数据全部存储到远程的对象存储(建议用第三方)上,当客户请求,相应相关 URL,让客户端下载就行了,多个和一个没什么区别? |
8
yidinghe 2017-07-03 23:20:04 +08:00
统一用轮询来查询处理状态,这样给将来留下的余地比较好。
|
9
mooncakejs 2017-07-03 23:23:07 +08:00 via iPhone
@SlipStupig 他说的是直传
|
10
em70 2017-07-03 23:25:13 +08:00 via Android
可以看看优酷,YouTube 对上传视频转码是如何处理的,上传后出现到列表,状态显示正在处理,用户可以随时上来看处理完了没
|
11
ericls 2017-07-03 23:27:36 +08:00 via iPhone
我觉得只要用 websocket 让客户知道处理的进度就好了
|
12
Morriaty 2017-07-04 12:01:37 +08:00
接口直接返回一个 upload_id,异步处理上传,再给一个查询 upload_id 进度的接口
|
13
ma125125t 2017-07-04 14:42:40 +08:00
文件存储用第三方
|