Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Starke und letztendliche Konsistenz

Nach dieser Lektion: Ich kann sagen, was eine lesende Person nach einem Schreibvorgang sieht und welchen Kompromiss das bedeutet.

Lektion, 55 Min.4 BefehleValkey-Lab: einen Redis-kompatiblen Key-Value-Speicher mit Schlüsseln, Ablaufzeit, Listen und Zählern kennenlernen

Was eine Leserin nach dem Schreiben sieht

Konsistenz beschreibt, was eine lesende Person sieht, nachdem jemand Daten geändert hat. Bei starker Konsistenz sieht sie immer den neuesten Stand, bei letztendlicher Konsistenz erst nach einer kurzen Zeit.

Eva überweist 20 Euro und lädt ihre Kontoseite neu. Zeigt eine Kopie noch den alten Stand, glaubt Eva, das Geld sei nicht abgebucht worden.

Am Ende dieser Lektion

Notiz

Ich kann sagen, was eine lesende Person nach einem Schreibvorgang sieht und welchen Kompromiss das bedeutet.

Schlüsselwörter

BegriffWas er bedeutet
Konsistenzob alle Lesenden denselben Stand sehen
Starke Konsistenzjeder Lesevorgang liefert den neuesten Stand
Letztendliche Konsistenzalle Kopien gleichen sich mit der Zeit an (Eventual Consistency)
Veralteter Standein Wert, der schon überholt ist (Stale Read)
Kompromissman gewinnt etwas und gibt etwas anderes auf
Netzwerkpartitiondas Netz zerfällt in Teile, die sich nicht erreichen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Starke Konsistenz liefert immer den neuesten Stand

Bei starker Konsistenz liefert jeder Lesevorgang das Ergebnis des letzten Schreibvorgangs. Das System verhält sich, als gäbe es nur eine Kopie.

Der Preis: Ein Schreibvorgang gilt erst als fertig, wenn die Kopien ihn haben. Das dauert länger, und bei einem Netzproblem muss das System warten.

Einen kleinen Client namens v bauen

Befehl
v() ( printf '%s\r\n' "$*" | nc -w 1 valkey 6379 )

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Kontostand von Eva speichern

Befehl
v SET kontostand:eva 100

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Stand nach der Überweisung speichern

Befehl
v SET kontostand:eva 80

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ihn sofort wieder lesen

Befehl
v GET kontostand:eva

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Letztendliche Konsistenz erlaubt kurz alte Werte

Bei letztendlicher Konsistenz antwortet jede Kopie sofort. Das Replikat kann kurz einen veralteten Stand liefern. Hören die Schreibvorgänge auf, gleichen sich alle Kopien an.

Der Gewinn: Das System bleibt schnell und antwortet auch dann, wenn ein Teil des Netzes fehlt.

Beispiel: Primärknoten und Replikat im Zeitverlauf

ZeitEreignisPrimärknotenReplikat
9Ausgangsstand100100
10Eva schreibt 8080100
11Lesevorgang beim Replikat80100 (veraltet)
13Replikat hat nachgespielt8080

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Wann das Replikat noch veraltet ist

Code: python
# Ein Schreibvorgang kommt um Zeitpunkt 10 an. Das Replikat bekommt ihn 3 Einheiten später.
schreibzeit = 10
verzoegerung = 3
for lesezeit in [10, 12, 13]:
    if lesezeit >= schreibzeit + verzoegerung:
        print("Zeit", lesezeit, "Replikat liefert 80, den neuen Stand")
    else:
        print("Zeit", lesezeit, "Replikat liefert 100, einen veralteten Stand")
# Setzen Sie verzoegerung auf 0 und starten Sie erneut.

Ein häufiger Fehler

Warnung

Viele denken, letztendlich heiße „vielleicht nie“. Das stimmt nicht: Hören die Schreibvorgänge auf, erreichen alle Kopien denselben Stand. Offen bleibt nur, wie lange das dauert und was Lesende in der Zwischenzeit sehen.

Bei einer Netztrennung muss man wählen

Zerfällt das Netz in zwei Teile (Netzwerkpartition), können die Teile sich nicht abgleichen. Dann hat man zwei Möglichkeiten.

Entweder lehnt ein Teil Anfragen ab, damit nichts Falsches gelesen wird: starke Konsistenz. Oder beide antworten weiter, mit der Gefahr alter Werte: Verfügbarkeit. Beides zugleich geht nicht. Das ist der Kern des CAP-Theorems.

Über dieses Lab und seinen Quellcode: Valkey-Lab: einen Redis-kompatiblen Key-Value-Speicher mit Schlüsseln, Ablaufzeit, Listen und Zählern kennenlernen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.