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