Django + S3 (boto) + Sorl Thumbnail: Suggestions pour l'optimisation

j'utilise le backend de stockage S3 sur un site Django que je développe, à la fois pour réduire la charge du ou des serveurs EC2, et pour permettre à plusieurs serveurs web(redondance, équilibrage de la charge) d'accéder au même ensemble de supports téléchargés.

Sorl.les balises de template thumbnail (v11) sont utilisées dans nos templates pour permettre le redimensionnement/recadrage d'image flexible.

la Performance sur les pages riches en médias n'est pas très bonne, et quand une page contenant des vignettes doit être générée pour la première fois est accessible, les demandes en même temps.

je comprends que cela est dû à la vérification sorl de la vignette/téléchargement de l'image originale de S3 (qui pourrait être assez grande et haute résolution), et le rendu/vérification/téléchargement de la vignette.

Que suggérez-vous est la meilleure solution pour cette installation?

j'ai vu des suggestions de stocker une copie locale des fichiers en plus du S3 copie (et non grande lorsqu'un couple de serveur sont utilisés pour l'équilibrage de la charge). J'ai aussi vu la suggestion de stocker des fichiers 0-byte pour tromper sorl.vignette.

y at-il d'autres suggestions ou de meilleures façons d'aborder ce?

13
demandé sur Matt Austin 2011-04-06 11:39:37

5 réponses

sorl thumbnail est maintenant créé avec des stockages lents à distance à l'esprit. La première création de la vignette est cependant faite en tapant le stockage, par exemple d'abord accédé à partir du modèle, mais après cela les références sont mises en cache dans un magasin de valeur de clé. Vous avez toujours besoin de la première requête et de la création, et bien une solution est d'utiliser l'api de bas niveau sorl.vignette.get_thumbnail avec les mêmes options lorsque l'image est téléchargée. Lorsque l'image téléchargée ajoute cette tâche de création de vignette à un que comme céleri.

7
répondu sorl 2011-04-06 23:30:43

vous pouvez utiliser Sorlerie . Il combine sorl et céleri pour créer des vignettes via les ouvriers. Il est très prudent de ne pas faire d'accès au système de fichiers en dehors du thread worker.

la vignette retournée immédiatement (avant que le travailleur n'ait eu une chance) peut être contrôlée en plaçant votre THUMBNAIL_DUMMY_SOURCE dans un espace réservé approprié.

le travail est créé la première fois que la vignette est demandée, les requêtes suivantes sont servi l'image factice jusqu'à ce que le thread worker soit terminé.

3
répondu Aidan 2013-05-25 22:19:44

presque comme la solution de @Aidan, j'ai fait quelques retouches sur sorl-thumbnail. J'ai aussi pré-généré des vignettes avec du céleri. Mon code est ici sorl_thumbnail-async

Mais je suis venu à connaître easy_thumbnails fait exactement ce que j'essayais de faire, donc je l'utilise dans mon projet en cours. Vous pourriez trouver utile, court post sur le sujet est ici

1
répondu chhantyal 2014-01-23 10:56:33

la solution la plus simple que j'ai trouvée jusqu'à présent est en fait ce service tiers: http://cloudinary.com/

1
répondu Aidan 2015-04-04 11:58:27

juste un avertissement pour les utilisateurs de flacons qui ont besoin de vignettes sur S3. J'ai bifurqué flacon-vignettes et créé flacon-vignettes-s3 . Malheureusement, ne fait pas de file d'attente fantaisiste ou des trucs asynchrones, comme les diverses solutions basées sur Django liées ci-dessus (les contributions sont les bienvenues!)... mais il fonctionne.

1
répondu Jaza 2015-04-10 01:02:47