Aller au contenu

Scaling

Vertical, horizontal, auto-scaling, scaling predictif et scale-to-zero.


Vertical vs horizontal

Deux philosophies fondamentales pour augmenter la capacité.

Dimension Scaling vertical (scale up) Scaling horizontal (scale out)
Principe Ressources plus grandes sur la même machine Plusieurs machines de même taille
Vitesse Lent (reboot souvent nécessaire) Rapide (nouvelle instance en secondes)
Limite Taille max de l'instance (hardware) Theoriquement illimité
Coût Non-lineaire (grosses instances très cheres) Lineaire
Disponibilité Downtime pendant le redimensionnement Zero downtime (si stateless)
Complexité applicative Aucune modification requise Nécessité une app stateless ou partitionnee
Cas d'usage Bases de données, legacy monolithiques Services web, microservices, workers

Arbre de décision

graph TD
    A["Besoin de plus\nde capacite"] --> B{"Application\nstateless ?"}
    B -->|Non| C["Scaling vertical\nou refactorisation"]
    B -->|Oui| D{"Limite instance\natteinte ?"}
    D -->|Non| E{"Pic court\nou permanent ?"}
    D -->|Oui| F["Scaling horizontal\nobligatoire"]
    E -->|Court| G["Auto-scaling\n(scale out/in)"]
    E -->|Permanent| H["Scaling horizontal\n+ revue baseline"]
    C --> I{"Migration\npossible ?"}
    I -->|Oui| F
    I -->|Non| J["Vertical seul\n(accepter la limite)"]

Auto-scaling

L'auto-scaling ajuste automatiquement le nombre d'instances ou les ressources selon la charge.

Mécanismes principaux

Mécanisme Plateforme Métrique déclencheur
HPA (Horizontal Pod Autoscaler) Kubernetes CPU, RAM, métriques custom
KEDA Kubernetes Queues, topics, métriques externes
ASG (Auto Scaling Group) AWS CPU, ALB requests, métriques custom
VMSS (VM Scale Set) Azure CPU, métriques Azure Monitor
MIG (Managed Instance Group) GCP CPU, HTTP load balancing

Parametres critiques d'un auto-scaler

  • Métrique de déclenchement : CPU moyen, requêtes en attente, latence p95
  • Seuil de scale-out : ex. CPU > 70 % pendant 3 minutes
  • Seuil de scale-in : ex. CPU < 30 % pendant 10 minutes (cool-down plus long)
  • Min/Max instances : bornes absolues — le max est un garde-fou budgetaire
  • Cool-down period : temps de stabilisation entre deux décisions d'auto-scaling

Auto-scaling sans limite max = carte de credit illimitée

Un auto-scaler sans borne supérieure configurée peut provisionner des centaines d'instances en cas de boucle infinie, de DDoS ou de bug applicatif. Toujours définir un maximum realiste et des alertes sur "instance count > N".


Scaling predictif

Le scaling predictif anticipe les besoins avant que la charge n'augmente.

Approches

Approche Principe Adapté a
Scheduled scaling Cron : scale out a 8h, scale in a 20h Pics prévisibles et réguliers
ML-based scaling Modèle entraîné sur historique Pics semi-prévisibles, saisonnalite complexe
Event-driven pre-scaling Trigger avant un événement métier connu Campagnes, Black Friday, lancements

Scheduled scaling — exemple de logique

  • Identifier les patterns recurents dans la baseline (heures de pointe par jour de semaine)
  • Configurer le scale-out 15 minutes avant le pic prévu (latence de démarrage instance)
  • Configurer le scale-in 30 minutes après la fin du pic (amortir les queues residuelles)

Limites du scaling predictif

  • Un modèle ML nécessité plusieurs mois de données d'entrainement
  • Les événements non historiques (viralite soudaine) ne sont pas predictibles
  • Le coût du sur-provisionnement predictif doit être compare au coût d'un incident

Scale-to-zero

Le scale-to-zero descend à zero instance quand il n'y a pas de trafic, éliminant les coûts d'attente.

Technologie Contexte Cold start typique
AWS Lambda Serverless functions < 100 ms (Python/Node), 1-3s (JVM)
Azure Functions Serverless functions Variable selon runtime
Google Cloud Run Containers serverless 1-5 secondes
Knative Serving Kubernetes Dépend de l'image container
KEDA scale-to-zero Kubernetes Dépend du workload

Cold start : le compromis

  • Avantage : zero coût quand inactif, idéal pour charges intermittentes
  • Inconvénient : première requête après silence = latence élevée (cold start)
  • Mitigation : provisioned concurrency (Lambda), min-instances = 1 (Cloud Run), warm-up requests

Scale-to-zero inadapte aux workloads SLA stricts

Pour les APIs avec SLA p99 < 100 ms, le cold start est inacceptable. Garder au minimum une instance chaude ou utiliser le provisioned concurrency.


Limites et quotas

Tout environnement cloud impose des limites qu'il faut intégrer dans le capacity planning.

Type de limite Exemples Action
Quotas de service Max 200 vCPU par region AWS Demander une augmentation en avance
Limites de taux (API) 100 appels/s à l'API de provisioning Retries avec backoff, quotas augmentables
Limites physiques Bande passante max d'un type d'instance Changer de type ou distribuer
Limites de compte Budget AWS Organizations, politique Azure Coordonner avec FinOps/Finance

Demander les augmentations de quota à l'avance

Les demandes de quota chez les providers cloud peuvent prendre 24h a 5 jours ouvrables. Ne pas attendre la saturation pour faire la demande. Inclure les augmentations de quota dans la checklist pre-lancement.


Points clés

  • Scaling vertical pour les composants avec état (databases), horizontal pour les services stateless
  • L'auto-scaler sans borne supérieure est un risque financier — toujours fixer un max
  • Le scaling predictif (schedule + ML) complement l'auto-scaling reactif sur les pics prévisibles
  • Scale-to-zero convient aux charges intermittentes, pas aux SLA stricts
  • Anticiper les quotas cloud et en demander l'augmentation avant d'en avoir besoin