concevoir un cms multi-domaines sans serveur piloté par l'ia sur google cloud

je détaille mon expérience dans la construction d'un cms multi-domaines sans serveur et piloté par l'ia sur google cloud, en équilibrant l'inférence ia de longue durée avec la livraison de contenu statique en moins d'une seconde et en discutant des considérations finops.

concevoir un cms multi-domaines sans serveur piloté par l'ia sur google cloud
TL;DR

je détaille mon expérience dans la construction d'un cms multi-domaines sans serveur et piloté par l'ia sur google cloud, en équilibrant l'inférence ia de longue durée avec la livraison de contenu statique en moins d'une seconde et en discutant des considérations finops.

prérequis

lorsque j'ai entrepris de construire un système de gestion de contenu (cms) moderne pour des articles techniques et financiers, j'ai rapidement rencontré un défi architectural fondamental : comment équilibrer la lenteur inhérente à l'inférence ia avec la demande de chargement instantané des pages ? la génération de contenu financier multilingue, comme les résumés matinaux ou les analyses sectorielles, implique l'orchestration d'appels à des services comme l'api gemini pour la rédaction, tavily pour la recherche web et notre api d'analyse technique (ta) interne pour les informations sur le marché. ce processus est avec état, gourmand en ressources et peut facilement prendre plusieurs minutes. pourtant, pour l'utilisateur final, tout ce qui est inférieur à des temps de chargement de page de l'ordre de la milliseconde semble lent. cette tension entre le traitement backend dynamique et gourmand en calcul et l'expérience utilisateur ultra-rapide était le problème principal que je visais à résoudre.

dans cet article, je vous guiderai à travers mon approche de construction d'un tel système sur google cloud platform (gcp). j'ai conçu une architecture modulaire sans serveur qui tire parti des modèles événementiels pour découpler les tâches ia de longue durée de la livraison de contenu. nous explorerons l'utilisation stratégique des services gcp pour le routage global en périphérie, l'orchestration asynchrone de l'ia et la sécurité de niveau entreprise. mon objectif était de créer un système qui non seulement génère efficacement du contenu financier de haute qualité piloté par l'ia, mais le livre également aux utilisateurs du monde entier avec une vitesse et une fiabilité sans compromis.

pour comprendre les concepts que je vais aborder et potentiellement les appliquer dans vos propres projets, vous aurez besoin de :

  • un compte google cloud platform (gcp) avec la facturation activée. vous pouvez vous inscrire à un compte gcp free tier si vous n'en avez pas.
  • l'interface de ligne de commande gcloud installée et configurée. assurez-vous d'être authentifié à votre projet gcp. vous pouvez trouver les instructions d'installation dans la documentation de l'interface de ligne de commande gcloud de gcp.
  • l'interface de ligne de commande terraform installée (version 1.0.0+). les instructions sont disponibles dans la documentation terraform.
  • python 3.12+ installé sur votre machine de développement.
  • les autorisations iam appropriées au sein de votre projet gcp pour créer et gérer des services tels que cloud run, les rubriques pub/sub, les buckets cloud storage et les équilibreurs de charge d'applications externes globaux.

architecture et concepts : découplage de l'ia de la livraison

construire un cms qui marie efficacement la génération de contenu ia sophistiquée avec une livraison statique à faible latence exige une approche architecturale réfléchie. ma stratégie de conception était basée sur le découplage des processus ia de longue durée de la livraison de contenu destinée aux utilisateurs, en utilisant un modèle sans serveur et événementiel sur gcp. voici comment je l'ai structuré :

1. ia dynamique vs. livraison statique : le conflit central

le conflit fondamental auquel j'ai été confronté était la nature de la génération de contenu par rapport à la consommation de contenu. la génération d'articles pilotée par l'ia implique une séquence complexe d'opérations : recherche web en temps réel, rédaction avec des modèles de langage volumineux, création d'images avec des modèles de diffusion et traduction multilingue. tout ce processus est intrinsèquement lié aux e/s et gourmand en cpu, prenant souvent plusieurs minutes. ma conception devait complètement séparer ce 'travail intensif' de l'expérience utilisateur finale. les lecteurs s'attendent à ce que les pages web statiques se chargent en quelques millisecondes, servies à partir d'un emplacement périphérique proche d'eux.

