Django:如何从多个独立服务器提供用户上传的图片和缩略图?
我想在我的Django网站上做以下几件事:
- 接受用户提交的图片
- 从这些图片生成缩略图
- 把原始图片和缩略图放到不同的、专门用来提供图片的多个服务器上
我需要多个独立的服务器来提供这些图片和缩略图,这样才能确保我有足够的输入输出性能。
有什么好的方法可以建立这样一个分布式的图片服务系统吗?有没有什么开源软件可以帮助我?
谢谢。
1 个回答
4
这听起来像是需要用到分布式任务队列的场景。我个人最喜欢的是 Beanstalkd,因为它轻量级且易于使用。
服务器地址: https://github.com/kr/beanstalkd
客户端库: https://github.com/PeterScott/beanstalkc
Django 辅助工具: https://github.com/jonasvp/django-beanstalkd
它的工作原理是这样的:
1. 文件被上传并存储在本地
2. 上传视图创建一个任务,并把它放入一个 beanstalk 管道中
3. Beanstalk 的工作者会监视这些管道,看到新任务后就会去处理
4. 工作者可以生成缩略图,并把它分发到你需要的多个服务器上
最棒的是,你可以根据需要让多个工作者同时从管道中获取任务。如果你发现任务处理跟不上进度,只需启动更多的工作者就可以了。这些工作者可以在同一台机器上,也可以在多台不同的机器上运行,效果都很好。