La scalabilité ne consiste pas à gérer des millions de requêtes au jour un. C'est concevoir des systèmes qui peuvent croître sans nécessiter une réécriture. Les meilleures architectures font du scaling un changement de configuration, pas un projet d'ingénierie.
Scaling Horizontal vs Vertical
Dimension
Horizontal (Scale Out)
Vertical (Scale Up)
Mécanisme
Ajouter des instances
Augmenter les ressources
Limite haute
Pratiquement illimitée
Plafond matériel
Courbe de coût
Linéaire (par nœud)
Exponentielle (matériel premium)
Complexité
Plus haute (état distribué)
Plus basse (machine unique)
Temps d'arrêt
Zéro (mises à jour progressives)
Souvent nécessaire (redimensionnement)
Cohérence des données
Nécessite coordination
Plus simple (instance unique)
Rayon d'impact panne
Un nœud
Système entier
Quand utiliser
Services sans état, couche web
Bases de données, workloads en mémoire
tadata
Un groupe Auto Scaling lors d'un pic matinal (req/s par pas de 10 minutes) : le scale-out suit la demande, le scale-in attend la fin du cooldown, le maximum de 12 est atteint au pic. Les pas sous-provisionnés se traduisent en latence ; relevez le maximum ou ajoutez du scaling prédictif.
Une requête à travers un CDN (latences indicatives). La réponse DNS pour shop.example.com pointe vers l'edge le plus proche, pas vers l'origine ; un cache hit s'arrête au saut 2 ; un miss passe par l'origin shield puis l'origine, dont la véritable IP ne doit accepter que le trafic venant du CDN, sinon les attaquants contournent le WAF (web application firewall) en s'y connectant directement
Instances dans des sous-réseaux privés, nœuds ALB dans des sous-réseaux publics des mêmes AZ. Stockez les sessions dans ElastiCache ou DynamoDB pour que n'importe quelle instance puisse servir n'importe quel utilisateur et que l'affinité de session devienne optionnelle.
Concevoir pour 10x, construire pour 3x. L'architecture doit supporter 10x conceptuellement. Implémentez l'infrastructure pour 3x. Cela évite le sur-engineering tout en gardant un chemin de croissance clair.
Le sans-état est le fondement. Chaque pattern de scaling devient plus facile quand les services sont sans état. Déplacez les sessions vers Redis, les uploads vers le stockage objet, les données persistantes vers des bases gérées.
L'invalidation du cache est la partie difficile. Ajouter un cache est facile. Savoir quand l'invalider est le vrai défi. Préférez des TTL courts à une logique d'invalidation complexe.