cela m'a amené à implémenter un modèle hybride : génération dynamique pour les auteurs et les éditeurs, et livraison statique, mise en cache en périphérie pour les lecteurs. le pipeline ia est asynchrone et découplé, poussant le contenu finalisé vers une couche de livraison rapide. cela garantit que le travail ia coûteux en calcul n'a jamais d'impact sur la latence côté utilisateur.

2. conception modulaire sans serveur avec cloud run

mon choix pour la couche de calcul était google cloud run. j'ai trouvé que c'était une plateforme sans serveur puissante et entièrement gérée qui me permettait de déployer des applications conteneurisées qui s'adaptent automatiquement de zéro à des milliers d'instances. cela signifiait que je ne payais que pour le calcul utilisé, ce qui correspondait parfaitement à nos objectifs finops. pour moi, la beauté de cloud run est sa simplicité à déployer des microservices sans gérer l'infrastructure sous-jacente.

le cms lui-même s'exécute sous la forme de plusieurs services cloud run distincts, chacun gérant une partie spécifique du système :

  • backend (backend-svc-prod) : un service d'api rest fastapi qui gère les pipelines de contenu principaux, ingère les webhooks et gère l'exécution des tâches asynchrones. c'est là que réside la logique d'orchestration de l'ia.
  • frontend (frontend-admin-svc-prod) : une interface administrative basée sur nicegui. cela permet à mon équipe de surveiller, de réviser et de déclencher manuellement la génération de contenu ia, nous donnant un contrôle précis sur le processus éditorial.
  • serveur de documentation (mcp-docs-svc-prod) : un serveur de protocole de contexte de modèle (mcp). je l'ai construit pour fournir une récupération de contexte pour le backend, agissant essentiellement comme un service de génération augmentée de récupération (rag) pour nos modèles ia, leur fournissant des informations de marché à jour et pertinentes.

en empaquetant ces composants sous forme de microservices conteneurisés à partir d'une seule image docker, j'ai assuré la cohérence entre les environnements et simplifié considérablement nos flux de travail de déploiement.

3. orchestration du pipeline de génération d'ia avec pub/sub

