Builders Academy
Scalabilité — Concevoir pour la Croissance
1 of 2

Chapitre 1 · Leçon 1

Scaling Vertical vs Horizontal

Choisir la bonne stratégie selon la croissance

Section 1

Les deux axes de scalabilité

Step 1

Vertical vs Horizontal

Scaling vertical (scale up) : augmenter les ressources d'une seule machine. Scaling horizontal (scale out) : ajouter des machines identiques. Les deux approches ont des limites et des cas d'usage différents.

snippet.typescript

typescript
1/*
2 * SCALING VERTICAL (Scale Up)
3 * ───────────────────────────────────────────────────────────────
4 * Serveur 1 :  4 CPU,  16 GB RAM  → 100 req/s
5 *     ↓ Upgrade
6 * Serveur 1 : 32 CPU, 256 GB RAM  → 800 req/s
7 *
8 * ✅ Avantages :
9 *   - Simple : pas de changement d'architecture
10 *   - Pas de problème de cohérence de données
11 *   - Adapté aux bases de données (moins de complexité)
12 *
13 * ❌ Limites :
14 *   - Coût exponentiellement croissant
15 *   - Single point of failure (1 machine = 1 crash = tout down)
16 *   - Limite physique (max 128 CPU dans un serveur)
17 *   - Downtime pendant l'upgrade
18 *
19 *
20 * SCALING HORIZONTAL (Scale Out)
21 * ───────────────────────────────────────────────────────────────
22 * Serveur 1 :  4 CPU,  16 GB RAM  → 100 req/s
23 *     ↓ x10 instances
24 * 10 × Serveur :  4 CPU,  16 GB RAM  → 1000 req/s
25 *
26 * ✅ Avantages :
27 *   - Coût linéaire (10 petites machines < 1 grosse)
28 *   - Haute disponibilité (si une tombe, les autres continuent)
29 *   - Scalabilité quasi-illimitée
30 *   - Déploiement sans downtime (rolling updates)
31 *
32 * ❌ Challenges :
33 *   - Nécessite des services stateless
34 *   - Partage de sessions (pas de mémoire locale)
35 *   - Cohérence des données plus complexe
36 *   - Load balancer nécessaire
37 *
38 * RÈGLE PRATIQUE :
39 * - 0 → 100k users : scaling vertical + optimisation
40 * - 100k → 1M users : scaling horizontal des services stateless
41 * - 1M+ users : architecture distribuée complète
42 */

Step 2

Services Stateless — condition du scaling horizontal

Un service stateless ne stocke aucune donnée en mémoire entre les requêtes. Chaque requête contient toutes les informations nécessaires. C'est la condition indispensable au scaling horizontal.

snippet.typescript

typescript
1/*
2 * SCALING VERTICAL (Scale Up)
3 * ───────────────────────────────────────────────────────────────
4 * Serveur 1 :  4 CPU,  16 GB RAM  → 100 req/s
5 *     ↓ Upgrade
6 * Serveur 1 : 32 CPU, 256 GB RAM  → 800 req/s
7 *
8 * ✅ Avantages :
9 *   - Simple : pas de changement d'architecture
10 *   - Pas de problème de cohérence de données
11 *   - Adapté aux bases de données (moins de complexité)
12 *
13 * ❌ Limites :
14 *   - Coût exponentiellement croissant
15 *   - Single point of failure (1 machine = 1 crash = tout down)
16 *   - Limite physique (max 128 CPU dans un serveur)
17 *   - Downtime pendant l'upgrade
18 *
19 *
20 * SCALING HORIZONTAL (Scale Out)
21 * ───────────────────────────────────────────────────────────────
22 * Serveur 1 :  4 CPU,  16 GB RAM  → 100 req/s
23 *     ↓ x10 instances
24 * 10 × Serveur :  4 CPU,  16 GB RAM  → 1000 req/s
25 *
26 * ✅ Avantages :
27 *   - Coût linéaire (10 petites machines < 1 grosse)
28 *   - Haute disponibilité (si une tombe, les autres continuent)
29 *   - Scalabilité quasi-illimitée
30 *   - Déploiement sans downtime (rolling updates)
31 *
32 * ❌ Challenges :
33 *   - Nécessite des services stateless
34 *   - Partage de sessions (pas de mémoire locale)
35 *   - Cohérence des données plus complexe
36 *   - Load balancer nécessaire
37 *
38 * RÈGLE PRATIQUE :
39 * - 0 → 100k users : scaling vertical + optimisation
40 * - 100k → 1M users : scaling horizontal des services stateless
41 * - 1M+ users : architecture distribuée complète
42 */

Section 2

Load Balancing

Step 3

Algorithmes de load balancing

Le load balancer distribue les requêtes entre plusieurs instances. L'algorithme de distribution impacte la performance et la cohérence.

snippet.typescript

typescript
1/*
2 * SCALING VERTICAL (Scale Up)
3 * ───────────────────────────────────────────────────────────────
4 * Serveur 1 :  4 CPU,  16 GB RAM  → 100 req/s
5 *     ↓ Upgrade
6 * Serveur 1 : 32 CPU, 256 GB RAM  → 800 req/s
7 *
8 * ✅ Avantages :
9 *   - Simple : pas de changement d'architecture
10 *   - Pas de problème de cohérence de données
11 *   - Adapté aux bases de données (moins de complexité)
12 *
13 * ❌ Limites :
14 *   - Coût exponentiellement croissant
15 *   - Single point of failure (1 machine = 1 crash = tout down)
16 *   - Limite physique (max 128 CPU dans un serveur)
17 *   - Downtime pendant l'upgrade
18 *
19 *
20 * SCALING HORIZONTAL (Scale Out)
21 * ───────────────────────────────────────────────────────────────
22 * Serveur 1 :  4 CPU,  16 GB RAM  → 100 req/s
23 *     ↓ x10 instances
24 * 10 × Serveur :  4 CPU,  16 GB RAM  → 1000 req/s
25 *
26 * ✅ Avantages :
27 *   - Coût linéaire (10 petites machines < 1 grosse)
28 *   - Haute disponibilité (si une tombe, les autres continuent)
29 *   - Scalabilité quasi-illimitée
30 *   - Déploiement sans downtime (rolling updates)
31 *
32 * ❌ Challenges :
33 *   - Nécessite des services stateless
34 *   - Partage de sessions (pas de mémoire locale)
35 *   - Cohérence des données plus complexe
36 *   - Load balancer nécessaire
37 *
38 * RÈGLE PRATIQUE :
39 * - 0 → 100k users : scaling vertical + optimisation
40 * - 100k → 1M users : scaling horizontal des services stateless
41 * - 1M+ users : architecture distribuée complète
42 */

Topics and skills covered

  • System Design
  • Scalabilité
  • Load Balancing
  • Stateless