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

Chapitre 1 · Leçon 2

Théorème CAP

Cohérence, Disponibilité, Tolérance aux partitions

Section 1

Le théorème CAP expliqué

Step 1

Choisir 2 propriétés sur 3

Le théorème CAP stipule qu'un système distribué ne peut garantir simultanément que 2 des 3 propriétés : Consistency, Availability, Partition tolerance.

snippet.typescript

typescript
1/*
2 * Théorème CAP — Eric Brewer, 2000
3 *
4 * C — Consistency (Cohérence)
5 *   Tous les nœuds voient les mêmes données au même moment.
6 *   Une lecture retourne toujours la valeur la plus récente.
7 *
8 * A — Availability (Disponibilité)
9 *   Chaque requête reçoit une réponse (pas forcément la plus récente).
10 *   Le système continue à répondre même si certains nœuds sont down.
11 *
12 * P — Partition Tolerance (Tolérance aux partitions)
13 *   Le système continue à fonctionner même si des messages réseau
14 *   sont perdus entre des nœuds.
15 *
16 * Dans un réseau distribué, P est INCONTOURNABLE
17 * (les partitions réseau ARRIVENT, on ne peut pas les ignorer)
18 *
19 * Donc le vrai choix est : CP ou AP ?
20 *
21 * ┌─────────────────┬────────────────────────────────────────┐
22 * │   CP (C+P)      │ AP (A+P)                               │
23 * ├─────────────────┼────────────────────────────────────────┤
24 * │ PostgreSQL      │ Cassandra, DynamoDB                    │
25 * │ MongoDB (*)     │ CouchDB, Riak                          │
26 * │ HBase           │ DNS                                    │
27 * │ ZooKeeper       │ Caches distribués                      │
28 * ├─────────────────┼────────────────────────────────────────┤
29 * │ Cohérence forte │ Haute disponibilité                    │
30 * │ Peut refuser    │ Peut retourner des données obsolètes   │
31 * │ des requêtes    │ (eventual consistency)                 │
32 * ├─────────────────┼────────────────────────────────────────┤
33 * │ Banque, paiements│ Panier e-commerce, likes, vues       │
34 * │ Stocks          │ Profils utilisateurs                   │
35 * └─────────────────┴────────────────────────────────────────┘
36 */
37
38// Exemple : cohérence éventuelle (AP) pour les likes
39// Sur une plateforme comme YouTube :
40
41// ✅ OK : un like peut mettre quelques secondes à apparaître pour tous
42// ✅ OK : le compteur peut être légèrement inexact à un instant T
43// ❌ PAS OK : le like peut être perdu
44
45// ❌ Pas acceptable pour les paiements (CP obligatoire) :
46// - Si je paie 10 000 FCFA, le solde DOIT être réduit sur tous les nœuds
47// - La cohérence éventuelle pourrait permettre une double dépense

snippet.typescript

typescript
1/*
2 * Théorème CAP — Eric Brewer, 2000
3 *
4 * C — Consistency (Cohérence)
5 *   Tous les nœuds voient les mêmes données au même moment.
6 *   Une lecture retourne toujours la valeur la plus récente.
7 *
8 * A — Availability (Disponibilité)
9 *   Chaque requête reçoit une réponse (pas forcément la plus récente).
10 *   Le système continue à répondre même si certains nœuds sont down.
11 *
12 * P — Partition Tolerance (Tolérance aux partitions)
13 *   Le système continue à fonctionner même si des messages réseau
14 *   sont perdus entre des nœuds.
15 *
16 * Dans un réseau distribué, P est INCONTOURNABLE
17 * (les partitions réseau ARRIVENT, on ne peut pas les ignorer)
18 *
19 * Donc le vrai choix est : CP ou AP ?
20 *
21 * ┌─────────────────┬────────────────────────────────────────┐
22 * │   CP (C+P)      │ AP (A+P)                               │
23 * ├─────────────────┼────────────────────────────────────────┤
24 * │ PostgreSQL      │ Cassandra, DynamoDB                    │
25 * │ MongoDB (*)     │ CouchDB, Riak                          │
26 * │ HBase           │ DNS                                    │
27 * │ ZooKeeper       │ Caches distribués                      │
28 * ├─────────────────┼────────────────────────────────────────┤
29 * │ Cohérence forte │ Haute disponibilité                    │
30 * │ Peut refuser    │ Peut retourner des données obsolètes   │
31 * │ des requêtes    │ (eventual consistency)                 │
32 * ├─────────────────┼────────────────────────────────────────┤
33 * │ Banque, paiements│ Panier e-commerce, likes, vues       │
34 * │ Stocks          │ Profils utilisateurs                   │
35 * └─────────────────┴────────────────────────────────────────┘
36 */
37
38// Exemple : cohérence éventuelle (AP) pour les likes
39// Sur une plateforme comme YouTube :
40
41// ✅ OK : un like peut mettre quelques secondes à apparaître pour tous
42// ✅ OK : le compteur peut être légèrement inexact à un instant T
43// ❌ PAS OK : le like peut être perdu
44
45// ❌ Pas acceptable pour les paiements (CP obligatoire) :
46// - Si je paie 10 000 FCFA, le solde DOIT être réduit sur tous les nœuds
47// - La cohérence éventuelle pourrait permettre une double dépense

Topics and skills covered

  • System Design
  • CAP
  • Cohérence
  • Disponibilité
  • BASE vs ACID