le principal défi d'ingénierie que j'ai rencontré était la gestion des délais d'exécution. un pipeline complet de génération d'articles peut facilement dépasser le délai d'attente de requête synchrone typique d'un service web (par exemple, cloud run a un délai d'attente de requête maximum de 900 secondes). pour contourner cela, j'ai implémenté un pipeline asynchrone et événementiel utilisant cloud scheduler et google cloud pub/sub.

ce modèle m'a permis de diviser la charge de travail en un déclencheur rapide et synchrone et une phase de traitement asynchrone et découplée. cloud scheduler agit comme un déclencheur basé sur le temps, envoyant une requête authentifiée à notre backend à des intervalles prédéfinis. le backend initie rapidement le processus de rédaction de contenu, persiste son état, puis publie un message vers une rubrique pub/sub. cela permet à la requête initiale de se terminer rapidement, libérant le frontend ou le planificateur.

pub/sub livre ensuite de manière fiable ce message à une autre instance de notre service backend (configurée comme un abonnement push), qui gère les tâches de longue durée telles que la récupération de la recherche, la génération d'images et la traduction de contenu. cela résout non seulement le problème des délais d'attente, mais fournit également un moyen résilient et évolutif de traiter nos tâches de génération de contenu.

4. livraison globale en périphérie et sécurité zéro confiance

pour la livraison de contenu public, le html, le css et les images statiques générés par le pipeline ia sont écrits directement dans les buckets google cloud storage (gcs). j'ai configuré un global external application load balancer pour acheminer le trafic public (/*) directement vers ce backend gcs. de manière cruciale, cloud cdn met ce contenu en cache globalement, garantissant une latence de l'ordre de la milliseconde pour les utilisateurs finaux, quelle que soit leur position géographique. cette conception découple complètement le traitement ia dynamique de la livraison de contenu, répondant efficacement à notre exigence de faible latence.

pour l'accès administratif au cms, j'ai implémenté un modèle zéro confiance à l'aide d'identity-aware proxy (iap). les points de terminaison administratifs (par exemple, admin.thecloudarchitect.io) partagent le même équilibreur de charge mais acheminent le trafic vers les groupes de points de terminaison réseau (neg) sans serveur cloud run. avant qu'une requête n'atteigne le service cloud run, iap l'intercepte, appliquant l'authentification du compte google et des stratégies iam granulaires. cela fournit un périmètre de sécurité robuste, réduisant considérablement la surface d'attaque. pour protéger les informations d'identification sensibles, telles que les clés api pour gemini ou tavily, je les stocke en toute sécurité dans secret manager et les injecte dans les services cloud run au moment de l'exécution, renforçant ainsi notre posture de sécurité.

aperçu architectural

5. le pipeline d'agents ia : un flux de travail multi-étapes

j'ai construit le cms pour traiter l'ia non pas simplement comme un simple appel d'api, mais comme un flux de travail multi-étapes sophistiqué, le tout orchestré au sein du service cloudrunbackend. cela m'a permis de décomposer la génération d'articles complexes en étapes gérables et observables :

  1. ingestion et ancrage des données : tout d'abord, j'injecte des données de marché pertinentes (par exemple, les plus fortes hausses/baisses, les données ochlv) dans la fenêtre contextuelle de l'invite. ces données proviennent généralement de notre api ta interne ou d'un service de données de marché dédié, fournissant des informations en temps réel et précises avec lesquelles l'ia peut travailler.
  2. recherche (tavily) : selon le type d'article, j'ai configuré le système pour effectuer 1 à 10 appels api tavily. pour un « focus sectoriel » par exemple, cela permet de récupérer des catalyseurs en temps réel, des nouvelles du jour au lendemain ou des annonces d'entreprise spécifiques, garantissant que les modèles ia disposent des informations externes les plus récentes.
  3. rédacteur (gemini 2.5 flash) : j'utilise un modèle d'invite initial (généralement basé sur jinja2) pour diriger gemini 2.5 flash afin de rédiger la charge utile json brute de l'article. gemini 2.5 flash offre un excellent équilibre entre performances et rentabilité, ce qui le rend idéal pour générer des brouillons initiaux rapidement et à moindre coût.
  4. éditeur (gemini 2.5 pro) : une fois le brouillon terminé, un modèle plus puissant et plus performant, gemini 2.5 pro, le révise. cette étape critique vérifie le ton, l'exactitude, la cohérence factuelle et le formatage approprié. cette approche multi-modèles me permet de tirer parti des forces spécifiques de chaque modèle tout en optimisant les coûts globaux.
  5. visuels (imagen 3) : pendant le processus de rédaction, gemini 2.5 flash génère également des invites distinctes et descriptives pour les éléments visuels — généralement une image d'en-tête 16:9 et une image de support 1:1. ces invites sont ensuite transmises à imagen 3, le modèle de diffusion texte-image avancé de google, pour générer des visuels de haute qualité pour l'article.
  6. traduction : enfin, le texte anglais est repassé à gemini (flash ou pro, selon le compromis qualité-coût requis pour la traduction) pour la localisation dans des langues cibles telles que l'allemand (de), l'espagnol (es), le français (fr), l'italien (it) et le néerlandais (nl). ces versions traduites font également partie du contenu statique livré via cloud cdn.

6. finops : équilibrer les coûts et les performances

l'exécution de grands modèles linguistiques et d'infrastructures cloud mondiales peut rapidement devenir prohibitive si elle n'est pas gérée avec soin. mon architecture utilise des contrôles finops stricts pour maintenir l'efficacité, garantissant que nous obtenons une valeur maximale pour nos dépenses.

6.1. l'économie unitaire d'un article ia

en sélectionnant soigneusement les modèles et en optimisant les appels api, j'ai réussi à maintenir le coût par article exceptionnellement bas. l'utilisation de gemini 2.5 flash pour la rédaction à grand volume et l'ingénierie rapide, et la réservation de gemini 2.5 pro uniquement pour la passe éditoriale critique, a un impact significatif sur le coût total. voici une ventilation basée sur les prix actuels (environ 1 $ ≈ 0,92 €) :

  • tavily (recherche) : généralement ~0,02 € – 0,07 € (~0,02 $ – 0,08 $) par article, selon le nombre de recherches.
  • gemini (rédacteur/éditeur/invites/traductions) : environ ~0,05 € (~0,055 $) pour toutes les interactions gemini.
  • imagen (2 images) : la génération de deux images haute résolution coûte ~0,05 € – 0,07 € (~0,06 $ – 0,08 $).
  • coût total par article entièrement publié et multilingue : ~0,13 € – 0,15 € (~0,14 $ – 0,16 $).

cela démontre la puissance d'un pipeline ia finement réglé pour atteindre une efficacité économique remarquable.

optimisation de l'utilisation des modèles ia pour l'efficacité des coûts

lorsque j'ai commencé à intégrer l'ia générative, j'ai d'abord envisagé d'utiliser les modèles les plus puissants pour chaque étape. cependant, j'ai vite réalisé qu'en sélectionnant stratégiquement les modèles en fonction de leurs forces spécifiques à la tâche et de leurs profils de coûts – comme l'utilisation de gemini 2.5 flash pour les brouillons initiaux et la réservation de gemini 2.5 pro pour l'édition critique – je pouvais réduire drastiquement les coûts par article sans sacrifier la qualité. cette approche à plusieurs niveaux m'a permis de faire évoluer ma génération de contenu efficacement tout en maîtrisant notre budget. j'ai ajouté de la télémétrie pour surveiller les jetons d'invite, de sortie et de réflexion – en définissant un budget pour ces derniers (attention, la réflexion est activée par défaut et consomme beaucoup !

6.2. mise à l'échelle à zéro et atténuation du démarrage à froid

la capacité de cloud run à se mettre à l'échelle à zéro instance lorsqu'il est inactif est une énorme victoire finops, réduisant considérablement les coûts de calcul en dehors des périodes de pointe. cependant, cela introduit le potentiel de démarrages à froid (généralement 5 à 15 secondes de latence) pour les services destinés aux utilisateurs, en particulier notre interface d'administration ou les déclencheurs d'api intraday. pour atténuer cela sans encourir de coûts continus liés à des instances toujours actives, j'ai déployé une tâche « keep-warm » dédiée de cloud scheduler.

cette tâche interroge à la fois le backend (/health?deep=true) et le frontend (/health) toutes les 14 minutes, strictement pendant les heures de bureau européennes (06:00 – 22:00 cet). cela garantit que pendant nos heures d'ouverture, les services critiques sont chauds et réactifs, tout en leur permettant de se mettre à l'échelle à zéro pendant la nuit et les week-ends, maximisant ainsi les économies de coûts.

conclusion

la construction de ce cms multi-domaines sans serveur et piloté par l'ia sur google cloud a été un exercice d'équilibre entre des exigences apparemment contradictoires : l'intensité de calcul de l'ia générative par rapport au besoin de latence de moins d'une seconde pour l'utilisateur. mon parcours à travers ce projet a renforcé la puissance d'une architecture modulaire et événementielle, surtout lorsqu'elle est combinée à des offres sans serveur comme cloud run et pub/sub.

en découplant soigneusement le pipeline de génération ia dynamique de la livraison de contenu statique, j'ai réalisé à la fois de robustes capacités de création de contenu et une expérience utilisateur performante à l'échelle mondiale. l'exploitation de cloud cdn pour la mise en cache en périphérie et la mise en œuvre d'un modèle de sécurité zéro confiance avec iap et secret manager ont assuré que le système est non seulement rapide, mais aussi sécurisé et fiable. les considérations finops, en particulier l'utilisation échelonnée des modèles ia et l'atténuation stratégique du démarrage à froid, se sont avérées cruciales pour rendre l'ensemble de l'opération économiquement viable.

si vous cherchez à intégrer l'ia dans vos flux de travail de contenu tout en maintenant des performances élevées et des contrôles de coûts stricts, je vous recommande d'adopter une approche similaire découplée et sans serveur. expérimentez avec différents modèles ia pour différentes étapes de votre pipeline afin de trouver l'équilibre optimal entre qualité et coût. votre prochaine étape concrète pourrait être de prototyper un flux simple de génération de contenu piloté par les événements à l'aide de cloud run et pub/sub, en commençant par un seul modèle ia pour vous familiariser avec l'orchestration asynchrone.

Last updated:

This article was produced using an AI-assisted research and writing pipeline. Learn how we create content →