Loading...
Cas d’usage · SaaS & API

Mets ton API en prodsans payer à la requête.

D’un MVP à 1 service à un cluster Kubernetes à 50 services — push-to-deploy sur PaaS, self-host sur VPS derrière un Load Balancer, ou Kubernetes managé avec autoscaling. Factures mensuelles prévisibles, pas de frais à la requête, pas d’egress surprise, données en UE.

§ 01·Le stack · concept

Anatomie d’une API moderne

Pour toi si…

Tu shippes du code, pas des factures surprises.

Tu fais tourner un SaaS, une API interne, un routeur de webhooks, une plateforme de jobs — tout ce qui traite des requêtes et stocke de l’état. Tu veux un stack qui ne pénalise pas le succès avec des frais à la requête, de l’egress opaque et des factures surprise.

Les 5 couches
Edge · Load Balancer
Terminaison TLS, health checks, sticky/round-robin, rate limiting L7.
Service API · conteneurs
Node, Go, Python, Rust — même Dockerfile, sur PaaS ou sur VPS via Compose.
Cache · Redis
Rate limit token bucket, sessions, lectures chaudes — sub-ms, répliqué.
Base · Postgres/MySQL
Source de vérité, avec replica lecture dès VPS-BUSINESS.
Workers + queue
BullMQ, Sidekiq, Celery — jobs async, on sort tout ce qui > 100 ms du chemin de requête.
Hygiène prod
Facture prévisible
Tier mensuel flat — un launch viral ne multiplie pas ta facture par 10.
Pas de piège egress
Quota bandwidth inclus ; pas de cauchemar à 0,09 $/Go comme AWS.
Secrets · niveau KMS
Variables d’env chiffrées au repos, scope par service, audit log à la lecture.
EU residency
API + DB + logs en régions UE ; DPA signé ; export à tout moment.
Flux requête API · budget p50
~22 ms total · chemin cache hit
+ 0 msLB · TLS+ 4 msapi · container+ 8 msauth · JWT verify+ 9 msRedis · cache hit+ 22 msPostgres · query

Les cache hits s’arrêtent à Redis (~9 ms). Les misses descendent jusqu’à Postgres — ton boulot est de garder le hit ratio Redis > 80 % pour que le p99 reste sous 80 ms.

§ 02·Déploiement · concept

git push, prod en 90 secondes

Pour toi si…

Ton CI est ton runbook.

Deux chemins depuis le même repo Git. Chemin PaaS : connecter le repo, push sur main, conteneur build et rollout en ~90 secondes avec gate sur le health check. Chemin VPS : docker compose up sur ta machine derrière un Load Balancer — même Dockerfile, plus de contrôle, pas de magie de scaling cachée. Tu choisis l’arbitrage, on supporte les deux.

4 étapes rollout
1 · Connecter Git
OAuth GitHub ou GitLab — un webhook déclenche le build à chaque push sur main.
2 · Build conteneur
Lit ton Dockerfile, cache les layers, push sur le registry privé. ~30 s typique.
3 · Rollout gated par health check
Les nouvelles replicas montent ; le LB ne route que quand /health renvoie 200. Les anciennes sont drainées.
4 · Rollback en un clic
Les 10 derniers builds gardés chauds — rollback en un appel API, ~10 s pour revenir.
Garde-fous de deploy
Endpoint health
/health teste DB + Redis — remonter les vraies pannes, pas juste la vitalité du process.
Migrations · idempotentes
Lancées au start du conteneur, gated par un lock — les replicas ne se piétinent pas.
Taux d’erreur post-deploy
Auto-rollback si les 5xx dépassent 2 % pendant les 60 premières secondes du rollout.
Audit log
Chaque deploy attribué à un user + SHA commit + diff — requis pour SOC 2.
Timeline deploy · ~90 s end-to-end
PaaS · branche main
0 s
30 s
40 s
20 s
step 1
git push
step 2
build + push image
step 3
health-gated rollout
step 4
old drained
§ 02·Déploiement · power user

Même Dockerfile · PaaS ou VPS

Dockerfile · marche tel quel sur PaaS ou VPS
dockerfile
# Dockerfile · same image runs on PaaS-CONTAINER and on a VPS
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
EXPOSE 3000
HEALTHCHECK --interval=10s --timeout=2s --retries=3 \
CMD wget -q -O- http://127.0.0.1:3000/health || exit 1
CMD ["node", "dist/server.js"]
Secrets · fonctionnement
PaaS + VPS
  • Variables env chiffrées au repos avec clés KMS
  • Scope par service ; pas de pool de secrets partagé
  • Accès lecture loggés avec user + timestamp
  • API de rotation ; ancienne version utilisable 24 h
  • Injectés en env vars ou fichiers au start du conteneur
  • Export bulk vers .env (admin uniquement)
§ 03·Échelle · concept

Scaler horizontalement sans facture surprise

Pour toi si…

Un pic ne doit pas te réveiller à 3 h.

