Comment maximiser les performances de l'instance EC2

11

Avis de non-responsabilité: je suis un développeur frontal dans un monde de serveurs.

Salut les gars. J'ai une instance de serveur sur EC2, le c5d.9xlarge, dont les spécifications sont:

  • Système: Ubuntu 18.04
  • vCPU: 36 threads / cœurs
  • Mémoire: 72 Go
  • Stockage: SSD NVMe 900 Go
  • Bande passante EBS dédiée: 7 000 Mbps
  • Performances réseau: 10 Gbps

Scénario: j'utilise ce serveur pour télécharger de grandes vidéos (4K, 1+ h) et les traiter à l'aide de FFMPEG mais par rapport à mon serveur UpCloud précédent avec 12 cœurs et 48 Go de RAM, ce serveur EC2 prend 1,5 fois plus de temps à télécharger et à traiter , ce qui ne devrait pas être le cas, je pense.

Question: Comment puis-je maximiser les performances pour ce que je paie?

Martavis P.
la source
Vous devriez regarder le coût du AWS Elastic Transcoder pour voir s'il fonctionne mieux pour vous.
Tim
Merci @Tim. Je l'ai vu il y a quelque temps, mais j'ai en fait quelques appels de plus sur ce serveur, alors j'ai pensé que je les combinerais.
Martavis P.

Réponses:

19

Votre c5d.9xlargeest livré avec un stockage d'instance de 900 Go (également appelé stockage éphémère ) - l'utilisez-vous pour stocker et traiter les fichiers? Bien que votre instance dispose d'une bande passante EBS dédiée, le stockage SSD sur instance sera toujours beaucoup plus rapide . Je vous suggère de l'utiliser pour tous les fichiers source et temporaires et de stocker uniquement les résultats sur EBS.

Il y a cependant quelques mises en garde avec le stockage d'instance:

  1. Vous devez le formater et le monter avant de pouvoir l'utiliser. Référez-vous à cette réponse pour plus de détails: Montez automatiquement le stockage d'instance SSD sur AWS EC2 dans Ubuntu 16.04

  2. Le contenu est effacé lorsque vous arrêtez et redémarrez l'instance. Il survit au redémarrage mais pas à l'arrêt / démarrage.


Mise à jour: Par défaut, le SSD n'est pas monté - vous devrez suivre les étapes de la réponse liée ci-dessus pour l'utiliser. Dans la configuration standard après le démarrage, vous utiliserez l'EBS qui est plus lent que le SSD.

Ensuite , vous devrez vous assurer que vous êtes en train de l' utiliser - régler le téléchargement , travail et répertoire temporaire à ce point de montage SSD.

Ou encore mieux - puisque vous avez 72 Go de RAM - créez un disque RAM et utilisez-le pour les fichiers temporaires. Ce sera encore plus rapide que SSD (si les fichiers conviennent).

Tout d'abord, ignorez la vitesse de téléchargement et optimisez le traitement - téléchargez le fichier sur EBS et chronométrez le traitement, puis téléchargez sur SSD et chronométrez puis sur disque RAM et chronométrez le traitement. Voyez combien ils diffèrent.

La vitesse de téléchargement sera affectée par de nombreux aspects, notamment la distance et la latence entre vous et la région AWS vers laquelle vous téléchargez. Utilisez-vous une région AWS près de chez vous?

Concernant les performances du processeur - vous disposez de 36 processeurs, mais chaque cœur peut être plus lent que les cœurs de votre précédente machine à 12 cœurs. Cela dépend de l'architecture du processeur et de la vitesse d'horloge. Cependant, si vous pouvez paralléliser le traitement vidéo en 36 threads, vous devriez être mieux dans cette instance. Si vous utilisez un seul thread, vous n'obtiendrez peut-être pas les performances souhaitées.

J'espère que cela pourra aider :)

MLu
la source
Oui, le disque dur est utilisé pour le stockage pendant le traitement des fichiers et les fichiers sont temporaires jusqu'à la fin du processus. Les fichiers résultants sont envoyés à S3. En fait, je ne sais pas non plus si le SSD est monté. Je commence à réaliser qu'AWS n'utilise pas les spécifications comme paramètre par défaut. Le montage d'un SSD accélère-t-il le téléchargement? Suivi: des idées sur la façon de maximiser les spécifications de processeur autorisées?
Martavis P.
@MartavisP. ajouté quelques mises à jour à la réponse.
MLu
Wow, merci beaucoup pour l'information! J'étudierai et appliquerai ce que vous avez écrit.
Martavis P.
1
Très bonne réponse. Vous devez effectuer un benchmark pour trouver le goulot d'étranglement, le décomposer en temps de téléchargement, temps de traitement, utilisation du processeur, utilisation d'EBS / réseau, etc. que vous pouvez contourner en téléchargeant des données dans des threads parallèles vers EC2 / S3. Netflix a cette vidéo sur YouTube qui pourrait être intéressante, mais faites vos étapes de diagnostic avant de vous soucier de ce genre de détails.
Tim
1

Y a-t-il une possibilité d'étudier des alternatives? Pour le prix d'un c5d.9xlarge, même si vous bénéficiez d'une remise substantielle, sur le marché des serveurs dédiés, vous pourriez avoir plusieurs machines équivalentes ou meilleures

L'utilisation du cloud pour ce type de problème à l'échelle verticale est une recette de surpaiement et, comme vous l'avez vu, de mauvaises performances

Désolé pour le genre de non-réponse, mais je n'ai pas assez de représentant pour commenter

Luke F
la source
C'était une réduction pour moi, en passant d'UpCloud. Alors, que recommandez-vous?
Martavis P.
1
Il semble que le même calcul dans le cloud soit toujours environ 4x le prix d'un serveur loué mensuellement chez un hébergeur aléatoire. Ensuite, il y a des remises d'entreprise (~ 30%) et vous pouvez réserver pour 3 ans (2x moins cher mais maintenant bien pire que cet hébergeur aléatoire). Et ce serveur loué mensuellement semble généralement être 1 / 12e du prix d'achat pur et simple du matériel. C'est du moins ce que je vois. Ainsi, dans le cloud, vous achetez le matériel tous les 3 mois, mais vous n'en êtes pas propriétaire.
usr
Oui, c'est un bon point, mais vous devez vous rappeler que vous payez pour l'entretien et la commodité, comme tout dans la vie. Je préfère laisser AWS être mon mécanicien que de passer des jours à essayer de comprendre comment corriger une panne de serveur. C'est une bonne connaissance, mais en fin de compte, ma carrière concerne le code, le cloud fonctionne donc pour moi.
Martavis P.