Actuellement en test : le code GitHub sera ouvert une fois terminé.

Types de RPC

Le tag d'une trame détermine le type de RPC. Chaque payload est un type openraft sérialisé avec postcard.

tagNomPayload requêtePayload réponseRôle
1VoteVoteRequestVoteResponseÉlection du leader — un candidat demande le vote des autres nœuds
2AppendEntriesAppendEntriesRequestAppendEntriesResponseRéplication du journal + battement de cœur — le leader propage les commandes répliquées aux suiveurs
3FullSnapshotun tuple (Vote, SnapshotMeta, snapshot_bytes)SnapshotResponseEnvoie le snapshot complet à un nœud pris de retard
  • Vote — quand le leader meurt, un nœud dont le battement de cœur s'est arrêté devient candidat et demande des votes ; le nœud qui obtient une majorité devient le nouveau leader.
  • AppendEntries — le leader transporte les commandes de verrou à valider comme entrées de journal. Un AppendEntries sans entrée est le battement de cœur — il n'existe pas de message de battement de cœur séparé.
  • FullSnapshot — envoie l'intégralité de l'état actuel à un nœud trop en retard pour rattraper via le journal (ou qui vient de rejoindre le cluster). Envoyé en entier, en une seule trame, sans streaming.

Flux — quand le leader meurt

Nœud A
Nœud B
Nœud C
détecte la disparition du battement de cœur du leader → devient candidat
Vote · demande de vote
Vote · demande de vote
oui
majorité incluant lui-même → nouveau leader
AppendEntries (aucune entrée = battement de cœur)
AppendEntries (aucune entrée = battement de cœur)
RPC de consensus (Raft)

Dès que le premier battement de cœur du leader nouvellement élu arrive, le cluster revient à un service normal — l'écart total est habituellement de 0,5 à 1 seconde. Voir les Commandes répliquées pour le flux AppendEntries (réplication du journal) en fonctionnement normal.

Terminologie

  • Réplication du journal (log replication) — le leader transforme ses commandes décidées en un journal ordonné et fait en sorte que les suiveurs l'enregistrent à l'identique. Appliquer le même journal dans le même ordre amène chaque nœud au même état.
  • Battement de cœur (heartbeat) — un signal périodique « je suis vivant ». Quand il s'arrête, les suiveurs concluent que le leader est mort et déclenchent une élection.