BASE (Basically Available, Soft State, Eventually Consistent)
BASE ist das Konsistenzparadigma verteilter Systeme und bewusst als Gegenstueck zu ACID formuliert. Basically Available: Das System ist meistens verfuegbar, auch wenn Daten leicht veraltet sein koennen. Soft State: Daten sind nicht sofort auf allen Knoten konsistent, der Zustand kann sich auch ohne externen Input aendern. Eventually Consistent: Das System wird irgendwann ueber alle Knoten hinweg konsistent, sofern keine neuen Updates erfolgen. BASE priorisiert also Verfuegbarkeit und Skalierbarkeit ueber sofortige Konsistenz.
BASE weicht ACID auf: lieber immer verfuegbar 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 erhaelt eine Antwort) und Partition Tolerance (System funktioniert trotz Netzwerkausfaellen zwischen Knoten) nur zwei gleichzeitig garantieren. In der Praxis ist P bei verteilten Systemen nicht verhandelbar, daher waehlt 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 moeglich.
Eventual Consistency
Schwaechste Stufe im Konsistenzspektrum: Clients sehen neue Daten eventuell verzoegert. 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 fuer 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 Schreibvorgaenge), Session Consistency (clientzentrierte Garantien innerhalb einer Session), Causal Consistency (kausal zusammenhaengende Operationen in gleicher Reihenfolge) und schliesslich strikte Konsistenz. Je weiter rechts, desto strenger die Garantie, aber desto geringer die Verfuegbarkeit.
Links schwach und verfuegbar, rechts strikt und konsistent - je nach Anwendungsfall waehlt man die Stufe.
ACID vs. BASE Trade-off
ACID (Atomicity, Consistency, Isolation, Durability) ist das klassische Transaktionsmodell fuer relationale, meist zentrale Datenbanken. BASE ist das Pendant fuer verteilte Systeme wie NoSQL-DBs. ACID priorisiert Korrektheit ueber Verfuegbarkeit, 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 = Saeure = strikt und zentral, BASE = Base = weich und verteilt.
Read-your-writes und Session Consistency
Read-your-writes verknuepft die Schreibvorgaenge eines Clients mit dessen kausalabhaengigen Lesevorgaengen: was ich selbst geschrieben habe, sehe ich beim naechsten Lesen garantiert. Session Consistency vereint diese clientzentrierten Garantien in einer zusammenhaengenden Session der Anwendungsebene. Beide bleiben jedoch client-/sessionzentriert - andere Clients koennen die Aenderung noch verzoegert sehen.
Read-your-writes: ich sehe was ich schreibe - Session Consistency: waehrend meiner Session bleibt es konsistent.
Causal Consistency
Alle kausal zusammenhaengenden Operationen werden von allen Prozessen global in derselben Reihenfolge gesehen. Wenn Ereignis A vor B stattfand und B von A abhaengt, wird niemand B vor A beobachten. Nicht kausal verbundene Operationen koennen jedoch in unterschiedlicher Reihenfolge sichtbar sein. Staerker als Session, schwaecher 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. Waehrend dieses Fensters koennen unterschiedliche Clients unterschiedliche Werte sehen. Die Laenge des Fensters haengt von Netzwerklatenz, Replikationsstrategie und Systemlast ab. Anwendungen muessen mit diesem Fenster umgehen koennen.
Kurzzeitige Inkonsistenz ist der Preis fuer hohe Verfuegbarkeit in verteilten Systemen.