From 7c5e5138dae1b7b655d287731d2e9a8aa27fc84d Mon Sep 17 00:00:00 2001 From: rpinsonneau Date: Fri, 30 Aug 2024 07:54:27 +0000 Subject: [PATCH] Publishing Site tech.tf1.fr at a7709bc479fcfe323a2d297905adeebad7de42f9 on Fri Aug 30 07:54:27 UTC 2024 --- authors/index.html | 2 +- authors/jbbernard/avatar.jpg | Bin 0 -> 54490 bytes authors/jbbernard/index.html | 9 + authors/jbbernard/index.xml | 1 + authors/jbbernard/page/1/index.html | 1 + authors/page/2/index.html | 2 +- categories/index.html | 2 +- categories/page/2/index.html | 2 +- categories/page/3/index.html | 2 +- index.html | 4 +- index.xml | 3 +- page/2/index.html | 4 +- page/3/index.html | 4 +- .../2020/architecture/presentation/index.html | 2 +- post/2020/global/launch/index.html | 2 +- .../qa/migration-argo/images/argo-logo.svg | 1 + .../migration-argo/images/workflow.excalidraw | 1315 +++++++++++++++++ .../qa/migration-argo/images/workflow.svg | 29 + post/2024/qa/migration-argo/index.html | 112 ++ post/index.html | 4 +- post/index.xml | 3 +- post/page/2/index.html | 4 +- post/page/3/index.html | 4 +- sitemap.xml | 2 +- tags/index.html | 2 +- tags/page/2/index.html | 2 +- tags/page/3/index.html | 2 +- 27 files changed, 1495 insertions(+), 25 deletions(-) create mode 100644 authors/jbbernard/avatar.jpg create mode 100644 authors/jbbernard/index.html create mode 100644 authors/jbbernard/index.xml create mode 100644 authors/jbbernard/page/1/index.html create mode 100644 post/2024/qa/migration-argo/images/argo-logo.svg create mode 100644 post/2024/qa/migration-argo/images/workflow.excalidraw create mode 100644 post/2024/qa/migration-argo/images/workflow.svg create mode 100644 post/2024/qa/migration-argo/index.html diff --git a/authors/index.html b/authors/index.html index ac4474d..6632606 100644 --- a/authors/index.html +++ b/authors/index.html @@ -2,7 +2,7 @@ Navigate back to the homepage -

L'équipe

Blog technique e-TF1

