storages google aws django amazon-s3 thumbnails boto sorl-thumbnail

aws - django google storage



Django+S3(boto)+miniatura de Sorl: sugerencias para la optimización (5)

Estoy utilizando el back-end de almacenamiento S3 en un sitio de Django que estoy desarrollando, tanto para reducir la carga de los servidores EC2 (s), como para permitir que múltiples servidores web (redundancia, balanceo de carga) accedan al mismo conjunto de medios cargados.

Las etiquetas de plantilla Sorl.thumbnail (v11) se están utilizando en nuestras plantillas para permitir el cambio de tamaño / recorte flexible de la imagen.

El rendimiento en páginas ricas en medios no es muy bueno, y cuando se accede a una página que contiene miniaturas que se deben generar por primera vez, las solicitudes incluso exceden el tiempo de espera.

Entiendo que esto se debe a que la miniatura está revisando / descargando la imagen original de S3 (que podría ser bastante grande y de alta resolución) y renderizando / revisando / cargando la miniatura.

¿Qué sugieres que sea la mejor solución para esta configuración?

He visto sugerencias de almacenar una copia local de los archivos además de la copia S3 (no muy buena cuando se usan un par de servidores para equilibrar la carga). También he visto que sugería almacenar archivos de 0 bytes para engañar a sorl.thumbnail.

¿Hay alguna otra sugerencia o mejor forma de abordar esto?


La solución más fácil que he encontrado hasta ahora es en realidad este servicio de terceros: http://cloudinary.com/


Actualmente, la miniatura de sorl se crea con almacenes lentos y remotos en mente. Sin embargo, la primera creación de la miniatura se realiza haciendo clic en el almacenamiento, por ejemplo, primero se accede desde la plantilla, pero después de eso las referencias se almacenan en caché en un almacén de valores clave. Aún necesita la primera consulta y creación, así que una solución es usar el nivel bajo api sorl.thumbnail.get_thumbnail con las mismas opciones cuando se carga la imagen. Cuando la imagen cargada agrega este trabajo de creación de miniaturas a una que como el apio.


Puedes usar Sorlery . Combina sorl y apio para crear miniaturas a través de los trabajadores. Es muy cuidadoso de no hacer ningún acceso al sistema de archivos fuera del hilo de trabajo.

La miniatura devuelta inmediatamente (antes de que el trabajador haya tenido oportunidad) se puede controlar configurando THUMBNAIL_DUMMY_SOURCE en un marcador de posición apropiado.

El trabajo se crea la primera vez que se solicita la miniatura, las solicitudes subsiguientes se sirven en la imagen ficticia hasta que finaliza la cadena de trabajo.


Casi igual que la solución de @ Aidan, hice algunos ajustes en sorl-thumbnail. También pregenero miniaturas con apio. Mi código está aquí sorl_thumbnail-async

Pero llegué a saber que easy_thumbnails hace exactamente lo que estaba tratando de hacer, así que lo estoy usando en mi proyecto actual. Puede encontrar una breve publicación útil sobre el tema aquí


Solo un aviso para usuarios de Flask que necesitan miniaturas en S3. Bifurqué flask-thumbnails y creé flask-thumbnails-s3 . Lamentablemente, no hace cola ni asincroniza cosas extravagantes, como las diversas soluciones basadas en Django vinculadas anteriormente (¡las contribuciones son bienvenidas!) ... pero funciona.