BASE (Basically Available, Soft State, Eventually Consistent)
BASE ist das Konsistenzparadigma verteilter Systeme und bewusst als Gegenstück zu ACID formuliert. Basically Available: Das System ist meistens verfügbar, auch wenn Daten leicht veraltet sein können. Soft State: Daten sind nicht sofort auf allen Knoten konsistent, der Zustand kann sich auch ohne externen Input ändern. Eventually Consistent: Das System wird irgendwann über alle Knoten hinweg konsistent, sofern keine neuen Updates erfolgen. BASE priorisiert also Verfügbarkeit und Skalierbarkeit über sofortige Konsistenz.
BASE weicht ACID auf: lieber immer verfügbar und irgendwann konsistent als sofort konsistent aber manchmal unerreichbar.
CAP-Theorem (Brewer)
Formuliert von Eric Brewer (2000): Ein verteiltes shared-data System kann von den drei Eigenschaften Consistency (alle Clients sehen die gleiche aktuelle Version), Availability (jede Anfrage erhält eine Antwort) und Partition Tolerance (System funktioniert trotz Netzwerkausfällen zwischen Knoten) nur zwei gleichzeitig garantieren. In der Praxis ist P bei verteilten Systemen nicht verhandelbar, daher wählt man zwischen CP und AP. Man spricht auch von einem CAP-Dilemma.
You may have any two - Consistency, Availability, Partition tolerance: nur zwei davon gleichzeitig möglich.
Eventual Consistency
Schwächste Stufe im Konsistenzspektrum: Clients sehen neue Daten eventuell verzögert. Das Wort eventual bedeutet irgendwann konsistent - Replikate gleichen sich ohne weitere Updates im Laufe der Zeit an. Zwischen dem Schreibvorgang und der Angleichung aller Replikate existiert ein Zeitfenster der Inkonsistenz. Typisch für Systeme wie DNS, viele NoSQL-Datenbanken oder Web-Caches.
Eventually = irgendwann: alle Knoten werden konsistent, aber nicht sofort.
Spektrum der Konsistenzmodelle
Zwischen strikter Konsistenz (Strong Consistency) und Eventual Consistency existiert ein ganzes Spektrum von Zwischenstufen: Eventual, Monotonic Reads/Writes (zeitlich geordnete Reihenfolge), Read-your-writes (Client sieht eigene Schreibvorgänge), Session Consistency (clientzentrierte Garantien innerhalb einer Session), Causal Consistency (kausal zusammenhängende Operationen in gleicher Reihenfolge) und schliesslich strikte Konsistenz. Je weiter rechts, desto strenger die Garantie, aber desto geringer die Verfügbarkeit.
Links schwach und verfügbar, rechts strikt und konsistent - je nach Anwendungsfall wählt man die Stufe.
ACID vs. BASE Trade-off
ACID (Atomicity, Consistency, Isolation, Durability) ist das klassische Transaktionsmodell für relationale, meist zentrale Datenbanken. BASE ist das Pendant für verteilte Systeme wie NoSQL-DBs. ACID priorisiert Korrektheit über Verfügbarkeit, BASE genau andersherum. In verteilten Umgebungen mit Netzwerkpartitionen ist strikte ACID-Semantik schwer haltbar - daher lockert man Isolation und Consistency zugunsten von Skalierbarkeit und Ausfallsicherheit.
ACID = Säure = strikt und zentral, BASE = Base = weich und verteilt.
Read-your-writes und Session Consistency
Read-your-writes verknüpft die Schreibvorgänge eines Clients mit dessen kausalabhängigen Lesevorgängen: was ich selbst geschrieben habe, sehe ich beim nächsten Lesen garantiert. Session Consistency vereint diese clientzentrierten Garantien in einer zusammenhängenden Session der Anwendungsebene. Beide bleiben jedoch client-/sessionzentriert - andere Clients können die Änderung noch verzögert sehen.
Read-your-writes: ich sehe was ich schreibe - Session Consistency: während meiner Session bleibt es konsistent.
Causal Consistency
Alle kausal zusammenhängenden Operationen werden von allen Prozessen global in derselben Reihenfolge gesehen. Wenn Ereignis A vor B stattfand und B von A abhängt, wird niemand B vor A beobachten. Nicht kausal verbundene Operationen können jedoch in unterschiedlicher Reihenfolge sichtbar sein. Stärker als Session, schwächer als strikte Konsistenz.
Ursache vor Wirkung: alle sehen kausal verbundene Aktionen in der richtigen Reihenfolge.
Zeitfenster der Inkonsistenz
In BASE-Systemen bezeichnet dies die Zeit zwischen einem Schreibvorgang auf einem Knoten und der Angleichung aller Replikate. Während dieses Fensters können unterschiedliche Clients unterschiedliche Werte sehen. Die Länge des Fensters hängt von Netzwerklatenz, Replikationsstrategie und Systemlast ab. Anwendungen müssen mit diesem Fenster umgehen können.
Kurzzeitige Inkonsistenz ist der Preis für hohe Verfügbarkeit in verteilten Systemen.