Оптимизация доступа к файлам изображений S3 для обработки изображений в приложении Django - PullRequest
2 голосов
/ 07 августа 2011

Для приложений django, которые я обычно создаю, S3 - это легкая задача для хранения любых нетривиальных статических данных ... особенно изображений. Это делает загрузку страницы намного быстрее, чем я мог бы в противном случае. Я использую бэкэнд файловой системы S3BotoStorage в пакете django-storages , и я обнаружил, что он фантастически прозрачен и не требует сложностей в реализации w / r / t.

Не так уж много операций w / r / t: сейчас я создаю небольшое семейство приложений, все из которых зависят от Django-ориентированной платформы обработки изображений. Большинство связанных с процессором операций, которые я делаю, могут быть обработаны в течение жизненного цикла HTTP-запроса; для немногих процессов, которые более требовательны, я использую асинхронную очередь сигналов и RESTful API, чтобы устранить потенциальные узкие места с точки зрения синхронизации и пользовательского интерфейса.

Это прекрасно, когда вы работаете с данными изображения, локальными для приложения обработки. S3 вбрасывает в нее обезьяну, делая все операции над файлами и объектами полностью недетерминированными. Проблема не в сбоях (я получаю случайную ошибку IOError или что-то подобное внутри приложения django-storages, возможно, один раз в неделю), а в времени, которое требуется для доступа к файлам, и полном отсутствии какого-либо кэша файловой системы.

Я провел небольшой рефакторинг для поддержки S3 - вычистил все абсолютные пути из кодовой базы; Реализация повторных попыток и обходных путей для неоперативных запросов Boto - мой стимул для построения очереди сигналов, фактически, заключался в том, чтобы уменьшить накладные расходы при доступе к файлу S3 (подробности, о которых я вас позабочу). Дело в том, что если я поддерживаю S3, я бы хотел поддержать его самым удивительным / продуктивным способом.

Естественно, я не хочу все испортить или усложнить, добавив слой кэширования, который потребует присмотр за детьми - я ищу простой (и, предпочтительно, несложный) способ ускорить работу файла. Операции с объектами, которые я выполняю на изображениях S3. Например, если я читаю из данного файлового объекта несколько раз в течение разумного периода времени, было бы замечательно, если бы последующие чтения были кэшированы достаточно, чтобы при каждом чтении не приходилось заново извлекать файл из S3.

Есть ли у кого-нибудь рекомендации по модулю, пример реализации, тактика настройки или какой-либо из перечисленных выше способов, с помощью которых я мог бы решить мои проблемы с файлами S3?

...