-
\ No newline at end of file diff --git a/index.html b/index.html index bc73824..3ab5a13 100644 --- a/index.html +++ b/index.html @@ -1,9 +1,9 @@ -Blog technique e-TF1
\ No newline at end of file diff --git a/index.xml b/index.xml index 2a58aa5..44fe47f 100644 --- a/index.xml +++ b/index.xml @@ -1,4 +1,5 @@ -Blog technique e-TF1https://tech.tf1.fr/Recent content on Blog technique e-TF1Hugo -- gohugo.iofr-FRWed, 26 Jun 2024 09:00:00 +0000Déploiement d'un LLM à l'échelle avec TGIhttps://tech.tf1.fr/post/2024/ia/inference-llm-tgi/Wed, 26 Jun 2024 09:00:00 +0000https://tech.tf1.fr/post/2024/ia/inference-llm-tgi/L’inférence d’un Large Language Model Les LLMs (Large Language Model) sont de plus en plus adoptés en entreprise, leur coût, leur mise à l’échelle en production ou la confidentialité des données peuvent être de véritables défis. +Blog technique e-TF1https://tech.tf1.fr/Recent content on Blog technique e-TF1Hugo -- gohugo.iofr-FRThu, 01 Aug 2024 09:00:00 +0000Migration de Jenkins vers Argohttps://tech.tf1.fr/post/2024/qa/migration-argo/Thu, 01 Aug 2024 09:00:00 +0000https://tech.tf1.fr/post/2024/qa/migration-argo/La migration de Jenkins vers une solution basée sur Docker avec Argo Workflows et Argo CD est une démarche stratégique pour l’équipe QA visant à moderniser et optimiser les processus de test automatisés avec une possibilité d’intégration continue (CI) et de déploiement continu (CD). +Contexte de la migration Historiquement, l’équipe QA de la DT eTF1 utilisait Jenkins comme orchestrateur de lancement pour ses tests automatisés, via des pipelines d’exécution lancés manuellement ou de manière automatique.Déploiement d'un LLM à l'échelle avec TGIhttps://tech.tf1.fr/post/2024/ia/inference-llm-tgi/Wed, 26 Jun 2024 09:00:00 +0000https://tech.tf1.fr/post/2024/ia/inference-llm-tgi/L’inférence d’un Large Language Model Les LLMs (Large Language Model) sont de plus en plus adoptés en entreprise, leur coût, leur mise à l’échelle en production ou la confidentialité des données peuvent être de véritables défis. La solution la plus simple pour réaliser l’inférence d’un modèle consiste à payer une solution clé en main, telle que : openAI (chatGPT) Google (Gemini) Anthropic (Claude) Certains services, comme AWS Bedrock permettent de déployer différents modèles.Gestion du Server-Side Ad Insertion (SSAI) sur nos chaînes FASThttps://tech.tf1.fr/post/2023/pub/streaming-fast-ssai/Mon, 06 Nov 2023 09:00:00 +0000https://tech.tf1.fr/post/2023/pub/streaming-fast-ssai/Chaînes FAST FAST est l’acronyme pour Free Ad-supported Streaming Television. Il s’agit de chaînes en streaming gratuites avec de la publicité. Le principe est de reprendre des contenus du catalogue TF1, typiquement en AVOD (Advertising Video on Demand) et de l’assembler pour constituer une grille de programmation qui alimentera une chaîne live. C’est le principe de Stream sur MYTF1. On parle alors de re-linéarisation des contenus. Mise en oeuvre des flux origin eTF1 assure le delivery des contenus VOD en HLS (HTTP Live Streaming) et DASH (Dynamic Adaptive Streaming over HTTP).Workflow d'encodage et delivery vidéo avec Temporalhttps://tech.tf1.fr/post/2023/architecture/workflow-video-avec-temporal/Sun, 23 Jul 2023 09:00:00 +0000https://tech.tf1.fr/post/2023/architecture/workflow-video-avec-temporal/Contexte du nouveau workflow Dans un objectif de faire évoluer et de rendre plus flexible notre workflow d’encodage et de mise à disposition de nos flux vidéo (ce que nous appelons le delivery, principalement aux formats Dash et HLS), nous avons souhaités effectuer une refonte applicative de cette partie de notre stack applicative. diff --git a/page/2/index.html b/page/2/index.html index 5d9b385..65d7157 100644 --- a/page/2/index.html +++ b/page/2/index.html @@ -1,9 +1,9 @@ -Blog technique e-TF1
\ No newline at end of file diff --git a/page/3/index.html b/page/3/index.html index d5eeb6b..660a777 100644 --- a/page/3/index.html +++ b/page/3/index.html @@ -1,9 +1,9 @@ -Blog technique e-TF1 \ No newline at end of file diff --git a/post/2020/architecture/presentation/index.html b/post/2020/architecture/presentation/index.html index a7b0721..2bf543e 100644 --- a/post/2020/architecture/presentation/index.html +++ b/post/2020/architecture/presentation/index.html @@ -9,7 +9,7 @@ GraphQL code generator génère les composants/hooks Apollo via nos queries/mutations en typescript, ce qui permet de s’assurer que ces requêtes sont valides.

Helmet

Helmet est la librairie (react-helmet-async et non pas react-helmet) dédiée au SEO. Elle nous permet d’enrichir au fur et à mesure de la profondeur des composants le rendu des balises metas. Les balises metas sont la pour aider les robots des moteurs de recherches à comprendre le contenu de nos pages et faire des affichages “riches”.

Webpack & Lazyloading

Nous utilisons Webpack pour packager nos ressources statiques (modules, chunk…). Le support du code splitting permet le découpage des fichiers JS pour permettre un chargement de l’application optimisé : seules les ressources réellement utilisées à un instant T sont chargées (lazy loading).

Jest / React Testing Library

Nous utilisons Jest pour nos tests unitaires, ce qui nous permet de vérifier la non-régression du front MYTF1, tout au long du développement de nos features et de garantir la fonctionnalité de composants complexes.

Les Applications Mobiles

Les applications mobiles sont natives et codées en Swift (iOS) et Kotlin (Android) implémentant une architecture modulaire multi-couches.

Couche Networking

Un client GraphQL Apollo intégré dans l’application nous permet de consommer l’API backend GraphQL.