Les services API stateless scalent en ajoutant des replicas. Le difficile, c’est aux frontières stateful : pool de connexions DB, saturation de la queue, rate limits downstream. On gère le facile pour toi (replicas en quelques secondes) et on documente le difficile pour que ton runbook soit honnête.

Leviers de scaling
Horizontal · replicas
Min/max replicas + cible CPU — l’autoscaler ajoute des nœuds quand le p95 dépasse la cible.
Offload queue
Tout ce qui dépasse 100 ms part en worker — la requête renvoie 202 + job id, polling ou SSE pour le résultat.
Sizing pool DB
Plafonner replicas × taille du pool sous max_connections de la DB — sinon scaler aggrave la situation.
Cacher le banal
GET /me, /pricing, /catalog — les cacher Redis, p99 divisé par 10.
Patterns de deploy
Blue / green
Nouvelle version montée à côté de l’ancienne ; bascule LB quand health vert ; rollback instantané.
Canary
Router 1 → 5 → 25 → 100 % du trafic vers la nouvelle version, gated sur taux d’erreur.
Rolling
Remplacer les replicas une par une — plus lent mais simple, défaut K8s.
Multi-région
Deux clusters en régions UE, GeoDNS devant — survit à un incident mono-région.
Profil 24 h · req/s et replicas
autoscaler · cible p95 200 ms
00h06h12h18h23hreq/sreplicas (--)

Les replicas suivent la demande avec un lag de 60 s — assez vite pour absorber la croissance, assez lent pour ignorer le bruit. Min replicas = 2 (HA), max = 6 (plafond coût).

§ 03·Échelle · mesures

Débit soutenu par configuration

Débit · API Node, ratio cache 80 %
p95 soutenu, origine UE
configreq/sp95€/molecture
PaaS-CONTAINER · 1 replica120 rps85 ms€60MVP / staging
PaaS-BUSINESS · 3 replicas + Redis600 rps110 ms€242petite prod
2× VPS-BUSINESS + LB-BUSINESS1 400 rps95 ms€399self-hosted HA
PaaS-KUBERNETES · 6 replicas + LB4 200 rps80 ms€1 508scale

Estimations de dimensionnement. Le ratio pertinent est req/s par euro : un cluster VPS self-hosted bat le PaaS de 2 à 3×, mais tu perds du temps d’ops. Le PaaS gagne quand le temps d’équipe coûte plus cher que l’infra.

§ 04·Fiabilité · concept

Des SLO alignés avec ton contrat

Pour toi si…

Ton SLA est signé, pas hand-waved.

Les clients B2B demandent un SLA avant de signer. La vraie réponse, c’est un SLO publié (ex. 99,9 % de dispo mensuelle), un error budget que tu suis vraiment, et une status page qui dit la vérité. On fournit le contrat infra — tu fournis le contrat client, et l’écart entre les deux est ton boulot.

Choisis ton SLO
99.0 % monthly
Tolère 7,2 h de downtime/mois. OK pour MVP, intenable pour B2B SaaS.
99.9 % monthly
43 min/mois de budget. Engagement B2B standard — exige HA + rollback testé.
99.95 % monthly
21,6 min/mois. Multi-région actif-passif devient obligatoire.
99.99 % monthly
4,3 min/mois. Actif-actif multi-région, testé en chaos. Coût réel.
Observabilité
Logs · stream
stdout par replica streamé vers Loki/Grafana — recherche par trace id en secondes.
Métriques · Prometheus
Scrape natif ; exporte tes compteurs via /metrics. Dashboards Grafana inclus.
Traces · OTel
Collector OpenTelemetry au niveau du LB — traces distribuées du edge à la DB.
Status page · publique
Auto-générée depuis tes SLOs — donne aux clients B2B un endroit où regarder.
Burn-down du budget d’erreur · SLO 99,9 % mensuel
64 % consommé · 14 min restantes
50 %0 %100 %d1d8d15d22d30

Chaque point est un incident réel qui mange dans le budget de 43 min/mois. Tant que la ligne reste sous le pointillé 50 % à mi-mois, tu peux continuer à livrer. Au-dessus, on freeze les deploys risqués.

§ 05·Coût · concept

Factures prévisibles, pas de surprise à la requête

Trois profils de cycle de vie

PaaS pour la vitesse, VPS pour le rapport coût.

MVP : PaaS-CONTAINER, push-to-deploy, zéro temps d’ops. Petite prod : PaaS-BUSINESS ou cluster VPS self-hosted — les deux marchent, le second est moins cher. Scale : Kubernetes managé dès que tu as 30+ services. La transition entre tiers est un changement de config, pas un re-platform.

Formule TCO

TCO = bundle + ops time + egress

La plupart des surprises en hébergement SaaS viennent de l’egress : AWS facture 0,09 $/Go sortant, ce qui produit des factures à 4 chiffres sur une API active. Nos bundles incluent des quotas de bande passante généreux sur chaque tier VPS, sans surprise au Go. Le temps d’ops est réel mais borné — même Dockerfile, mêmes env vars, même CI du PaaS au K8s.

