Se mettre d’accord malgré les pannes
Le consensus est l’accord de plusieurs machines sur une même valeur ou sur un même chef. Cet accord tient même si certaines tombent en panne ou si des messages se perdent. Sans lui, deux machines peuvent se croire chacune chef et écrire des choses contradictoires.
Une réservation de salle doit être prise par une seule personne. Il faut donc qu’une seule machine décide, et que tout le monde sache laquelle.
À la fin de cette leçon
Remarque
Je peux expliquer comment des machines s’accordent sur un leader ou sur une valeur.
Mots clés
| Mot | Ce que ça veut dire |
|---|---|
| Consensus | l’accord de plusieurs machines sur une seule valeur |
| Quorum | le nombre de machines dont l’accord suffit |
| Majorité | plus de la moitié des machines |
| Leader | la machine qui décide pour les autres |
| Élection | un vote pour choisir le leader |
| Cerveau divisé | deux groupes de machines se croient chacun seuls maîtres |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une majorité suffit pour décider
Une majorité est plus de la moitié des machines. Avec 5 machines, la majorité est de 3. Deux majorités ont toujours au moins une machine en commun, donc deux décisions contradictoires ne peuvent pas passer toutes les deux.
Le nombre de machines qui peuvent tomber sans tout bloquer est le total moins la majorité.
Fabriquer un petit client nommé v
v() ( printf '%s\r\n' "$*" | nc -w 1 valkey 6379 )Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Calculer la majorité de 1 à 7 machines
for n in 1 2 3 4 5 6 7; do echo "$n machines : majorité $((n / 2 + 1)), pannes admises $((n - n / 2 - 1))"; doneAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Exemple : majorité et pannes admises
| Machines | Majorité | Pannes admises |
|---|---|---|
| 3 | 2 | 1 |
| 4 | 3 | 1 |
| 5 | 3 | 2 |
| 7 | 4 | 3 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un quorum d’écriture et de lecture se recoupe
Une écriture est réussie quand une majorité de copies la confirme : c’est le quorum d’écriture, noté W. Une lecture interroge R copies et garde la valeur la plus récente.
Si W plus R dépasse le nombre N de copies, toute lecture touche au moins une copie à jour. Il faut aussi que W soit une majorité, sinon deux écritures passent sans se voir.
Exemple : cinq copies, trois réglages
| W | R | W plus R | Verdict |
|---|---|---|---|
| 3 | 3 | 6 : plus que 5 | Correct |
| 2 | 2 | 4 : pas plus que 5 | Une lecture peut tout manquer |
| 1 | 5 | 6 : plus que 5 | Refusé : W n’est pas une majorité |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une élection choisit un seul leader par tour
Chaque machine vote pour un candidat, une seule fois par tour. Le candidat qui reçoit la majorité devient leader. Comme deux majorités se recoupent, il n’y a jamais deux leaders dans un même tour.
Si les voix se partagent, personne ne gagne et un nouveau tour commence.
Compter les voix d’une élection
# Cinq machines votent. Un candidat gagne avec la majorité, soit 3 voix sur 5.
votes = ["m1", "m2", "m1", "m3", "m1"]
compte = {}
for candidat in votes:
if candidat in compte:
compte[candidat] = compte[candidat] + 1
else:
compte[candidat] = 1
majorite = len(votes) // 2 + 1
for candidat in compte:
if compte[candidat] >= majorite:
print("Leader :", candidat, "avec", compte[candidat], "voix")
print("Majorité requise :", majorite)
# Changez le troisième vote en "m3" : personne n'a la majorité.
Un bail limite la durée du rôle
Un leader qui tombe doit pouvoir être remplacé. On lui donne donc un bail : le rôle ne dure que quelques secondes, et le leader le renouvelle tant qu’il va bien.
Dans Valkey, SET avec NX n’écrit que si la clé n’existe pas, et EX 30 la fait disparaître au bout de 30 secondes. Une seule machine réussit.
Réclamer le rôle de leader pour 30 secondes
v SET dist:leader noeud2 NX EX 30Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Demander qui est leader
v GET dist:leaderAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une erreur fréquente
Attention
On croit souvent que la moitié des machines suffit pour décider. Avec 4 machines, deux contre deux ne donne personne. Si un réseau coupé sépare 2 et 2, chaque groupe se croirait seul maître : c’est le cerveau divisé. Il faut plus de la moitié.