Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Consensus, quorum et élection du leader

Après cette leçon: Je peux expliquer comment des machines s’accordent sur un leader ou sur une valeur.

Leçon de 60 min4 commandesLab Valkey : apprendre un magasin clé-valeur compatible Redis, avec expiration, listes et compteurs

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

MotCe que ça veut dire
Consensusl’accord de plusieurs machines sur une seule valeur
Quorumle nombre de machines dont l’accord suffit
Majoritéplus de la moitié des machines
Leaderla machine qui décide pour les autres
Électionun 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

Commande
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

Commande
for n in 1 2 3 4 5 6 7; do echo "$n machines : majorité $((n / 2 + 1)), pannes admises $((n - n / 2 - 1))"; done

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.

Exemple : majorité et pannes admises

MachinesMajoritéPannes admises
321
431
532
743

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

WRW plus RVerdict
336 : plus que 5Correct
224 : pas plus que 5Une lecture peut tout manquer
156 : plus que 5Refusé : 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

Code: python
# 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

Commande
v SET dist:leader noeud2 NX EX 30

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.

Demander qui est leader

Commande
v GET dist:leader

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.

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é.

À propos de ce labo et de sa source: Lab Valkey : apprendre un magasin clé-valeur compatible Redis, avec expiration, listes et compteurs

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.