13

我在我正在开发的 Django 站点上使用 S3 存储后端,以减少来自 EC2 服务器的负载,并允许多个 Web 服务器(冗余、负载平衡)访问同一组上传的媒体。

我们的模板中使用了 Sorl.thumbnail (v11) 模板标签,以允许灵活地调整图像大小/裁剪。

富媒体页面的性能不是很好,第一次访问包含需要生成缩略图的页面时,请求甚至超时。

我知道这是由于 sorl 缩略图检查/从 S3 下载原始图像(可能非常大和高分辨率),以及渲染/检查/上传缩略图。

您认为此设置的最佳解决方案是什么?

除了 S3 副本之外,我还看到了存储本地文件副本的建议(当使用几台服务器进行负载平衡时,这不是很好)。我还看到它建议存储 0 字节文件来愚弄 sorl.thumbnail。

有没有其他建议或更好的方法来解决这个问题?

4

4 回答 4

7

现在创建 sorl 缩略图时考虑到了远程慢速存储。然而,缩略图的第一次创建是通过查询存储完成的,例如首先从模板访问,但之后引用被缓存在键值存储中。您仍然需要第一次查询和创建,一个解决方案是在上传图像时使用具有相同选项的低级 api sorl.thumbnail.get_thumbnail。当上传图片时,将此缩略图创建作业添加到像芹菜一样的 que 中。

于 2011-04-06T23:22:23.303 回答
3

您可以使用Sollery。它结合了 sorl 和 celery 通过工人创建缩略图。非常小心不要在工作线程之外进行任何文件系统访问。

THUMBNAIL_DUMMY_SOURCE可以通过将您设置为适当的占位符来控制立即返回的缩略图(在工作人员有机会之前) 。

该作业在第一次请求缩略图时创建,后续请求将提供虚拟图像,直到工作线程完成。

于 2013-05-25T22:19:44.970 回答
1

与@Aidan 的解决方案几乎相同,我对 sorl-thumbnail 进行了一些调整。我还用 celery 预先生成缩略图。我的代码在这里sorl_thumbnail-async

但我开始知道easy_thumbnails完全符合我的要求,所以我在我当前的项目中使用它。您可能会在此处找到有关该主题的有用的简短帖子

于 2013-07-08T19:25:05.730 回答
1

到目前为止,我发现的最简单的解决方案实际上是这个第三方服务:http ://cloudinary.com/

于 2015-04-04T11:58:27.450 回答