我正在创建一个托管在heroku上的简单API,用于处理当前正在使用基于Django的API的数据的远程客户端(移动应用程序)的视频上传。
我需要的视频文件名/网址是既晦涩和唯一。
我可以采取几种方法:
1)请求Django接口给我一个唯一且晦涩难懂的文件名,使用该文件名直接将视频上传到S3,然后向接口发布上传状态更新。
2)将视频从手机app直接上传到Django,向接口发送视频详细信息请求,接口会触发一个任务,重命名S3上的视频文件名,并更新我的Django模型中的视频url属性。
3)直接将视频发布到接口,接口负责文件的命名和上传到S3。
在将来我可能需要在上传到S3之前处理视频的情况下,第一种和第二种方法将要求服务器下载已经上传到S3的视频,处理它,然后重新上传到S3。
在这种情况下,推荐的架构是什么?
发布于 2016-04-22 01:08:23
您有几个设计选项。
您需要一个单独的任务服务器(或Lambda)来触发一个单独的作业来处理您的视频处理。这样一来,你的网站就能保持畅通无阻和快速。您需要使用一个队列(在AWS中为scale.
- Django handles video uploads well: [How to upload a movie file in Django?](https://stackoverflow.com/questions/4953999/how-to-upload-a-movie-file-in-django)
- OpenCV for video processing?
- boto for uploads: [http://docs.ceph.com/docs/master/radosgw/s3/python/](http://docs.ceph.com/docs/master/radosgw/s3/python/)
第二种方法更简单,但不会处理web服务器负载,扩展成本也会更高。
我建议采用第一种方法,允许s3处理您的上传,Lambda和SQS来处理您的处理,并且您的web服务器保持轻量级。更多的开发,因为它不是线性的,但应该更便宜地扩展,并为用户提供更好的性能和响应时间。
https://stackoverflow.com/questions/36775751
复制相似问题