web-dev-qa-db-fra.com

Dois-je conserver des images sur EBS ou S3?

Je migre mon serveur Java, Tomcat, Mysql vers AWS EC2.

J'ai déjà joint un volume EBS pour stocker les données MySql. Dans mon application Web, les gens peuvent télécharger des images. Je devrais donc les persister. Il y a 2 alternatives dans mon esprit:

  1. Enregistrez les images téléchargées sur le volume EBS.
  2. Utilisez le service S3.

Ce qui suit sont mes notes, soyez sceptiques à leur sujet, car mon expertise n'est pas sur les serveurs, mais sur le développement de logiciels.

  • EBS plus: le stockage S3 est plus cher. (0,15 $/Go> 0,1 $/Go)

  • S3 plus: le service de la statique à partir d'EBS peut influencer négativement les performances de mon serveur Web. Est-ce vrai? La diffusion d'images affecte-t-elle notablement les performances du serveur? Pour S3, mon serveur ne sera pas responsable du service de la statique.

  • S3 plus: la diffusion de données statiques à partir d'EBS peut entraîner des coûts d'E/S, probablement mineurs.

  • EBS plus: les gens disent qu'EBS est plus rapide.

  • S3 plus: Les gens disent que S3 est plus sûr pour la persistance.

  • EBS plus: pas besoin d'apprendre l'API, il est simple d'enregistrer les images sur le volume EBS.

À savoir, je ne peux pas décider, sera heureux si vous guidez.

Merci

64
javanes

J'utilise actuellement S3 pour un projet et cela fonctionne extrêmement bien.

EBS signifie que vous devez gérer un volume + des machines pour le joindre. Vous devez ajouter de l'espace pendant le remplissage et effectuer des sauvegardes (sans dire que vous ne devriez pas sauvegarder vos données S3, juste que ce n'est pas aussi critique).

Il est également plus difficile à mettre à l'échelle: lorsque vous souhaitez ajouter des machines supplémentaires, vous devez soit retirer les images sur une machine distincte, soit cloner les images sur l'ensemble. Cela signifie également que vous ajoutez un goulot d'étranglement: vous devrez gérer votre propre processus de téléchargement qui sera soit téléchargé sur toutes les machines, soit géré par une seule machine.

Je recommande S3: c'est réglé et oubliez. N'importe quel nombre de machines peuvent effectuer des téléchargements en parallèle et vous n'avez pas vraiment besoin d'informer les autres machines du téléchargement.

De plus, vous pouvez utiliser Amazon Cloudfront comme CDN bon marché devant les images au lieu de télécharger directement depuis S3.

49
Gary Richardson

La comparaison des prix n'est pas tout à fait correcte: les frais S3 sont de 0,14 $ par Go utilisé, tandis que les frais EBS sont de 0,10 $ par Go provisionné (la taille de votre volume EBS), que vous l'utilisiez ou non. En conséquence, S3 peut ou non être moins cher que EBS.

53
Kai Pommerenke

J'ai architecturé des solutions sur les sites de photographie AWS for Stock qui stockent des millions d'images couvrant des To de données, je voudrais partager certaines des meilleures pratiques dans AWS pour vos besoins:

P1) Stockez le fichier image originale dans l'option standard S3

P2) Stockez les images reproductibles comme les pouces, etc. dans l'option de redondance réduite S3 (RRS) pour réduire les coûts

P3) Les métadonnées sur les images, y compris l'URL S3, peuvent être stockées dans Amazon RDS ou Amazon DynamoDB selon la complexité de la requête. Recherchez les entrées d'Amazon RDS. Si votre requête est complexe, il est également courant de stocker les métadonnées dans Amazon CloudSearch ou Apache Solr.

P4) Présentez vos pouces aux utilisateurs à faible latence à l'aide d'Amazon CloudFront.

P5) Mettez votre conversion d'image en file d'attente via SQS ou RabbitMQ sur Amazon EC2

P6) Si vous prévoyez d'utiliser EBS, ils ne sont pas évolutifs avec votre EC2. Donc, idéalement, vous pouvez utiliser GlusterFS comme pool de stockage commun pour toutes vos images. Plusieurs Amazon EC2 en mode Auto Scaled peuvent toujours s'y connecter et accéder/écrire des images.

12
Harish Ganesan

Vous avez déjà souligné les avantages et les inconvénients des deux.

Si vous prévoyez de stocker des téraoctets d'images, avec des besoins de stockage augmentant jour après jour, S sera probablement votre meilleur pari car il est conçu spécialement pour ce genre de situations. Vous obtenez un espace de stockage illimité, sans avoir à vous soucier de partitionner vos données sur de nombreux EBS volumes.

Le coût récurrent du S3 est qu'il est 50% plus cher que l'EBS. Vous devrez également apprendre l'API et l'implémenter dans votre application, mais c'est une dépense unique que je pense que vous devriez pouvoir absorber très rapidement.

8
Daniel Vassallo

Vous attendez-vous à ce que les images durent indéfiniment?

Amazon EBS FAQ est assez clair; le taux d'échec annuel n'est pas "essentiellement nul"; ils indiquent 0,1% à 0,5%. C'est mieux que le disque sous votre bureau, mais il en faudrait sorte de sauvegarde.

5
sgb