MicrocosmWorksInnover et Architecturer le Cosmos Numérique
Ă€ proposContact
MicrocosmWorksInnover et architecturer des cosmos numériques

Fournir des solutions informatiques qui comptent. Nous sommes passionnés par la technologie, la sécurité et aidons les entreprises à croître grâce à une infrastructure informatique fiable et innovante.

[email protected]
+91 7011868196
New Delhi, India

Hub de Croissance IA

Hub IAInnovation pour les startupsAccélérateur d'entreprise

Solutions

Toutes les solutionsApplications de bien-être et de fitnessPlateforme vidéo IADéveloppement d'agents IA

Ressources

PerspectivesGuides de l'industriePlans d'utilisationModèles d'architectureÉtudes de cas

Entreprise

Ă€ propos de nousContactNotre travail

Services

Consultation numériqueInfrastructure cloudDéveloppement SaaSDéveloppement IATechnologie vidéo
Développement ERPPersonnalisation ZohoDéveloppement OdooIntégration SalesforceDéveloppement CRM personnalisé
Intégration QuickBooksSolutions IoTDéveloppement Blockchain
Consultation en cybersécuritéSupport IT - L3

© 2026 MicrocosmWorks. Tous droits réservés.

Politique de confidentialitéConditions d'utilisation
Retour aux Perspectives
Cloud Solutions

Réduire le temps de déploiement des canaux FAST de 15 minutes à 1 minute

Comment nous avons réduit une configuration manuelle de canal de 15 minutes en un seul clic en regroupant les actions de planification et en supprimant les étapes de déploiement redondantes.

Untitled (612 x 640 px) (512 x 640 px) (512 x 600 px).webpPankaj
•
July 10, 2026
•
Mis Ă  jour July 24, 2026
•
6 min read
Photorealistic illustration of a one-click scheduling system managing multiple automated programs beyond the AWS Lambda 15-minute execution limit.webp
6 min read

Planifier plusieurs programmes en un seul clic — Dépasser la limite de 15 minutes d'AWS Lambda

Un opérateur de canal FAST planifie un mois de programmes et clique une fois sur Deploy. Derrière ce simple clic, des centaines de programmes deviennent des milliers d'actions de planification MediaLive qui doivent être déployées dans AWS dans l'ordre, le tout dans la limite d'exécution de quinze minutes de Lambda — et toute défaillance en cours de route laisse un canal en direct avec des lacunes. Voici comment nous avons rendu fiable le déploiement en un seul clic de grandes listes de lecture, et pourquoi la prochaine étape consiste à utiliser un runtime différent, et non un Lambda plus grand.

Aperçu rapide