Ce que les PaaS cachent
Frais egress
AWS, GCP, Azure : 0,09 $/Go. Heroku passe le coût. Vercel facture les invocations.
Add-ons DB
Heroku Postgres Standard 0 démarre à 50 $/mois. Render facture à part. À additionner avant de signer.
Minutes de build
Vercel facture le temps de build au-dessus du quota inclus — les gros Next.js explosent vite.
Prix par siège
Vercel et d’autres facturent au membre. Une équipe eng de 12 = +240 $/mois, sans capacité en plus.
Bundles VMCloud · chemin PaaS ou VPS
tarif public · UE
profilcapacitécomposition€/mo
MVP · push to deploy~1 M req/jourPAAS-CONTAINER60.48
Production · PaaS~10 M req/jourPAAS-BUSINESS241.93
Self-hosted · cluster VPS~30 M req/jour · HA2× VPS-BUSINESS · LB-BUSINESS399.18
Scale · Kubernetes managé~100 M req/jour · multi-AZPAAS-KUBERNETES · LB-ENTERPRISE1508.05
PaaS / serverless · tarifs publics
$ / mo · Apr 2026
Heroku · Standard-2Xpar dyno1 Go RAM$ 50
Render · Standardpar service2 Go RAM$ 25
Fly.io · shared 4× / 4 GBpar machinerégion UE$ 33
Vercel · Propar siège+ frais à l’usage$ 20
AWS · ECS Fargate (1 vCPU)par tâchehors egress$ 36

Prix unitaires pour un service en config "petite prod". La comparaison pertinente se fait sur la facture entière : dyno + DB + redis + addons + egress.

Bundle VMCloud vs PaaS · par étape du cycle
mensuel, comparable
profilVMCloud€/moPaaS le plus proche$/molecture
MVP · 1 service · 1 workerMVP · push to deploy€60Heroku · 2 dynos · 1 web + 1 worker$50équivalent
Petite prod · 3 services · 2 workersProduction · PaaS€242Render · 5 services · tier business$125SaaS gagne
Mid prod · API multi-régionSelf-hosted · cluster VPS€399Fly.io · 6 machines + DB · 2 régions$320équivalent
Scale · 50 services · K8sScale · Kubernetes managé€1 508AWS · ECS / EKS · + egress + ELB$2 400VMCloud gagne

Lecture : le PaaS a du sens pour un MVP — moins d’ops, coût comparable. L’équation bascule dès plusieurs services ou besoins DB / Redis non triviaux. Les plateformes AWS-class coûtent une fortune dès qu’on additionne egress, ELB, NAT et instances DB.

§ 06·Questions

De vraies questions de vraies équipes

Des leads techniques qui hésitent entre PaaS, VPS et Kubernetes.

Compose, PaaS ou Kubernetes — lequel ?

Compose sur VPS pour des stacks simples (1 à 5 services, un seul hôte). PaaS-CONTAINER / PaaS-BUSINESS pour le push-to-deploy avec scaling managé. PaaS-KUBERNETES quand il faut de l’autoscale pod, plusieurs namespaces, un service mesh mTLS — typiquement au-delà de 20 services.

Comment gérer la CI/CD ?

Bring your own — GitHub Actions, GitLab CI, CircleCI poussent tous sur le registry VMCloud puis déclenchent un deploy via API ou CLI. On ne te lock pas dans un pipeline propriétaire. Des workflows d’exemple sont publiés dans la doc.

Et les secrets / variables d’env ?

Chiffrés au repos avec clés KMS, scope par service, audit log à la lecture. Rotation avec fenêtre de grâce 24 h pour qu’un deploy en cours ne casse pas les replicas. CLI permet l’export bulk vers .env (admin uniquement) pour DR.

Multi-région — supporté ?

Oui. Monter deux clusters dans deux régions UE, GeoDNS devant, réplication Postgres async. Actif-actif pour les services stateless, actif-passif pour le stateful — avec runbooks de failover documentés. La plupart restent en mono-région jusqu’à ce qu’un contrat l’oblige.

Puis-je faire tourner ma propre DB / Redis sur le même VPS ?

Oui en début de vie. Dès 1 Go de working set ou besoin de point-in-time recovery, les déplacer sur un VPS dédié ou notre add-on DB managé (à venir). Co-localiser DB et app est un piège dès que les deux grossissent.

RGPD + SOC 2 ?

Infra opérée sous contrôles alignés SOC 2 et ISO 27001. DPA couvre les obligations RGPD du sous-traitant. Audit logs (deploys, lectures de secrets, actions admin) exportables en JSON pour ta propre collecte d’evidence SOC 2.

Prêt à shipper ?

D’un MVP à 1 service à un cluster Kubernetes à 50 services — même Dockerfile, même API secrets, factures prévisibles, pas de frais à la requête, données en UE.