Couche Core

Couche contenant la logique métier et les modèles utilisés dans l’application.

Couche Présentation

Implémentant une architecture MVI unidirectionnelle qui représente une évolution de l’architecture MVVM avec des bindings en RxSwift & RxJava. L’avantage d’une telle architecture est un flux de données plus facile à suivre et debugger.

L’IPTV

Les technologies utilisées sur l’IPTV sont très variées et dépendent du modèle de box. Globalement on retrouve trois familles :

  • HTML/JS, principalement SFR et Orange
  • QT/QML, très utilisé par Free
  • Android, notamment sur Bouygues et Free

Dans le cas des box Android, un moteur QT/QML tourne dans l’application afin de réutiliser le code QT/QML.

Le player

Nous développons notre propre player pour différentes plateformes :

Nous privilégions le plus possible de code en natif ou JS Vanilla pour avoir le moins de dépendances possible et optimiser les performances.

Tous les players sont constitués d’une couche métier (Core) et d’une couche présentation (Skin).

Le Backend

Aujourd’hui le backend est constitué d’un ensemble de micro-services écrits en Go. Après la période NodeJS, nous avons décidé de retourner à un langage fortement typé. La façon dont Go gère la concurrence (Goroutine) permet de tenir le fort trafic de MYTF1 et est particulièrement adapté à un écosystème kubernetes :

  • empreinte mémoire faible
  • démarrage rapide (binaire compilé)
  • taille des images docker réduite
  • idéal pour des services HTTP / gRPC

C’est également un langage rapide à apprendre.

GraphQL

L’API GraphQL est une brique centrale pour MYTF1. Nous l’utilisons comme source de données des différents fronts. Les avantages sont les suivants :

  • pas de service spécifique par écran, chaque front peut requêter ce dont il a besoin uniquement
  • le GraphQL joue le rôle d’API gateway, c’est lui qui rassemble les données des micro-services sous-jacents
  • contrat d’interface auto-documenté entre le back et les fronts

Les bases de données

Nous utilisons MongoDB et PostgreSQL pour les bases de données de référence. Ces données sont ensuite dénormalisées dans des cluster Redis. Nous avons adopté une architecture “Event Driven” en nous appuyant sur Kafka pour maintenir une synchronisation constante entre ces bases de données.

La vidéo

C’est le coeur de métier de MYTF1. Cette partie se compose :

  • d’un backoffice codé en PHP, pour gérer les commandes de replay et éditer les métadonnées des vidéos
  • du workflow vidéo, un ensemble de micro-services GO qui pilotent notamment nos encodeurs elemental
  • des flux vidéo en DASH et HLS

Le sujet étant vaste, nous lui avons consacré un article dédié.

Le CMS

Nous avons également développé un CMS maison qui permet à l’équipe édito d’animer le contenu de MYTF1. Il est développé en Vue.js.

L’infra et les outils transverses

Nos services sont déployés sur des clusters Kubernetes. Nous utilisons le cloud AWS pour héberger ces clusters (service EKS).

Les images Docker des applicatifs sont construites par des pipelines Jenkins, après exécution des tests. Nous sommes en train de mettre en place l’outil Spinnaker pour permettre des déploiements canary et sécuriser nos mises en production.

Nous utilisons l’outil Grafana, associé à Prometheus, pour faire le monitoring de nos applicatifs et de notre infrastructure. Graylog permet quant à lui de récupérer les logs d’exécution. Nous envisageons d’utiliser Jaeger qui permettrait de restituer une vision cohérente des services en terme de monitoring et de logs.

Exemple de dashboard Grafana

Et la suite ?

Avec cette refonte complète, nous avons une stack qui répond à nos besoins de performances et de maintenabilité. Un long chemin a été parcouru et beaucoup reste à faire. Nous partagerons sur ce blog d’autres articles sur l’évolution de notre stack et de nos applications. -Nous vous détaillerons aussi différentes problématiques que nous avons pu rencontrer, expliquer plus longuement certains choix techniques.

Blog technique e-TF1

-
\ No newline at end of file diff --git a/tags/page/2/index.html b/tags/page/2/index.html index d0556fe..d99756e 100644 --- a/tags/page/2/index.html +++ b/tags/page/2/index.html @@ -3,7 +3,7 @@

Blog technique e-TF1

-

Blog technique e-TF1

-
\ No newline at end of file