beachboyx10 - stock.adobe.com
Comment e-TF1 a préparé la diffusion en ligne de la Coupe du monde 2022
Les footballeurs ne sont pas les seuls à devoir s’entraîner en amont d’une Coupe du monde. Les équipes d’e-TF1 ont pu en faire la preuve en amont et pendant le Mondial 2022.
Du 20 novembre au 18 décembre 2022, TF1 avait la responsabilité de diffuser en clair 28 matchs de la compétition se déroulant au Qatar. Si son canal de diffusion principal demeure la chaîne en clair disponible depuis la TNT, le groupe a vu croître ses dernières années l’usage de sa plateforme de streaming et replay vidéo MyTF1 gérée par l’unité e-TF1.
« E-TF1 regroupe environ 160 collaborateurs sur 4 000 dans le groupe. C’est la filiale digitale du groupe. Elle regroupe des équipes techniques, éditos, marketing, réseaux sociaux et SEO », résume Hugo Lebaron, ingénieur d’études et de développement Web chez e-TF1.
En sus de MyTF1, la division s’occupe des produits TF1Info (lié à LCI) et de l’application jeunesse TFOU MAX.
Sur l’année 2022, selon Médiamétrie, MyTF1 a enregistré 26 millions de visiteurs uniques par mois. « C’est la deuxième plateforme de SVOD en France derrière Netflix », indique Laurent Dechoux, Tech Lead chez e-TF1.
Or, une plateforme comme MyTF1 n'est pas à l'abri de problèmes lors de la diffusion d’un événement sportif. Du « mur » de connexions quelques minutes avant le début d’un match jusqu’à l’interruption pur et simple du flux, les obstacles ne manquent pas.
Un enjeu financier de taille
Un problème majeur aurait été synonyme d’une double peine. Outre la nécessité d’offrir une expérience de visionnage satisfaisante, la Coupe du monde représente un enjeu financier important pour le groupe.
Un peu avant et pendant le match France – Argentine, TF1 proposait des tarifs allant de 180 000 à 330 000 euros pour diffuser des spots de publicité d’une durée de 30 secondes. De son côté, MyTF1 a mis en place un dispositif similaire, dont le prix variait suivant la longueur du spot publicitaire, le moment et l’espace de diffusion ainsi que le nombre d’impressions.
« Les droits de diffusion d’une Coupe du monde coûte très cher. Il faut pouvoir rentabiliser un tel événement », justifie Laurent Dechoux.
Heureusement, l’événement était attendu. E-TF1 a estimé que sa plateforme devait pouvoir accueillir 4,5 millions de téléspectateurs cherchant 15 minutes avant le début d’un match.
De fait, la division a réalisé ses estimations à partir d’expérience passée. Lors de la Coupe du monde 2018, 1,9 million de téléspectateurs avaient visionné le quart de finale France – Uruguay sur MyTF1. Une performance remarquée à l’époque. Lors de l’UEFA 2020, diffusé en juin 2021, ce record de visites « live en une journée » avait été battu : 3,5 millions de téléspectateurs s’étaient connecté à la plateforme. Avant le Mondial au Qatar, le groupe estimait que son trafic Web était multiplié par six pendant des événements sportifs.
« En temps normal, notre audience consomme les contenus à la demande, moins le flux TV», note Laurent Dechoux.
Au vu de l’ampleur de l’événement, il était nécessaire de tester en profondeur la montée en charge. D’autant que des défis attendaient les équipes techniques.
Préparer le terrain
« Par le passé, sur de gros événements, nous devions désactiver l’authentification. Or, s’il n’y a pas de service d’authentification, nous ne pouvons pas proposer de publicités ciblées, ce qui entraîne une chute de revenus », précise le Tech Lead.
La plateforme de streaming, principalement écrite en Go, est hébergée sur AWS. Elle repose à la fois sur des services clés du fournisseur comme la solution Kubernetes EKS, des instances de calcul EC2, du stockage objet S3, ou encore le CDN CloudFront. MyTF1 s’appuie sur des technologies telles Apache Kafka et GraphQL, mais également sur des solutions d’encodage et diffusion de la suite AWS Elemental.
L’équipe d’e-TF1 a mis en place un dispositif d’autoscaling sur « trois axes ». « En lien avec EKS, nous utilisons Horizontal Pod Autoscaler pour pouvoir « scaler » nos services en s’appuyant sur les métriques de consommation CPU et RAM », évoque Hugo LeBaron. « Nous avons mis en place cluster autoscaler pour le provisionnement des nœuds Kubernetes et nous sur-provisionnons des Pods pour réserver de la capacité au moment de la montée en charge », liste-t-il.
Côté front-end, l’utilisateur final peut y accéder via le Web, une application mobile, une Box TV ou encore depuis une Smart TV.
Pour surveiller cette plateforme au quotidien, les équipes techniques ont déployé Prometheus, Grafana et Datadog. D’autres plateformes de streaming vidéo ont mis en place un dispositif technique similaire.
Laurent Dechoux évoque trois profils de charge de travail. Le premier représente l’authentification ainsi que l’usage du back-end. Il est « purement lié au nombre d’utilisateurs et à leurs activités ». Le deuxième type charge de travail correspond à la livraison vidéo. « La courbe de charge est différente : elle atteint rapidement un plateau. Une fois que l’utilisateur a lancé sa vidéo ou son stream, il ne génère plus de charge sur le back-end, mais la vidéo continue à se charger », explique-t-il. Le troisième profil de charge concerne l’affichage de la publicité. « Pendant les spots de publicités diffusés à l’antenne, sur le digital, nous les remplaçons par un tunnel de publicités personnalisés pour l’utilisateur. Cela veut dire que pendant une coupure (par exemple une mi-temps), tous les utilisateurs vont solliciter le back-end lié à la publicité. Cela représente un gros pic de charge ».
Tirs de charge pour tirs au but
Six mois avant la compétition, l’équipe e-TF1 a préparé une batterie de tests pour que la diffusion des matchs se déroulent au mieux le jour J.
« Nous avons réalisé des benchmarks sur des volumes cibles, ceux que l’on aurait pendant la Coupe du monde », poursuit le Lead Tech.
Toutefois, l’équipe ne pouvait pas tester l’ensemble des briques de MyTF1. « Nous nous sommes concentrés sur certains services, notamment l’authentification, notre proxy pub et l’Ad server, responsables de la création d’un tunnel de publicités personnalisées, les services backend en charge des données utilisateurs, ainsi que le service de livraison vidéo », décrit Laurent Dechoux. Ce travail a été mené en collaboration avec les prestataires, notamment pour les briques d’authentification et de gestion des publicités.
Dans ce cadre, l’équipe technique d’e-TF1 a réalisé des captures de trafic en production afin d’obtenir des données sur des appels de flux en provenance du Web et des applications mobiles. « Cela nous a servi de base de travail pour mettre au point nos scénarios de tests : l’authentification, la création de compte, le renouvellement de mot de passe, etc. »
Problème, obtenir des données utilisateurs en masse n’est pas évident. La solution ? Le recours aux données synthétiques. « Il nous fallait un volume de données suffisamment conséquent dans les bases de test afin qu’il soit représentatif de celui rencontré en production », avance Laurent Dechoux.
Dans cette phase, e-TF1 a simulé la présence d’1,5 million d’utilisateurs sur sa plateforme et un pic de 10 000 connexions par seconde. « Nous avons testé 75 000 requêtes par seconde sur nos briques back-end dédiées à la publicité », ajoute Hugo Lebaron.
Logiquement, ces tests ne pouvaient être menés sur la plateforme de streaming en production. L’équipe d’E-TF1 a donc orchestré la réplication de sa plateforme dans un environnement de test établi sur un cluster AWS EKS. « Nous voulions une réplication au plus près de notre plateforme en production, mais nous n’avons déployés uniquement les services qui subiraient la charge », relate l’ingénieur d’études.
Pour ce faire, e-TF1 a déployé l’outil de tests de charge open source K6, proposé par Grafana. « C’est un outil hautement scalable et simple de prise en main », juge-t-il.
Il a été décidé de décorrélé cette plateforme de test au niveau réseau en la déployant sur Google Cloud pour envoyer des requêtes vers la réplique de MyTF1.
Les données émises par K6 était directement remontées dans Datadog, tout comme les indicateurs de profiling Go. Les métriques applicatives, elles ont été analysées à l’aide du couple Prometheus – Grafana.
Tous ces tests ont été déclenchés à travers un pipeline GitHub Actions. « Le premier tir a été effectué sur une configuration isoproduction, nous avons effectué un travail d’analyse, puis corriger et ajuster certaines choses de manière cyclique pour atteindre les performances attendues », résume Laurent Dechoux.
Des ajustements nécessaires
Il faut comprendre que le premier tir ne fut pas concluant. C’est ce que révèle Thierry Bonhomme, directeur technique d’e-TF1 auprès d’un porte-parole d’AWS.
« Nous avons travaillé avec les équipes front-end pour revoir les flux d’authentification qui utilisaient beaucoup de code. Nous avons aussi travaillé avec notre partenaire pour afin d’obtenir des dépassements de quotas pendant les matchs », évoque le Lead tech.
Côté applicatif, e-TF1 a ajouté de « petites couches de cache in-memory » Redis pour réduire la charge réseau, en particulier l’utilisation d’Elasticache.
L’équipe technique a œuvré sur le dimensionnement de ses pods manquant de ressources CPU et de RAM, ainsi que sur l’autoscaling horizontal ».
Il s’agissait de « muscler la plateforme avant chaque match », ajoute Hugo Lebaron. « Nous avons modifié le nombre minimum de nœuds au niveau des groupes d’autoscaling ».
En ce qui concerne, la répartition de charge liés aux services publicitaires, e-TF1 s’est rapproché d’AWS afin de préchauffer « certains ALB (répartiteurs de charge applicative N.D.L.R) », ajouter des instances node groups et ajuster le suivi des connexions.
De même, il a fallu ajuster la configuration des bases de données DynamoDB. « Nous les avons réglé sur l’offre « on demand » parce que l’autoscaling que propose AWS par défaut ne permet pas de gérer un pic de charge instantané. Il y a une latence de déclenchement qui génère des erreurs le temps qu’il soit pris en compte », déclare Laurent Dechoux.
Après ces ajustements, les modifications ont été déployées en production, puis testées à nouveau. Avec succès.
La suite de l’exercice consistait à préparer le dispositif de suivi pendant les matchs. « Suivant la criticité des matchs, nous avons effectué des analyses d’audience afin d’ajuster le dispositif humain en conséquence », explique Hugo Lebaron. « Evidemment, le dispositif a grossi au fur et à mesure de la compétition ».
Face aux attaques DDoS, e-TF1 a enfilé les protège-tibias du cloud
Aux enjeux de performance s’est greffé, à partir du huitième de final, des problématiques de sécurité. « Nous avons subi des attaques DDoS. Elles avaient peu ou prou le même profil : elles duraient une dizaine de minutes pendant un match », raconte l’ingénieur d’études. « Lors de la demi-finale France - Maroc, nous avons comptabilisé 40 millions de requêtes malignes en dix minutes. L’objectif des attaquants était bien d’atteindre nos back-end et de faire écrouler nos services ».
Hugo LebaronIngénieur d'études et de développement Web, e-TF1
E-TF1 s’est équipé en conséquence. L’équipe a utilisé le WAF d’AWS, a mis en place des limites de connexion par IP, et a bénéficié de la base de données référentielle d’AWS listant les IP ayant mauvaises réputations afin de les bannir. Comme les patterns d’attaques évoluaient sensiblement de match en match, les responsables de la sécurité ont fait évoluer le dispositif en conséquence, jusqu’à bloquer les IP en provenance de pays qui « n’avaient rien à faire ici ».
Si la France a perdu en finale face à l’Argentine au terme d’un match d’anthologie, les deux ingénieurs, eux, sont satisfaits du dispositif mis sur pied par e-TF1. « 2,4 millions d’utilisateurs en simultané pendant la finale selon Médiamétrie, 500 000 créations de compte, ce ne sont pas des audiences que nous voyons tous les jours », signale Hugo Lebaron.
Entre le data center on premise de TF1, le partenaire Stream Root et CloudFront, les responsables ont mesuré un pic de 3,6 To par seconde sur le dispositif CDN. « CloudFront à lui tout seul a mesuré un pic de 576 000 requêtes par seconde. Nous avons enregistré 30 000 requêtes par seconde au niveau de Kubernetes », liste-t-il.
Selon Laurent Dechoux, hormis « quelques pépins », le dispositif a tenu la charge et il n’a pas été nécessaire de désactiver l’authentification. « La préparation, ça paye ».
Il y a eu toutefois de petites surprises. La perte de clusters Prometheus, le mauvais dimensionnement d’un contrôleur Linkerd et la gestion des DDoS, le préprovisionnement des pods Kubernetes font partie des éléments à retravailler.
L’équipe e-TF1 veut ainsi se préparer aux prochains événements sportifs d’importance, mais également aux imprévus, par exemple quand les présentateurs rappellent l’existence de MyTF1 entraînant des pics imprévus.
Propos recueillis lors du salon Kubernetes Community Day le 7 mars 2023.