Ticketing
Dokumentation

Snapshot

Einem Knoten, der zu weit zurückgefallen ist, um über das Log aufzuholen (z. B. direkt nach einem Neustart), wird der gesamte aktuelle Zustand über die FullSnapshot-RPC gesendet. Innerhalb von snapshot_bytes steckt die folgende, mit postcard serialisierte Struktur.

FeldInhalt
last_appliedDie letzte Log-Position, die dieser Snapshot widerspiegelt
last_membershipMitgliedschafts-Info (Knotenzusammensetzung)
token_seqDer Fencing-Token-Ausstellungszähler — repliziert, sodass die
Token-Monotonie auch über einen Leaderwechsel hinweg gilt
locksEine Liste aus (key, token, remain_ms) — jede gehaltene Sperre und ihre verbleibende Lease
  • remain_ms ist die verbleibende Lease in Millisekunden zum Zeitpunkt der Snapshot-Erstellung. Der Knoten, der sie installiert, stellt die Ablaufzeit auf seiner eigenen Uhr als now + remain_ms wieder her — es wird niemals ein absoluter Zeitstempel gesendet, sodass Uhrendrift zwischen Knoten keine Auswirkung hat.
  • Millisekunden werden nur hier für Präzision verwendet (die client-seitige Einheit ist Sekunden).
  • Das Raft-Log ist In-Memory (flüchtig). Ein neu gestarteter Knoten bootet mit leerem Zustand und holt dann über die Log-Replikation eines Peers oder diesen Snapshot auf — der committete Zustand bleibt erhalten, solange eine Mehrheit am Leben bleibt.

Ablauf

Leader
Zurückgefallener Knoten
direkt nach dem Neustart — bootet mit leerem Zustand
AppendEntries
zu weit zurück, um über das Log aufzuholen
FullSnapshot — gesamter Zustand in einem Frame
installiert: stellt jede Sperre als now + remain_ms wieder her
zurück zu reinen AppendEntries-Log-Einträgen
Konsens-RPC (Raft)

Begriffe

  • Snapshot — eine vollständige Kopie des Zustands zu einem bestimmten Zeitpunkt. Er erlaubt es einem zurückgefallenen Knoten, den Snapshot zu installieren und nur den Log-Einträgen danach zu folgen, statt alles von Grund auf neu abzuspielen.
  • Mitgliedschaft (membership) — die Liste der Knoten, aus denen der Cluster besteht, und ihre Rolleninformationen.