Cohérent, disponible, tolérant à la partition. Le réseau coupera — il faudra en sacrifier un.Consistent, available, partition-tolerant. The network will cut — you'll sacrifice one.
Le sharding du numéro précédent distribue la donnée pour la capacité ; pour survivre à la panne d'une machine, on réplique chaque morceau sur plusieurs nœuds. Et dès qu'une donnée existe en plusieurs exemplaires, une question devient inévitable : que se passe-t-il quand le réseau coupe entre ces copies ? Le théorème CAP y répond, et sa réponse est un mur. Il énonce qu'un système distribué ne peut garantir simultanément que trois propriétés : la cohérence (toute lecture voit la dernière écriture), la disponibilité (toute requête reçoit une réponse), et la tolérance à la partition (le système continue malgré une coupure réseau). On résume souvent par « choisis-en deux » — mais c'est un raccourci trompeur. Car la partition n'est pas une option qu'on accepte ou refuse : sur un vrai réseau, elle finit toujours par arriver, exactement comme le Vol 7 l'a martelé — le réseau n'est pas fiable. Le vrai énoncé est donc plus dur : quand une partition survient — et elle surviendra —, il faut choisir entre rester cohérent et rester disponible. On ne peut pas avoir les deux pendant la coupure. Le réflexe n'est pas « notre base est cohérente ET disponible » : c'est « quand le réseau cassera, ce système préfère-t-il refuser de répondre, ou répondre peut-être faux ? »The previous issue's sharding distributes data for capacity; to survive one machine's failure, you replicate each piece across several nodes. And once data exists in several copies, a question becomes inescapable: what happens when the network cuts between those copies? The CAP theorem answers, and its answer is a wall. It states that a distributed system cannot simultaneously guarantee three properties: consistency (every read sees the latest write), availability (every request gets a response), and partition tolerance (the system keeps working despite a network cut). It's often summed up as 'pick two' — but that's a misleading shortcut. Because the partition isn't an option you accept or refuse: on a real network, it always ends up happening, exactly as Vol 7 hammered — the network isn't reliable. So the true statement is harder: when a partition occurs — and it will — you must choose between staying consistent and staying available. You can't have both during the cut. The reflex isn't 'our database is consistent AND available': it's 'when the network breaks, does this system prefer to refuse to answer, or to answer maybe-wrong?'
# deux réplicas pour survivre à une panne. on écrit, on lit, "et c'est cohérent". vraiment ? def write(key, value): primary.put(key, value) replica.put(key, value) # 💥 et si le réseau coupe ICI ? le réplica ne reçoit jamais l'écriture return "ok" # on renvoie "ok" — mais les deux copies divergent déjà def read(key): return nearest_node().get(key) # 💥 on lit le nœud le plus proche — qui peut détenir l'ANCIENNE valeur # tant que le réseau tient, tout va bien. le jour où il coupe — et il coupera —, il faut un CHOIX : # refuser de répondre pour rester cohérent, ou répondre une valeur peut-être périmée pour rester dispo. # ce code ne choisit pas. il fait semblant que la partition n'arrive jamais. c'est le seul vrai bug.
Quand un nœud ne peut plus joindre ses pairs, il n'a que deux conduites possibles. Soit il refuse de répondre tant qu'il n'est pas sûr de détenir la vérité — il reste cohérent, mais il devient indisponible pour cette donnée. Soit il répond depuis sa propre copie, quitte à servir une valeur que l'autre côté a déjà changée — il reste disponible, mais il devient potentiellement incohérent. Aucune troisième voie n'existe pendant la coupure : c'est l'un ou l'autre, et le choix dépend entièrement de ce que coûte le plus, ici, une mauvaise réponse face à pas de réponse du tout.When a node can no longer reach its peers, it has only two possible conducts. Either it refuses to answer until it's sure it holds the truth — it stays consistent, but becomes unavailable for that data. Or it answers from its own copy, even if it means serving a value the other side has already changed — it stays available, but becomes potentially inconsistent. No third way exists during the cut: it's one or the other, and the choice depends entirely on what costs more, here, a wrong answer versus no answer at all.
CAP se lit en trois temps. D'abord, comprendre que la tolérance à la partition n'est pas négociable : tout système réellement distribué subira des coupures réseau, des nœuds injoignables, des paquets perdus — le Vol 7 l'a posé en loi. On ne « choisit » donc pas de renoncer à P ; on doit le supporter. Ensuite, en déduire le vrai choix : puisque P est imposé, le théorème oppose en réalité C et A, et seulement pendant les partitions. Un système CP privilégie la cohérence : sous coupure, il refuse les opérations qu'il ne peut garantir. Un système AP privilégie la disponibilité : sous coupure, il répond toujours, et réconcilie après. Enfin, replacer la nuance : hors partition — c'est-à-dire la plupart du temps —, on n'est plus condamné à sacrifier ; on arbitre alors entre latence et cohérence, ce que l'extension PACELC nomme explicitement. Sauter la première étape, c'est croire qu'on a un système « CA » — un système qui n'existe que tant que le réseau ne tombe jamais.CAP reads in three beats. First, understand that partition tolerance isn't negotiable: any truly distributed system will suffer network cuts, unreachable nodes, lost packets — Vol 7 laid it down as law. So you don't 'choose' to give up P; you must endure it. Then, deduce the real choice: since P is imposed, the theorem actually opposes C and A, and only during partitions. A CP system favors consistency: under a cut, it refuses the operations it can't guarantee. An AP system favors availability: under a cut, it always answers, and reconciles afterward. Finally, restore the nuance: outside a partition — that is, most of the time — you're no longer condemned to sacrifice; you then trade latency against consistency, what the PACELC extension names explicitly. Skipping the first beat means believing you have a 'CA' system — one that exists only as long as the network never falls.
CAP n'est pas un pattern qu'on ajoute, c'est une contrainte qu'on subit — mais le choix qu'elle impose, lui, se décide, et il se décide sur un coût mesurable. La question n'est jamais « préfère-t-on, en abstrait, la cohérence ou la disponibilité ? », mais « ici, sur cette donnée précise, combien coûte une réponse fausse, et combien coûte une absence de réponse ? » Servir un solde bancaire périmé, accepter deux fois le dernier billet en stock : une incohérence se chiffre parfois en argent perdu ou en litige — on prend CP. Afficher un nombre de likes en retard de trois secondes, un panier qui se synchronise un instant plus tard : l'incohérence est invisible, l'indisponibilité serait coûteuse — on prend AP. Le clore le volume de la scalabilité, c'est admettre que même ce choix-là, le plus théorique de la série, se tranche avec un chiffre : le coût comparé des deux fautes.CAP isn't a pattern you add, it's a constraint you endure — but the choice it imposes is decided, and decided on a measurable cost. The question is never 'do we prefer, in the abstract, consistency or availability?', but 'here, on this precise piece of data, how much does a wrong answer cost, and how much does no answer cost?' Serving a stale bank balance, accepting the last in-stock item twice: an inconsistency sometimes costs money lost or a dispute — you take CP. Showing a like count three seconds behind, a cart that syncs a moment later: the inconsistency is invisible, the unavailability would be costly — you take AP. Closing the scalability volume means admitting that even this choice, the most theoretical of the series, is settled with a number: the compared cost of the two faults.