Подтвердить что ты не робот

Django + S3 (boto) + Sorl Thumbnail: Предложения по оптимизации

Я использую бэкэнд для хранения S3 на сайте Django, который я разрабатываю, чтобы уменьшить нагрузку с серверов EC2 и позволить нескольким веб-серверам (резервирование, балансировка нагрузки) получить доступ к одному и тому же набору загружаемых носителей.

Значки шаблонов Sorl.thumbnail(v11) используются в наших шаблонах, чтобы обеспечить гибкое изменение размера изображения/обрезку.

Производительность на страницах, богатых мультимедиа, не очень хороша, и когда доступ к странице, содержащей эскизы, которые необходимо создать в первый раз, запросы даже время ожидания.

Я понимаю, что это связано с тем, что миниатюра Sorl проверяет/загружает исходное изображение с S3 (которое может быть довольно большим и высоким разрешением), и рендеринг/проверка/загрузка миниатюры.

Что вы предложите, это лучшее решение для этой настройки?

Я видел предложения по хранению локальной копии файлов в дополнение к копии S3 (не очень хорошо, когда пара серверов используется для балансировки нагрузки). Также я видел, что он предложил хранить 0-байтные файлы, чтобы обмануть sorl.thumbnail.

Есть ли другие предложения или лучшие способы приблизиться к этому?

4b9b3361

Ответ 1

Сортировка миниатюр теперь создается с учетом отдаленных медленных хранилищ. Первое создание миниатюры, однако, выполняется с запросом на хранение, например, с первого обращения к шаблону, но после этого ссылки кэшируются в хранилище значений ключей. Тем не менее вам нужен первый запрос и создание, поэтому одним из решений является использование низкоуровневого api sorl.thumbnail.get_thumbnail с теми же параметрами при загрузке изображения. Когда загруженное изображение добавит это задание создания эскизов в очередь, как сельдерей.

Ответ 2

Вы можете использовать Sorlery. Он объединяет сор и сельдерей для создания эскизов через рабочих. Он очень осторожен, чтобы не делать доступ к файловой системе за пределами рабочего потока.

Миниатюра, возвращенная немедленно (до того, как у работника была возможность), можно контролировать, установив ваш THUMBNAIL_DUMMY_SOURCE в соответствующий заполнитель.

Задача создается при первом запросе эскиза, последующие запросы обрабатываются фиктивным изображением до тех пор, пока рабочий поток не завершится.

Ответ 3

Почти так же, как и решение @Aidan, я сделал несколько настроек на миниатюре Sorl. Я также создаю эскизы с сельдереем. Мой код здесь sorl_thumbnail-async

Но я познакомился с easy_thumbnails делает именно то, что я пытался сделать, поэтому я использую его в своем текущем проекте. Вы можете найти полезный, короткий пост на тему здесь

Ответ 4

Самое простое решение, которое я нашел до сих пор, это на самом деле это сторонний сервис: http://cloudinary.com/

Ответ 5

Просто хедз-ап для пользователей Flask, которым нужны миниатюры на S3. Я отклонил flask-thumbnails и создал flask-thumbnails-s3. К сожалению, он не делает каких-либо причудливых очередей или асинхронных вещей, таких как различные Django-решения, связанные выше (вклад приветствуется!)... но он работает.