Ticketing
Documentation

Snapshot

Un nœud trop en retard pour rattraper via le journal (par ex. juste après un redémarrage) reçoit l'intégralité de l'état actuel via le RPC FullSnapshot. snapshot_bytes contient la structure suivante, sérialisée avec postcard.

ChampContenu
last_appliedLa dernière position de journal que ce snapshot reflète
last_membershipInformations de membership (composition des nœuds)
token_seqLe compteur d'émission des jetons de fencing — répliqué, si bien que la monotonie des jetons tient même après un changement de leader
locksUne liste de (key, token, remain_ms) — chaque verrou détenu et son lease restant
  • remain_ms est le lease restant, en millisecondes, au moment où le snapshot a été pris. Le nœud qui l'installe restaure l'heure d'expiration comme now + remain_ms sur sa propre horloge — aucun horodatage absolu n'est jamais envoyé, si bien que la dérive d'horloge entre nœuds n'a aucun effet.
  • Les millisecondes ne sont utilisées qu'ici, pour la précision (l'unité côté client est la seconde).
  • Le journal Raft est en mémoire (volatile). Un nœud redémarré démarre avec un état vide, puis rattrape son retard via la réplication du journal d'un pair ou ce snapshot — l'état validé est préservé tant qu'une majorité reste vivante.

Flux

Leader
Nœud en retard
juste après un redémarrage — démarre avec un état vide
AppendEntries
trop en retard pour rattraper via le journal
FullSnapshot — état complet en une seule trame
installation : restaure chaque verrou en now + remain_ms
retour à de simples entrées de journal AppendEntries
RPC de consensus (Raft)

Terminologie

  • Snapshot — une copie complète de l'état à un instant donné. Il permet à un nœud en retard d'installer le snapshot et de ne suivre que les entrées de journal qui suivent, au lieu de tout rejouer depuis le début.
  • Membership — la liste des nœuds qui composent le cluster et leurs informations de rôle.