Votre stack web a été conçue pour du CRUD en 200 ms. Vos agents ont besoin de 2–20 minutes de relances, de callbacks et d’approbations humaines. C’est ainsi que les systèmes d’agents en production se bloquent, facturent deux fois des clients ou fuient des jetons. HN a raison : tous vos agents passent à l’async. La question est de savoir si vous le ferez de manière délibérée.
Voici un playbook pratique pour CTO : comment concevoir une orchestration asynchrone durable pour des agents IA — idempotente par défaut, observable et avec un coût prévisible. Il s’appuie sur les leçons derrière deux thèmes de la semaine : « Tous vos agents deviennent async » et les postmortems sur ce qu’async promettait vs. ce qu’il a livré. Si vous dirigez une équipe produit aujourd’hui, vous n’avez pas des trimestres pour expérimenter. Il vous faut un plan que vous pouvez déployer en 30–90 jours.
Commencez par une taxonomie des charges de travail (pas par un outil)
Avant d’acheter un moteur de workflow, étiquetez votre travail. Les agents IA amplifient quatre classes d’exécution distinctes. Chaque classe vous pousse vers un choix d’architecture différent.
- Classe A — I/O court (≤5s) : Appels d’API uniques, recherches vectorielles, invocations d’outils légers. Restez synchrones en HTTP. Protégez avec des timeouts et des retries côté client.
- Classe B — Tâches moyennes (5–60s) : I/O multi-étapes, calcul léger, fan-out vers quelques outils. Utilisez une file + des workers avec des sémantiques au-moins-une-fois et des clés d’idempotence.
- Classe C — Tâches longues (1–30 min) : Boucles d’agent, backoffs multi-API, validations humaines. Utilisez un moteur de workflow durable (Temporal/Step Functions/Durable Functions) ou un coordinateur de saga maison avec checkpoints d’état et heartbeats.
- Classe D — Très longues / stateful (30 min–jours) : Crawls de recherche, négociations multi-agents, enrichissement batch. Utilisez un moteur de workflow + un stockage durable pour les checkpoints, des étapes humain-dans-la-boucle et la reprise après déploiements.
Votre première décision est de mapper les fonctionnalités aux classes. Si plus de 30 % de votre roadmap est en Classe C/D, vous dépasserez vite le bricolage cron + files. Si votre travail est à 90 % en Classe B, une stack légère SQS/Redis + workers avec un modèle outbox/inbox battra les orchestrateurs lourds en simplicité et en coût.
Sémantique de livraison : choisissez votre poison dès le départ
Les agents sont stochastiques. Les réseaux tombent en panne. La livraison exactement-une-fois est un conte de fées à l’échelle. Choisissez l’effectively-once et appliquez-le sans compromis.
- File au-moins-une-fois : SQS, Pub/Sub, Kafka vont redélivrer. Concevez chaque étape pour être idempotente.
- Clés d’idempotence : Générez une clé stable par intention utilisateur (par ex., hash de l’entrée + outil + version). Persistez un enregistrement « tombstone » avec le statut et la somme de contrôle de la réponse. Rejetez les doublons dans une fenêtre de déduplication bornée (par ex., 24–72 heures).
- Modèle outbox/inbox : Pour les mutations de base de données, écrivez l’intention dans une table outbox dans la même transaction que le changement d’état. Expédiez-la via un relais vers la file. Côté consommateur, écrivez dans une table inbox avant traitement pour dédupliquer les redéliveries.
- Compensations plutôt que rollbacks : Utilisez le pattern saga. Quand une étape ultérieure échoue, planifiez une action compensatoire (remboursement, révocation de jeton, suppression de fichier), pas un rollback BD que vous ne pouvez pas appliquer aux systèmes externes.
Les équipes qui adoptent l’idempotence à la frontière réduisent les effets de bord dupliqués de >95 % en pratique. Sans cela, votre support devient votre service de déduplication.
Les options d’orchestration qui livrent vraiment
Il existe mille frameworks. Seuls quelques-uns survivent aux contraintes réelles de production (tâches de plusieurs minutes, backpressure, observabilité, étapes mixtes humain/automate).
Option 1 : File + workers en DIY (SQS/Redis/Kafka)
- Quand l’utiliser : ≤20 types de tâches, flux ≤5 étapes, majoritairement Classe B. Vous avez besoin de vitesse et d’efficacité coût.
- Comment : SQS ou Pub/Sub pour la mise en file, un outbox/inbox Postgres pour la déduplication, des workers sur ECS/Kubernetes, des dead-letter queues (DLQ) avec alertes.
- Avantages : Peu cher et simple. SQS est à ~0,40 $ par million de requêtes ; 10 M de jobs/mois ≈ 4 $ en opérations de file.
- Inconvénients : Pas d’étapes humaines natives, pas de visibilité graphique sur les flux, vous construisez vous‑mêmes les retries, politiques de backoff et IDs de corrélation.
Option 2 : Services de workflow managés (AWS Step Functions, Azure Durable, GCP Workflows)
- Quand l’utiliser : Flux de 10–100 étapes, mix de tâches courtes et longues, besoin d’un état visuel, d’intégrations service et d’SLAs.
- Comment : Modelez les flux en états. Utilisez des jetons de tâche pour les callbacks et des heartbeats pour le long travail. Adoptez des sous‑workflows pour les appels parallèles d’outils.
- Avantages : Durable, débogage visuel, backoff intégré. Step Functions Standard est facturé 0,025 $ par 1 000 transitions d’état, donc 10 M de transitions ≈ 250 $/mois. Intégrations natives avec les services AWS.
- Inconvénients : Verrouillage fournisseur, ergonomie du DSL JSON, les variantes Express facturent au GB‑seconde ce qui peut grimper avec des charges utiles lourdes, expérience de dev local limitée.
Option 3 : Temporal (ou Cadence) pour l’exécution durable
- Quand l’utiliser : >100 types de tâches distincts, humain dans la boucle, workflows versionnés que vous pouvez rejouer de manière déterministe, déploiements fréquents sans perte de progression.
- Comment : Écrivez vos workflows en code (Go/Java/TypeScript/Python). Temporal gère les retries, timers, heartbeats, replays et la persistance d’état.
- Avantages : « Écrivez du code bloquant, obtenez de l’async durable. » Les relectures déterministes permettent un débogage en remontant le temps. Forts patterns d’annulation et de compensation.
- Inconvénients : Surface opérationnelle si auto‑hébergé (Cassandra/Postgres + services matching/history). Discipline d’ingénierie requise sur le versioning de workflows.
Règle empirique : si vous avez au moins deux des éléments 1) approbations humaines, 2) étapes de >15 minutes, 3) reprise en cours après déploiements, 4) 50+ activités distinctes, choisissez un moteur de workflow. Sinon, restez léger avec des files.
Sortie réseau sécurisée : traitez le HTTP des agents comme des paiements en prod
Les agents appellent Internet. C’est un problème de surface d’impact. Les gros titres de ce mois sur des fuites OAuth et de variables d’environnement doivent vous alerter. Considérez le HTTP sortant comme dangereux jusqu’à preuve du contraire.
- Egress zéro confiance : Faites transiter tout le HTTP des agents par un proxy qui impose une liste d’autorisation par domaine et schéma. Refus par défaut. Pour des outils dynamiques, utilisez des jetons d’egress signés, de courte durée, avec portée et limites de débit.
- Garde-fous LLM‑as‑judge : Un proxy « juge » peut scorer ou caviarder prompts/réponses pour retirer secrets et PII avant que les requêtes ne sortent de votre VPC. Ce n’est pas votre seule ligne de défense, mais cela réduit les fuites dues aux injections de prompt.
- Hygiène des secrets : Pas de jetons longue durée dans des variables d’environnement. Utilisez des identifiants par workflow, à durée limitée, issus d’un coffre (AWS STS + Secrets Manager, HashiCorp Vault) avec rotation automatique. Passez les identifiants par référence, pas par valeur.
- RBAC pour les outils : Chaque outil a un rôle de service. Mappez les capacités des agents à des rôles, pas à des clés brutes. Le principe du moindre privilège n’est pas optionnel quand les agents composent des outils.
Backpressure, timeouts et retries pilotés par le coût
C’est dans les retries que les factures explosent. Votre stratégie de retry doit être pilotée par un budget, pas par l’espoir.
- Backoff exponentiel avec jitter : Démarrez à 250–500 ms, multipliez par 2, plafonnez à 30–60 secondes, ajoutez ±20 % de jitter pour éviter l’effet troupeau.
- Budgets de retry : Définissez un budget de calcul max par intention utilisateur (par ex., 30 secondes CPU, 3 minutes temps mur, 0,02 $ de dépense LLM). Abandonnez ou escaladez à l’humain une fois épuisé.
- La profondeur de file indique la capacité : Les workers montent en charge quand la profondeur > N messages ou l’ancienneté > T secondes. Réduisez lentement pour éviter l’oscillation.
- Limites de débit par endpoint : Maintenez des seaux de jetons côté client par API externe pour respecter les SLA des fournisseurs et éviter les bannissements de compte.
Observabilité pour les humains, pas seulement pour les machines
Si votre équipe ne peut pas répondre « où en est ce job et pourquoi est-il bloqué ? » en 60 secondes, vous n’avez pas de l’observabilité — vous avez des logs. Construisez des outils de premier ordre.
- IDs de corrélation de bout en bout : Un ID par intention, propagé à travers HTTP, messages de file et étapes de workflow. Indexez par ID dans logs et traces.
- Heartbeats et liveness : Les longues tâches doivent envoyer des heartbeats toutes les 10–60 secondes. Tuez et replanifiez en cas d’absence après une fenêtre de grâce.
- Hygiène DLQ : Les dead-letter queues ne sont pas un cimetière. Ce sont des files avec alerte et tri. Agrégez automatiquement par cause racine et exposez des boutons de remédiation (retry, compensation, escalade) dans votre console interne.
- SLAs et SLOs par classe : Publiez les percentiles 50/95/99 par classe de charge. Cibles types qui fonctionnent : Classe B 95e ≤ 10 s, Classe C 95e ≤ 5 min, Classe D bornée par l’étape humaine, avec timers pour que rien ne pourrisse.
Modèles de coûts concrets que vous pouvez défendre auprès de la Finance
Le coût est là où l’async gagne ou perd en crédibilité. Voici des points de référence utilisant les tarifs publics en 2026. Ajustez selon votre région et les niveaux gratuits.
File + workers (exemple AWS)
- SQS : ~0,40 $ par 1 M de requêtes. 10 M de messages/mois ≈ 4 $.
- Calcul (exemple Lambda) : 10 M de jobs à 256 Mo pendant 5 secondes chacun = 10 000 000 × 5 s × 0,256 Go = 12 800 000 Go-secondes. À ~0,00001667 $/Go‑s, ≈ 213 $. Ajoutez les frais de requêtes et un peu d’overage ; disons 230 $.
- Ordre de grandeur total : ~234 $/mois plus la bande passante sortante et le stockage. Si vos jobs durent plus longtemps ou nécessitent des conteneurs, budgétez en conséquence (nœuds ECS/K8s, autoscaling).
Moteur de workflow (Step Functions Standard)
- Transitions d’état : 0,025 $ par 1 000. Pour un workflow de 10 étapes exécuté 1 M de fois/mois : 10 M de transitions ≈ 250 $.
- Calcul des tâches : Même calcul que ci‑dessus pour Lambda ou des tâches conteneurisées.
- Ordre de grandeur total : 250 $ pour l’orchestration + le calcul. Pour l’humain‑dans‑la‑boucle, vous ajouterez du stockage d’état et une empreinte BD modeste (~50–200 $/mois).
Temporal
- Auto‑hébergé : L’infra est plus lourde (base de données + services). Attendez‑vous à quelques dizaines de milliers par an en infra et temps ops une fois à l’échelle (>100 M d’exécutions d’activités/an).
- Cloud : La tarification des fournisseurs varie selon le volume d’exécution et le stockage ; cela peut coûter moins cher que la peine humaine si vous avez besoin de relecture déterministe et de flux complexes. Le ROI est dans la réduction des défauts et la vélocité développeur, pas dans le coût brut de calcul.
Test de bon sens : si vous dépensez plus en retraitements d’échecs et nettoyages manuels qu’en orchestration, vous êtes sous‑investis en async.
Humain dans la boucle qui ne bloque pas tout
Les agents échouent de façon subtile — champs d’API hallucinés, mises à jour partielles, violations de politique. Les approbations humaines doivent être asynchrones, à fort signal, et bornées dans le temps.
- Approbations temporisées : Chaque étape manuelle a un timer (par ex., 15 minutes). En cas de timeout, soit auto‑approuvez selon un seuil de risque, soit auto‑rejetez avec action compensatoire.
- UIs de revue légères : Construisez un panneau unique montrant le prompt, les appels d’outils, les diffs sur les changements proposés, et un clic approuver/refuser avec capture de motif.
- Échantillonnage : Démarrez avec 100 % de revue pour les actions risquées. Descendez à 5–10 % d’échantillonnage à mesure que vos métriques se stabilisent et que le taux de faux négatifs baisse.
Tests et déploiements : déterminisme ou rien
La plupart des bugs d’agents « ça marche sur mon laptop » mais échouent après un déploiement ou un retry. Il vous faut du déterminisme là où ça compte.
- Workflows rejouables : Préférez des moteurs capables de rejouer les décisions. Si vous êtes en DIY, capturez l’état aux frontières d’étapes et supportez la relance depuis l’étape N avec les mêmes entrées.
- Tests basés sur les propriétés pour les outils : Pour chaque outil externe, générez des entrées perturbées et validez les effets de bord. Détectez tôt les IDOR, les trous de rate limit et les absences d’auth — un thème récurrent alors que des APIs générées par l’IA sortent plus vite que l’AppSec ne peut les revoir.
- Canary sur les changements d’orchestrateur : Versionnez vos workflows. Faites des canaries (1–5 %) avant bascule complète. Les exécutions anciennes doivent finir sur les anciennes versions ; les nouvelles démarrent sur les nouvelles.
Un plan pragmatique 30–60–90
Jours 0–30 : classifier, contenir et arrêter l’hémorragie
- Inventoriez tous les flux d’agents. Étiquetez‑les Classe A–D. Dessinez un diagramme en couloirs avec outils et egress par étape.
- Mettez en place des clés d’idempotence aux frontières d’API. Ajoutez une table outbox. Activez des DLQ avec alerte.
- Introduisez un proxy d’egress simple avec liste d’autorisation. Déplacez les secrets dans un coffre et échangez toute clé longue durée.
Jours 31–60 : mettre en place l’exécution durable pour les Classes C/D
- Choisissez votre orchestrateur : Step Functions/Durable si vous êtes all‑in sur un cloud ; Temporal si vous avez besoin de flux natifs au langage et de relecture.
- Migrez les deux flux les plus bruyants. Ajoutez heartbeats, IDs de corrélation et approbations humaines avec timers. Instrumentez les percentiles 50/95/99.
- Définissez des budgets de retry et des limites de débit par endpoint. Réglez le backoff et l’autoscaling des workers sur l’ancienneté de file, pas le CPU.
Jours 61–90 : rendez cela ennuyeux
- Construisez une console interne « Jobs » : recherchable par ID de corrélation, avec contrôles retry/compensation/escalade.
- Écrivez un playbook de triage DLQ et des revues hebdomadaires. Suivez les 3 causes racines principales et éliminez‑les.
- Renforcez la sécurité : élargissez la liste d’autorisation egress, appliquez des rôles par outil, activez la rédaction prompt/réponse au proxy.
Et les équipes nearshore ?
Les équipes distribuées bénéficient en fait de l’async durable : une équipe de São Paulo passe le relais à New York avec les mêmes IDs de corrélation, tableaux de bord et sémantiques de retry. Vous obtenez 6–8 heures de recouvrement, plus 16–18 heures/jour de progression car les longues tâches continuent en sécurité pendant que les équipes dorment. La contrepartie : il faut investir dans l’observabilité et la remédiation en un clic pour que personne ne soit en train de fouiller les logs à 3 h du matin.
Anti‑patterns courants à éliminer dès maintenant
- Long polling HTTP pendant des minutes : Cela occupe l’infra et invite les timeouts. Utilisez des callbacks ou des webhooks avec des jetons de tâche.
- Sauvegarder l’état du modèle en mémoire entre étapes : Un déploiement le tuera. Persistez des checkpoints dans un store (S3, Postgres) et passez des références.
- Retries globaux dans les SDKs client : Les retries appartiennent côté serveur avec budgets et visibilité, pas cachés dans des défauts de SDK.
- Variables d’environnement comme le « secret store » : Elles fuient via les logs et les inspecteurs d’environnement des plateformes. Utilisez un coffre et des identifiants de courte durée.
Mot de la fin
Async n’est pas une préférence de style. C’est la seule façon de livrer des fonctionnalités agentiques qui survivent à la réalité — flakiness réseau, APIs instables, validations humaines, déploiements et les plantages occasionnels de modèles — sans brûler de l’argent. La bonne réponse est rarement une nouvelle plateforme de bout en bout. C’est une taxonomie affûtée, de l’idempotence, une file ennuyeuse quand vous le pouvez, et un vrai moteur de workflow quand vous le devez. Bien fait, vos agents deviennent des coéquipiers fiables, pas des machines à chaos coûteuses.
Points clés
- Classifiez les charges A–D avant de choisir les outils ; files pour la Classe B, moteurs de workflow pour C/D.
- Adoptez l’effectively‑once avec clés d’idempotence et modèles outbox/inbox.
- Sécurisez l’egress avec un proxy à liste d’autorisation, des identifiants à courte durée et portée, et un LLM juge optionnel.
- Utilisez des budgets de retry, heartbeats, DLQ et IDs de corrélation pour rendre les échecs peu coûteux et visibles.
- Modélisez les coûts : les files coûtent des centimes par million d’opérations ; les moteurs de workflow ajoutent ~25 $ par 1 M de transitions.
- Versionnez les workflows et activez relecture/canaries ; les approbations doivent être temporisées et minimales.
- Les équipes nearshore gagnent en continuité si l’observabilité et la remédiation en un clic sont en place.