Reaktive Programmierung Vorlesung 14 vom 26.06.19
Eventual Consistency
Christoph Lüth, Martin Ring Universität Bremen Sommersemester 2019
17:06:21 2019-07-10 1 [31]
Fahrplan
IEinführung
IMonaden und Monadentransformer INebenläufigkeit: Futures and Promises IAktoren I: Grundlagen
IAktoren II: Implementation IMeta-Programmierung IBidirektionale Programmierung IReaktive Ströme I
IReaktive Ströme II
IFunktional-Reaktive Programmierung ISoftware Transactional Memory IEventual Consistency IRobustheit und Entwurfsmuster ITheorie der Nebenläufigkeit, Abschluss
RP SS 2019 2 [31]
Heute
IKonsistenzeigenschaften IEventual Consistency
ICRDTs
IOperational Transformation
IDas Geheimnis von Google Docs und co.
RP SS 2019 3 [31]
Was ist eigentlich Konsistenz?
IKonsistenz =Widerspruchsfreiheit IIn der Logik:
IEine Formelmenge Γ ist konsistent wenn:∃A.¬(Γ`A) IIn einem verteilten System:
IRedundante (verteilte) Daten IGlobaleWiderspruchsfreiheit?
RP SS 2019 4 [31]
Strikte Konsistenz
Strikte Konsistenz
IDaten sind zu jedem Zeitpunk global konsistent.
IEine Leseoperation in einem beliebigen Knoten gibt den Wert der letzten globalen Schreiboperation zurück.
IIn echten verteilten Systemennicht implementierbar.
RP SS 2019 5 [31]
Sequentielle Konsistenz
Sequentielle Konsistenz
IZustand nach verteilter Programmausführung = Zustand nach einer äquivalenten sequentiellen Ausführung in einem Prozess.
IJeder Prozess sieht die selbe Folge von Operationen.
RP SS 2019 6 [31]
Eventual Consistency
Eventual Consistency
Wennlängere Zeitkeine Änderungen stattfinden konvergieren die Daten an jedem Knoten zu einem gemeinsamen Wert.
IBeispiel: DNS
RP SS 2019 7 [31]
Strong Eventual Consistency
IEventual Consistency ist eineinformelleAnforderung.
IAbfragen können beliebige Werte zurückgeben bevor die Knoten konvergieren.
IKeine Sicherheit!
IStrong Eventual Consistencygarantiert:
Iwenn zwei Knoten diegleiche (ungeordnete) Mengevon Operationen empfangen haben, befinden sie sich imgleichen Zustand.
IBeispiel: Versionskontrollsystemgit
IWenn jeder Nutzer seine lokalen Änderungen eingecheckt hat, dann haben alle Nutzer die gleiche Sicht auf denhead.
RP SS 2019 8 [31]
Monotonie
IStrong Eventual Consistency kann einfach erreicht werden:
INach jedem empfangenen Update alle Daten zurücksetzen.
IFür sinnvolle Anwendungen brauchen wir eine weitere Garantie:
Monotonie
Ein verteiltes System ist monoton, wenn der Effekt jeder Operation erhalten bleibt (keine Rollbacks).
RP SS 2019 9 [31]
Beispiel: Texteditor
ISzenario: Webinterface mit Texteditor
IMeherere Nutzer können den Text verändern und sollenimmer die neueste Versionsehen.
ISiehe Google Docs, Etherpad und co.
RP SS 2019 10 [31]
Naive Methoden
IOwnership
IVor Änderungen: Lock-Anfrage an Server
INur ein Nutzer kann gleichzeitig das Dokument ändern INachteile: Verzögerungen, Änderungen nur mit Netzverbindung IThree-Way-Merge
IServer führt nebenläufige Änderungen auf Grundlage einesgemeinsamen Ursprungszusammen.
IRequirement:the chickens must stop moving so we can count them
RP SS 2019 11 [31]
Conflict-Free Replicated Data Types
IKonfliktfreie replizierte Datentypen IGarantieren
IStrong Eventual Consistency IMonotonie
IKonfliktfreiheit IZwei Klassen:
IZustandsbasierte CRDTs IOperationsbasierte CRDTs
RP SS 2019 12 [31]
Zustandsbasierte CRDTs
IKonvergente replizierte Datentypen (CvRDTs)
IKnoten senden ihren gesamten Zustand an andere Knoten.
INur bestimmte Operationen auf dem Datentypen erlaubt (update).
IEinekommutative,assoziative,idempotentemerge-Funktion IFunktioniert gut mit Gossiping-Protokollen
INachrichtenverlust unkritisch
RP SS 2019 13 [31]
CvRDT: Zähler
IEinfacher CvRDT
IZustand:P∈N, Datentyp:N query(P) =P
update(P,+,m) =P+m merge(P1,P2) =max(P1,P2)
IWert kann nur größer werden.
RP SS 2019 14 [31]
CvRDT: PN-Zähler
IGängiges Konzept bei CRDTs: Komposition
IAus zwei Zählern kann ein komplexerer Typzusammengesetzt werden:
IZähler P (Positive) und Zähler N (Negative) IZustand: (P,N)∈N×N, Datentyp:Z
query((P,N)) =query(P)−query(N) update((P,N),+,m) = (update(P,+,m),N) update((P,N),−,m) = (P,update(N,+,m))
merge((P1,N1),(P2,N2)) = (merge(P1,P2),merge(N1,N2))
RP SS 2019 15 [31]
CvRDT: Mengen
IEin weiterer einfacher CRDT:
IZustand:P∈ P(A), Datentyp:P(A) query(P) =P
update(P,+,a) =P∪ {a}
merge(P1,P2) =P1∪P2
IDie Menge kann nur wachsen.
RP SS 2019 16 [31]
CvRDT: Zwei-Phasen-Mengen
IDurch Komposition kann wieder ein komplexerer Typ entstehen.
IMenge P (Hinzugefügte Elemente) und Menge N (Gelöschte Elemente) IZustand: (P,N)∈ P(A)× P(A), Datentyp:P(A)
query((P,N)) =query(P)\query(N) update((P,N),+,m) = (update(P,+,m),N) update((P,N),−,m) = (P,update(N,+,m))
merge((P1,N1),(P2,N2)) = (merge(P1,P2),merge(N1,N2))
RP SS 2019 17 [31]
Operationsbasierte CRDTs
IKommutative replizierte Datentypen (CmRDTs) IKnoten senden nurOperationenan andere Knoten Iupdateunterscheidete zwischen lokalem und externem Effekt.
INetzwerkprotokoll wichtig
INachrichtenverlust führt zu Inkonsistenzen IKeinmergenötig
IKann die übertragenenDatenmengenerheblichreduzieren
RP SS 2019 18 [31]
CmRDT: Zähler
IZustand:P∈N, Typ:N Iquery(P) =P
Iupdate(+,n) Ilokal:P:=P+n Iextern:P:=P+n
RP SS 2019 19 [31]
CmRDT: Last-Writer-Wins-Register
IZustand: (x,t)∈X×timestamp
Iquery((x,t)) =x Iupdate(=,x0)
Ilokal: (x,t) := (x0,now()) Iextern:if t<t0then(x,t) := (x0,t0)
RP SS 2019 20 [31]
Vektor-Uhren
IIm LWW Register benötigen wir Timestamps IKausalität muss erhalten bleiben
ITimestamps müssen eine total Ordnung haben IDatum und Uhrzeit ungeeignet
ILösung: Vektor-Uhren
IJeder Knoten hat einen Zähler, der bei Operationen hochgesetzt wird IZusätzlich merkt sich jeder Knoten den aktuellsten Zählerwert, den er bei
den anderen Knoten beobachtet hat.
RP SS 2019 21 [31]
Operational Transformation
IDie CRDTs die wir bis jetzt kennengelernt haben sind recht einfach
IDas Texteditor Beispiel ist damit noch nicht umsetzbar IKommutative Operationen auf einer Sequenz von Buchstaben?
IEinfügen möglich (totale Ordnung durch Vektoruhren) IWie Löschen?
RP SS 2019 22 [31]
Operational Transformation
IIdee: Nicht-kommutative Operationen transformieren
•
D f -
D0 g0
-
• f0 - g -
IFürtransformmuss gelten:
transform f g=hf0,g0i=⇒g0◦f =f0◦g (1) applyOp(g◦f)D=applyOp g(applyOp f D) (2)
RP SS 2019 23 [31]
Operationen für Text
Operationen bestehen ausdrei Arten von Aktionen:
IRetain— Buchstaben beibehalten IDelete— Buchstaben löschen IInsert c— Buchstabenceinfügen
EineOperationist eine Sequenz von Aktionen
EinBeispiel:
Eingabe: R 1 P 7 Ausgabe: R P 1 7 Aktionen: Retain, Delete, Retain, Insert1, Retain.
IOperationen sindpartiell.
RP SS 2019 24 [31]
Operationen Komponieren
IKomposition: Fallunterscheidung auf derAktion IKeine einfache Konkatenation!
IBeispiel:
p = [Delete,InsertX,Retain]
q = [Retain,InsertY,Delete]
compose p q = [Delete,InsertX,InsertY,Delete]
Icomposeist partiell.
IÄquivalenzvon Operationen:
compose p q ∼= [Delete,Delete,InsertX,InsertY]
RP SS 2019 25 [31]
Operationen Transformieren
ITransformation •
• a -
• b0
-
• a0 - b -
IBeispiel:
a = [InsertX,Retain,Delete]
b = [Delete,Retain,InsertY]
transform a b = ([InsertX,Delete,Retain]
,[Retain,Delete,InsertY]
)
RP SS 2019 26 [31]
Operationen Verteilen
IWir haben die Funktiontransformdie zwei nicht-kommutativen Operationenaundbzu kommutierenden Gegenstückena0undb0 transformiert.
IWas machen wir jetzt damit?
IKontrollalgorithmus nötig
RP SS 2019 27 [31]
Der Server
IZweck:
INebenläufige Operationen sequentialisieren ITransformierte Operationen verteilen
Client A •
c20-•
c30-•
Server r0 c1
-r1 a
6
c2 -r2
a0 6
c3 -r3
a00 6
c4=a00 -r4
c5=b00 -
======
=====
r5
Client B •
b
? c003-•
b0
? c04-•
b00
?==========
RP SS 2019 28 [31]
Der Server
IZweck:
INebenläufige Operationen sequentialisieren ITransformierte Operationen verteilen
Client A •
c20 -•
c30 -•
c40 -•
Server r0 c1
-r1 a
6
c2 -r2
a0 6
c3 -r3
a00 6
c4=b0 -r4
a000 6
c5=a000 -r5
====
=======
Client B •
b
? c300-•
b0
?==========
RP SS 2019 29 [31]
Der Client
IZweck: Operationen Puffern während eine Bestätigung aussteht
• a
-• b
-• Revisionr
• c
?
a0 -• c0
?
b0 -• c00
? Revisionr+ 1
RP SS 2019 30 [31]
Zusammenfassung
IStrikte Konsistenz in verteilten Systemen nicht erreichbar IStrong Eventual Consistency
IWennlängere Zeitkeine Änderungen stattgefunden haben befinden sich schließlich alle Knoten imgleichen Zustand.
IWenn zwei Knoten diegleiche MengeUpdates beobachten befinden sie sich imgleichen Zustand.
IConflict-Free replicated Data Types:
IZustandsbasiert: CvRDTs IOperationsbasiert: CmRDTs IOperational Transformation
IStrong Eventual Consistency auch ohne kommutative Operationen
RP SS 2019 31 [31]