Le Blog Amazon Web Services

Comment GoPro a optimisé son pipeline de transcodage multimédia à grande échelle avec les instances Amazon EC2 Spot

GoPro transforme la capture et le partage d’images dans le monde entier, offrant à chacun la possibilité de vivre et revivre des moments mémorables de façon immersive et captivante. Depuis 2002, l’entreprise conçoit des caméras et des logiciels polyvalents pour aider ses clients à optimiser leur contenu. En complément de sa gamme principale de produits, GoPro propose un abonnement basé sur Amazon Web Services (AWS). Cet abonnement enrichit l’expérience utilisateur avec des fonctionnalités telles que le stockage cloud illimité, la création automatique de vidéos, l’édition synchronisée entre appareils, la diffusion en direct et le partage sur les réseaux sociaux. Actuellement, GoPro traite des volumes considérables de données vidéo chaque mois pour environ 2,5 millions d’abonnés.


Figure 1 : Traitement multimédia GoPro.

GoPro utilise un pipeline propriétaire de transcodage et de traitement multimédia, doté d’une capacité de calcul massive, pour prendre en charge une large gamme d’appareils, de bitrates, de codecs et de bandes passantes. Lorsque le contenu est ingéré dans Amazon Simple Storage Service (Amazon S3), des tâches de pré-traitement sont exécutées pour collecter des informations sur les métadonnées, la résolution et le codec afin de générer des thumbnails vidéo. Différentes classes de tâches de transcodage s’exécutent sur différents clusters Amazon Elastic Container Service (Amazon ECS), conteneurs Docker et builds de configuration personnalisées avec FFmpeg sur Amazon EC2. D’autres outils propriétaires sont utilisés pour combiner la vidéo et l’audio, le transcodage GPMF (GoPro Metadata Format ou General Purpose Metadata Format), le dé-multiplexage et le transcodage en multiplex sur Amazon EC2.

Face à la croissance des abonnés et du contenu, GoPro avait besoin d’un pipeline plus adaptable et évolutif. L’auto-scaling des instances gère les variations saisonnières du trafic. Un worlfow asynchrone et une architecture événementielle permettent l’exécution simultanée de tâches pour l’efficacité et la résilience. GoPro utilise des instances Spot Amazon EC2 pour réduire les coûts de 50 à 70% par rapport aux instances à la demande.


Figure 2 : Présentation du traitement multimédia AWS.

GoPro a mis en place un repli automatique vers les instances à la demande en cas d’indisponibilité des instances Spot. La sélection des types d’instances se fait sur des attributs pour les clusters Amazon ECS, utilisant des instances CPU et GPU. De plus, GoPro a automatisé le drainage des instances Spot interrompues à l’aide d’une série de scripts Terraform.

GoPro utilise la sélection de types d’instances basée sur les attributs pour les clusters Amazon ECS et utilise à la fois des instances CPU et GPU dans les groupes d’auto-scaling.

instance_requirements = {
memory_mib_min = 32768
memory_mib_max = 131072
vcpu_count_min = 32
vcpu_count_max = 64
cpu_manufacturers = ["amd", "intel"]
excluded_instance_types = (["a*", "t*", "m6g*", "c6g*", "c7g*", "d*", "h*", "i*", "g*", "p*", "inf1*", "dl*", "vt*", "x*", "r6g*", "z1*", "f1*"])
}

Tous les autres groupes d’auto-scaling utilisent des listes d’instances indiquées dans l’exemple suivant.

spot-instance-type = [
  { instance_type = "r5b.4xlarge" },
  { instance_type = "r4.4xlarge" },
.
.
.
]
spot-instance-type = [{ instance_type = "g4dn.xlarge" }]
spot-instance-type = [{ instance_type = "c3.4xlarge" },
  { instance_type = "c3.8xlarge" },
  { instance_type = "c4.4xlarge" },
  { instance_type = "c4.8xlarge" },
.
.
.
]

Les groupes d’auto-scaling sont configurés pour optimiser la capacité, en identifiant les pools d’instances Spot qui sont optimisés spécifiquement pour assurer une disponibilité maximale de la capacité.

spot-allocation-strategy = "capacity-optimized"

La résilience du flux de travail est gérée via une série de fonctions AWS Lambda :

  1. Les événements AutoScaling Group (ASG) Scale-In CloudWatch déclenchent une fonction Lambda (appelée « General Drain ») qui effectue un drainage de l’instance en cours de terminaison.
  2. Une autre fonction Lambda (appelée Spot Drain) est spécifique aux Spot ASG et et est activée lors de la réception d’une alerte d’interruption d’instance EC2 Spot.
  3. Une autre fonction Lambda est dédiée à la collecte de métriques spot et est déclenchée lors des événements InstanceTerminated, RunInstances et EC2 Spot Interruption.


Figure 3 : Flux de travail de transcodage avec le scaling d’Amazon EC2

L’ensemble du workflow est surveillé sur un tableau de bord personnalisé pour GoPro, alimenté par des functions Lambda. Ce dashboard permet de surveiller et d’analyser les instances AWS Spot utilisées avec Amazon ECS, affichant les taux d’interruption Spot, les types d’instances, ainsi que d’autres statistiques pertinentes. (Figure 4).

Figure 4 : Affichage du tableau de bord des statistiques liées aux spots.

Grâce à cette architecture, GoPro exécute désormais plus de 70% de ses charges de travail conteneurisées sur des instances Spot, réalisant d’importantes économies.

Conclusion

Dans cet article, nous avons exploré comment GoPro a optimisé ses ressources de calcul grâce aux instances Spot Amazon ECS, améliorant ainsi son processus de transcodage au sein de sa chaîne d’approvisionnement multimédia (« media supply chain ») à grande échelle. Pour en savoir plus sur les meilleures pratiques des instances Spot, consultez la documentation détaillée disponible dans Bonnes pratiques pour EC2 Spot.

Iryna Oliinykova

Iryna Oliinykova

Iryna Oliinykova est une Solutions Architect AWS qui travaille en étroite collaboration avec les clients Media et Divertissement en France. Ayant un background d’ingénieure système et en s’appuyant sur une connaissance approfondie du domaine des médias, elle aide les clients de ce secteur à adopter de manière transparente les technologies cloud pour atteindre leurs principaux objectifs commerciaux et stimuler l’innovation.