2016-04-21 73 views
0

我正在创建一个托管在heroku上的简单API,用于处理来自基于Django的API中的数据的远程客户端(移动应用程序)的视频上传。通过基于Django的API上传到S3的视频

我需要视频文件名/ URL是模糊和唯一的。

我可以采取几种方法:

1)要求基于Django的API给我一个独特的和模糊的文件名,将视频直接上传到S3与文件名,然后张贴上载状态更新的API 。

2)将视频直接从移动应用程序上传到S3,通过视频详细信息向API发送请求,然后生成一个任务,重命名S3上的视频文件名并更新我的Django模型中的视频url属性。

3)将视频直接发布到API,它将处理命名文件并上传到S3。

在将来需要在上传到S3之前处理视频的情况下,第一种和第二种方法需要服务器下载已上传到S3的视频,然后处理它,然后重新上传到S3。

这种情况下推荐的架构是什么?

+1

https://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html – cdvv7788

回答

1

你有几个设计选项。

  1. 如果直接上传到S3之前的处理,这里是使用Python直接上传到你的水桶好文章: https://devcenter.heroku.com/articles/s3-upload-python

    你会希望有一个单独的任务服务器(或λ)触发一个单独的工作来处理您的视频处理。这样你的网站就不会受到阻碍,而且速度很快。您需要利用队列(AWS中的SQS)进行缩放。

  2. 或者,您的Web服务器可以完成所有工作:下载,处理和s3上传。

第二种方法更简单,但不会处理Web服务器的负载,以及,它也将是规模更昂贵。

我建议第一种方法允许s3处理您的上传,Lambda和SQS来处理您的处理,并且您的Web服务器保持亮度。因为它不是线性的,所以开发更多一点,但应该更便宜地扩展并为用户提供更好的性能和响应时间。

+0

非常感谢。这很有用。我已经更新了这个问题,更多地倾向于一个架构建议请求,而不是一个特定的技术,因为它被搁置了。 – user1889776