AspectDétail
RuntimeAWS Lambda (invocation unique), timeout backend de 615s
Cible de sortieMediaLive BatchUpdateScheduleCommand
Traitement par lotsJusqu'à 200 actions MediaLive par requête — ~25 programmes en pratique
Actions par programme~7–8 (changement d'entrée + 4 filigranes par rendu + 2 SCTE-35), plus avec les coupures publicitaires
Mécanisme de secoursRéessai par programme en cas de rejet de lot
Observé195 programmes déployés en ~44 secondes (mesure locale)
Objectif documenté360 programmes en ≤90 secondes
Voie de mise à l'échelle horizontaleDécoupage par Step Functions pour les listes de lecture de >1 mois — prévu, non livré

Le Défi

Le déploiement d'une liste de lecture n'est pas une écriture — c'est une orchestration. Pour chaque programme planifié par l'opérateur, MediaLive doit savoir exactement quand changer d'entrée, quand activer le filigrane pour chaque rendu, quand insérer des points de repère SCTE-35 et quand insérer des publicités. Les contraintes structurelles sont :

  • Le nombre d'actions est multiplicatif, pas additif. Chaque programme Ă©met ~7–8 actions avant les coupures publicitaires — un changement d'entrĂ©e, quatre activations de filigrane (une par rendu car StaticImageOutputActivate utilise des coordonnĂ©es de pixels de sortie), et deux marqueurs SCTE-35. Les coupures publicitaires ajoutent trois actions supplĂ©mentaires chacune. Un mois de 360 programmes reprĂ©sente environ 2 800 actions sur le rĂ©seau.
  • MediaLive impose l'ordre par canal. Les actions de planification sont ancrĂ©es dans le temps et se rĂ©fĂ©rencent mutuellement ; vous ne pouvez pas parallĂ©liser les Ă©critures vers le mĂŞme canal sans que l'API ne les rejette comme conflictuelles.
  • AWS Lambda a une limite stricte de 15 minutes. Pas une limite souple, pas une configuration. L'orchestrateur doit terminer dans ce dĂ©lai, sinon le canal se retrouve Ă  moitiĂ© dĂ©ployĂ©.
  • La dĂ©faillance partielle est opĂ©rationnellement inacceptable. Si le programme 174 sur 360 Ă©choue et interrompt l'exĂ©cution, l'opĂ©rateur n'a aucune vue des diffĂ©rences entre ce qui a Ă©tĂ© dĂ©ployĂ© et ce qui ne l'a pas Ă©tĂ©. Le canal est mis en ligne avec des lacunes ; les tĂ©lĂ©spectateurs voient un Ă©cran noir lĂ  oĂą ils attendaient du contenu.
  • La première version envoyait un BatchUpdateSchedule par programme avec une pause de 200ms entre les programmes. Cela reprĂ©sente environ 2,5 secondes de temps rĂ©el par programme. Avec 360 programmes, vous dĂ©passez dĂ©jĂ  la limite de Lambda avant mĂŞme que MediaLive n'ait effectuĂ© un travail rĂ©el.

Le travail, alors, n'est pas d'écrire plus vite. Il s'agit d'écrire moins souvent, de survivre aux défaillances partielles, et de rester dans une seule invocation — sans perdre les garanties d'ordonnancement que MediaLive exige.

Pourquoi les approches existantes échouent

Les échappatoires évidentes échouent toutes pour des raisons structurelles, et non des problèmes de réglage.

  • "Augmentez simplement le timeout de Lambda." C'est impossible. Quinze minutes est une limite stricte imposĂ©e par AWS pour l'exĂ©cution de Lambda ; ce n'est pas un rĂ©glage dans la console. MĂŞme si c'Ă©tait le cas, le coĂ»t par programme augmente avec le catalogue — acheter plus de temps rĂ©el ne fait que reporter la prochaine limite.
  • "Passez Ă  ECS Fargate ou EC2." Nous l'avons envisagĂ© et rejetĂ©. Les conteneurs de longue durĂ©e signifient que nous gĂ©rons le runtime : contrĂ´les de santĂ©, autoscaling, compromis entre dĂ©marrage Ă  froid et pool chaud, IAM scoping, et rotation d'astreinte pour un service qui fonctionne par Ă -coups. Lambda nous offre une isolation par invocation et un coĂ»t d'inactivitĂ© nul pour une charge de travail intrinsèquement par Ă -coups. Nous n'Ă©tions pas prĂŞts Ă  y renoncer pour rĂ©soudre un seul goulot d'Ă©tranglement.
  • "ParallĂ©lisez les Ă©critures MediaLive." MediaLive sĂ©rialise les mises Ă  jour de planification par canal. Les appels BatchUpdateSchedule concurrents sur le mĂŞme canal entrent en conflit sur la chronologie des actions et sont rejetĂ©s. Le seul parallĂ©lisme lĂ©gitime est au sein d'un lot, et non entre les lots.
  • "Laissez-le planter et laissez l'opĂ©rateur rĂ©essayer." C'est la pire option. Lorsqu'un dĂ©ploiement est interrompu au programme N, le canal est dans un Ă©tat que personne ne peut dĂ©crire depuis l'interface utilisateur. Les opĂ©rateurs n'obtiennent pas de diffĂ©rences ; ils obtiennent une boĂ®te noire et un canal en direct avec des lacunes. Le système doit soit tout dĂ©ployer, soit dĂ©ployer des rĂ©sultats partiels avec un statut par programme sur lequel l'opĂ©rateur peut agir.

Le levier qui nous restait était la nature même du travail : moins d'écritures, de plus grande taille, exécutées en série, avec un mécanisme de secours qui se dégrade en granularité par ligne uniquement lorsqu'un lot est rejeté.

Notre Solution

Déplacer le coût hors de Lambda avant le début de la boucle, fusionner les écritures MediaLive à l'intérieur de la boucle, et ne se dégrader à une soumission par programme que lorsqu'un lot échoue. Trois idées, dans cet ordre — et une décision délibérée selon laquelle la limite de 15 minutes est acceptable pour les tailles de catalogue que nous déployons actuellement. Lorsque les listes de lecture dépassent une seule invocation, la réponse n'est pas un Lambda plus grand ; c'est un runtime différent.

NestJS to AWS MediaLive-2026-07-01-104631.webp

Architecture

  • Backend NestJS (schedule.service.ts) — prĂ©chauffe le dĂ©ploiement : un aller-retour Mongo pour toutes les vidĂ©os uniques, un pour tous les marqueurs publicitaires, puis un ffprobe parallèle sur les URL vidĂ©o uniques avec les rĂ©sultats mis en cache pour la boucle d'enrichissement.
  • Orchestrateur Lambda (fastChannel-lambda-fun/index.js) — gère la boucle de traitement par lots, la limitation par lot, le mĂ©canisme de secours par programme et le nettoyage des orphelins.
  • MediaLive BatchUpdateScheduleCommand — la seule surface d'Ă©criture. Chaque action — changement d'entrĂ©e, filigrane, SCTE-35, insertion publicitaire — passe par elle.
  • MongoDB — la source de vĂ©ritĂ© pour les programmes, vidĂ©os et marqueurs publicitaires ; jamais interrogĂ©e dans la boucle interne.
  • scheduleResults map — statut scheduled / error par programme renvoyĂ© au backend afin que l'opĂ©rateur obtienne une diffĂ©rence, et non une trace de pile.

Décisions d'ingénierie clés

1. Préchauffer les éléments lents avant que la boucle ne s'exécute. Le code original effectuait une recherche Mongo par planification et un appel ffprobe par planification à l'intérieur de la boucle d'enrichissement — un classique N+1 payé deux fois. Le backend actuel récupère en masse chaque vidéo unique et marqueur publicitaire en un seul aller-retour chacun, puis exécute ffprobe en parallèle sur des URL uniques et stocke le résultat dans un cache de résolution. La boucle interne devient un succès de cache. La latence de ffprobe n'est payée qu'une seule fois par URL unique, et non en série dans la boucle.

2. Regrouper les écritures MediaLive en lots d'environ 25. À l'intérieur de l'orchestrateur, les actions s'accumulent en une seule BatchUpdateScheduleCommand jusqu'à ce que 200 actions soient en file d'attente ou que le dernier programme soit atteint. Étant donné que chaque programme produit environ 7 à 8 actions, les lots regroupent naturellement environ 25 programmes chacun. La limite de 200 actions a été choisie de manière conservatrice pour rester bien en dessous des limites de charge utile par requête de MediaLive et réduire les chances qu'un lot soit rejeté en raison de sa taille — suffisamment grande pour amortir le coût réseau, suffisamment petite pour que le mécanisme de secours par programme (décision suivante) soit peu coûteux lorsqu'il doit être exécuté. Un aller-retour réseau remplace vingt-cinq. La limitation de 200 ms qui se situait auparavant entre chaque programme se situe désormais entre chaque lot.

3. Traitement par lots pour la vitesse, mécanisme de secours pour la correction. Le regroupement n'est sûr que si un seul mauvais programme n'infecte pas les vingt-quatre autres de son lot. Lorsque submitProgramBatch échoue (throws), le bloc catch invoque retryBatchAsIndividuals, qui resoumet chaque programme du lot échoué en tant que sa propre BatchUpdateScheduleCommand, enregistre le status: 'scheduled' ou status: 'error' par programme, attend 200 ms entre chaque tentative, et ré-ancre la chronologie des actions après chaque succès partiel. Le chemin rapide est traité par lots. Le chemin de récupération est granulaire. L'opérateur obtient une différence par programme dans tous les cas.

4. Supprimer les orphelins à la fin, ne pas les empêcher en cours de vol. sweepIncompleteProgramGroups s'exécute une fois à la fin du déploiement et supprime tout groupe d'actions qui n'a pas atteint un état terminal propre. Nous ne cherchons délibérément pas à maintenir la cohérence interne du canal pendant la boucle — cela impliquerait un chemin de restauration qui devrait lui-même s'intégrer dans le budget de 15 minutes. Le nettoyage est un balayage unique, pas une transaction.

5. N'agrandissez pas le Lambda ; remplacez-le lorsque le catalogue le fait. Pour tout ce que nous déployons aujourd'hui, le chemin d'invocation unique se termine bien dans le budget. La mise à l'échelle horizontale honnête est le découpage par Step Functions — partitionner la liste de lecture, exécuter les blocs comme des machines d'état parallèles, réassembler. C'est la voie pour les listes de lecture de plus d'un mois et de 6 mois. C'est conçu, non déployé. L'appeler la prochaine étape est plus utile que de prétendre qu'il est déjà en cours d'exécution.

Résultats

  • Lors de tests internes, un dĂ©ploiement de 195 programmes a Ă©tĂ© achevĂ© en ~44 secondes — contre la base de rĂ©fĂ©rence de plusieurs minutes, programme par programme.
  • L'objectif documentĂ© pour une liste de lecture de 360 programmes (environ 1 mois) est de ≤90 secondes, confortablement dans le timeout backend de 615 secondes et la limite de 15 minutes de Lambda.
  • Un programme dĂ©fectueux dans un lot n'interrompt plus les 24 autres. L'opĂ©rateur reçoit une carte d'Ă©tat par programme après chaque dĂ©ploiement.
  • Les parties lentes de la requĂŞte — les recherches Mongo et ffprobe — sont payĂ©es une seule fois par ressource unique, et non une fois par entrĂ©e de planification.
  • La limite de 15 minutes a cessĂ© d'ĂŞtre le facteur limitant pour les tailles de catalogue que nous livrons rĂ©ellement. Lorsqu'elle le redeviendra, le dĂ©coupage par Step Functions sera la rĂ©ponse, et non un Lambda plus grand.

Pile Technologique : AWS Lambda · AWS MediaLive · NestJS · MongoDB · Node 18 · ffprobe · TypeScript · AWS SDK v3

AWS MediaLiveFAST ChannelsAutomationScheduling
Untitled (612 x 640 px) (512 x 640 px) (512 x 600 px).webp

Ă€ propos de l'auteur

Pankaj

AI & Cloud Solutions Expert at MicrocosmWorks

Building innovative AI-powered solutions and helping businesses transform through cutting-edge technology.

Vous souhaitez en savoir plus ?

Contactez-nous pour discuter de la façon dont nous pouvons vous aider à mettre en œuvre ces solutions pour votre entreprise.

Contactez-nous

Questions Fréquemment Posées

Large FAST channel playlists generate thousands of scheduling actions, making it difficult to complete deployments within AWS Lambda's 15-minute execution limit.

By batching MediaLive schedule actions, reducing API calls, and preloading data, deployment time can be reduced from minutes to seconds.

MediaLive requires schedule updates to be processed in sequence for each channel, preventing parallel API requests on the same timeline.

Batching improves deployment speed, reduces network overhead, lowers API calls, and helps stay within AWS Lambda's execution limits.

For very large playlists, AWS Step Functions can split deployments into smaller workflows, enabling reliable scaling beyond a single Lambda execution.

Comments (0)

Share your thoughts and join the conversation

Leave a Comment

Your email will not be published

No comments yet

Be the first to share your thoughts!