4 Nutzen von Replikaten
erreicht skalierbarkeit
reliablität erhöhen
wenn eine Replik abstürtzt
kann man mit der anderen weiterarbeiten
Schutz vor "corrupted" data durch Kopien
Performanz verbessern
bei Größe
Server replizieren
Arbeitslast aufteilen
oder geographischer Verteilung
Kopie der Daten nah zu den Clients setzen
hier der Fokus (Reliabilität in Kapitel 8)
Speichersystem
Menge von Prozessen
jeder hat Replikat auf lokalem Speicher
"konsistentes Speichersystem"
.= Speichersystem mit einem Konsistenzmodell
Was ist das jeweils:
1) Editieren von Texten
2) Ändern von Passwörtern
3) Lesen von E-Mails
4) Löschen von E-Mails
5) Antwort auf Newsgroup-Eintrag
1) Monotonic Writes
2) Read your Writes
3) Monotonic Reads
4) Read your Writes
5) Write follows Reads
Blickpunkte auf Konsistenz von Datenbanken und VS
in DB:
Grundlage ist ACID-Eigeschaft der Transaktionen
Atomicity = all-or-nothing
Consistency = only valid data written to database
Isolation = Transaktionen beeinflussen einander nicht
Durability = übermittelte Transaktionen gehen nicht verloren
in VS:
schwächere Konsistenz
Konsistenzmodelle und für jedes Arten der Konsistenz
Modelle liefern Garantieren für Ergebnis von Zugriffen
Datenzentriert
sequentielle Konsistenz
kausale Konsistenz
eventual consistency
Clientzentriert
Monotonic Reads
Monotonic Writes
Read your Writes
Write follow Read
Was ist Serialisierung?
… einer Menge von Operationen
= Reihenfolge der Operationen (Permutation)
jede Leseoperation auf einem Element gibt genau den Wert,
den die letzte Schreiboperation dort hineingeschrieben hat
Was ist die Ausführungsgeschichte?
Folge von Operationen die ein Prozess ausführt
Was ist Linearisierbarkeit?
geg.: Ausführungsgeschichte G = (F1, …, Fn) von n Prozessen
die ist linearisierbar, wenn
es eine Serialisierung aller Operationen aus G gibt
bei der Operation o1 als Paar (invocation, response) vor Operation o2 (invocation, response)
auftreten muss, wenn die response von o1 vor der invocation von o2 vorkommt.
respektiert globale Zeitordnung aller Ereignisse
Was bedeutet Datenzentriert?
= Serversicht
spezifiziert Einschränkungen auf Reihenfolge von Operationen, die von individuellen Servern ausgeführt werden müssen
fokussiert Synchronisation zwischen Prozessen im Speichersystem und der Reihenfolge der Operationen
= viele Prozesse greifen simultan auf geteilte Daten zu (read und write)
geht darum, was Prozesse erwarten können
= Vertrag zwischen Prozess und Data store
wenn Prozess Regeln befolgt, arbeitet Store korrekt
Was gehört zum Datenzentrierten Konsistenzmodell?
4 Dinge
Linearisierbarkeit
Sequentielle Konsistenz
Kausale Konsistenz
Eventual consistency
= bleiben Updates aus, konvergieren alle Kopien gegen identische Kopie
Was bedeutet Clientzentriert?
= Sicht eines einzelnen Clients
spezifiziert Anforderungen an Datenkonsistenz, die nur auf Interaktion einzelner Clienten und dem System basiert
garantiert, was ein Client während einer Sitzung sieht
einfacher zu implementieren
Speichersystem ist Blackbox - geben einfach die Daten mit gewünschten Eigenschaften
hier:
Data stores, die nicht simultane Updates brauchen
meist lesender Zugriff
garantiert einzelnem Client
konsistenten Zugriff auf Data store
auch wenn er verschiedene Repliken verwendet
(bei eventual Konsistenz nicht gegeben)
keine Garantie für gleichzeitigen Zugriff unterschiedlicher Clients
write-write Konflikte können entstehen
und lange dauern, bevor sie bemerkt werden
Client verbindet sich zu nähester Replik
updates werden eventuell zu anderen Kopien verbreitet
Was ist sequentielle Konsistenz?
geg.: Ausführungsgeschichte G = (F_1, ..., F_n)
F_i = Folgen von Operationen des Prozesses P.i
Sequentielle Konsistenz, wenn
es gibt eine Serialisierung aller Operationen aus G
bei der jede Folge F_i in genau ihrer Reihenfolge vorkommt
müssen nicht am Stück vorkommen
Was ist eine kausale Relation?
3 Bedinungen (eine muss erfüllt sein)
Zwei Operationen o1 und o2 einer Ausführungsgeschichte von n Prozessen erfüllen die kausale Relation o1 ⇒ o2 , dann und genau dann, wenn eine der drei folgenden
Bedingungen erfüllt ist:
Lokale Ordnung
= o1, o2 Operationen desselben Prozesses
o1 wird in Ausführungsgeschichte von P vor o2 ausgeführt
Interprozess-Ordnung
o1 ist write-Operation auf Datenelelement: W_i(x)a
o2 ist read-Operation eines anderen Prozesses auf gleichem Datenelement mit selben Ergebnis, wie was vorher geschrieben wurde: R_j(x)a
Transitivität
es gibt eine Operation o, sodass o1 => o und o => o2 gilt
Was ist kausale Konsistenz?
schwächer als sequentielle Konsistenz
enthält nur das Notwendige
aus Sicht jedes einzelnen Prozesses definiert
wichtig ist nur eigene Geschichte
und Schreiben anderer Prozesse auf gemeinsame Datenelemente
serialisiert müssen nur diese Operationen werden
geg.: Ausführungsgeschichte G = (F1, ..., Fn ) von n Prozessen
Ai sei Menge aller Operationen in Fi , i = 1, . . . , n und aller Schreiboperationen in G
= die Menge aller für P.i relevanten Operationen
Ausführungsgeschichte G = (F1, ..., Fn) heißt kausal konsistent, wenn es für jeden Prozess P.i eine Serialisierung der Menge A.i gibt, die die kausale Relation erfüllt.
Wann ist kausale Konsistenz gegeben? - die 4 Klientenzentrieren Konsistenzmodelle.
kausale Konsistenz ist gegeben, wenn vier klientenzentrierten Konsistenzmodelle erfüllt sind:
Read Your Writes
Writes Follow Reads
2 Arten von Ereignissen bei Kausaler Konsistenz
womöglich kausal verkettet
nicht kausal verkettet
concurrent
= Operationen, die nicht kausal verbunden sind
wenn Ereigniss a ein Ereignis b kausal beeinflusst,
dann muss a vor b geschehen sein
2 Bedingungen an Data Store
möglicherweise kausale Writes müssen von allen Maschinen gleich gesehen werden
concurrent Writes können in unterschiedlicher Reihenfolge von verschiedenen Maschinen gesehen werden
Was is eventual Consistency
dt.: schließliche Konsistenz
irgendwann ensteht Konsistenz
in Datenbanken kaum Updates
kaum write-write-Konflikte
dann wird ein Prozess global als Gewinner deklariert
nur read-write-Konflikte
Updates lazy verbreiten
Inkonsistenz wird toleriert
Was bedeutet Monotonic Reads?
Bedingungen:
liest Prozess den Wert eines Daten-Item x
dann gibt jeder spätere Read-Zugriff
entweder den gleichen Wert x
oder einen aktuelleren
der muss aber aus dem vorherigen folgen
liest er Version n, dann später nur noch Version >= n lesen
Implementierung
Client schickt bei Leseoperationen immer Read-Set Read-Set(C) mit
Server weiß dann, ob er Schreiboperationen schon ausgeführt hat, die C gesehen hat
Bsp. Email
Mail-Programm ruft E-Mails ab
neue Mails muss Obermenge der bisher abgerufenen Emails sein
Was bedeutet Monotonic Writes
Bedingungen
Schreibender Zugriff eines Prozesses auf Daten-Item x ist beendet
vor einem folgenden Schreibzugriff auf x durch denselben Prozess
-> Schreibende Operationen werden in korrekter Reihenfolge an alle Kopien der Daten weitervermittelt
anders:
Schreiben auf Kopie der Daten, nur wenn die Kopie geupdatet wurde
ist daten-zentrierte FIFO-Konsistenz
Client muss bei Schreiboperationen immer Write-Set(C) mitsenden
Server weiß dann, ob er bisherige Schreiboperationen von S ausgeführt hat
Beispiel:
Editieren von Texten
Was bedeutet Read Your Writes
liest ein Prozess x sieht immer alle seine vorhergehenden Schreiboperationen auf x
Server kann lesenden Zugriff erst ausführen, wenn er alle schreibenden Zugriffe des Clienten vorher ausgeführt hat
Implementierung:
Client sendet bei Leseoperationen sein Schreibset Write-Set(C) mit
Server weiß, ob er Cs Schreiboperationen schon ausgeführt hat
Bsp.:
Passwort ändern
Löschen von E-Mail
Was bedeutet Write follow Reads
Schreiben von Prozess P auf Daten Item x
nach einem Lesen von P auf x
garantiert, dass auf dem zuletzt gelesenen oder einem aktuelleren Wert von x geschrieben wird
jedes Schreiben von P auf einem x, das wenigstens so aktuell wie das letzte Lesen von x ist
Client schickt bei Schreiboperationen sein Read-Set(C) mit
Server weiß, ob er Schreiboperationen ausgeführt hat, die C gelesen hat
Bsp.
Antwort auf Newsgruppeneintrag
Wann kann sequentielle Konsistenz nicht erreicht werden?
Wenn VS immer verfügbar sein soll
Wann ist kausale Konsistenz sicher geben?
Wenn alle vier klientenzentrierten Konsistenzmodelle erfüllt sind
(MR, MW, RYW, WFR)
2 Suchprobleme bei Platzierung von Replikaten
Platzierung von Servern
Platzierung von Inhalt
4 Arten von Replikaten
Bild 7_21_Replika_Arten
Permanent
kleine Anzahl
statisch organisiert
2 Arten:
a) Verteilung über Server an einem einzelnen Ort
Request geht zu einem der Server
z.B. mit Round-robin
b) mirror sites
über Internet verteilt
Clienten wählen einen mirror
Server-initiiert
Client-initiiert
Clients
Server-initierte Replikation
Kopien der Daten
um Performanz zu verbessern
vom Bestzer des Datenstores geschaffen
dynmisch geschaffen - bei z.B. vielen Anfragen aus einer Region
auch abhängig von Datei
Anfragen unter einer Schranke -> lösche Datei
sichergestellt, dass immer irgendwo eine Kopie der Datei bleibt
ebenso Replikationsschranke
Anfragenanzahl darüber?
neue Replikation erstellen
Client-initiierte Replikation
gebräuchlicherer Name: "client caches"
Client verwaltet cache
manchmal kann er Hilfe vom Server nutzen
verbessern nur Zugriffszeit
cache hit
= Daten konnten vom lokalen Cache geholt werden
geteilte Caches sind auch möglich
Was gibt es zur Inhaltsverteilung zu sagen?
pull vs. push operations
unicasting vs. multicasting
multicasting:
Netzwerk versendet Nachrichten effizient
unicasting:
N Nachrichten für N Server
eine zu jedem Server
Definition von Protokollen (consistency protocols)
consistency protocol beschreibt implementierung eines Konsistenz-Modells
3 Möglichkeiten, was verteilt wird
state vs operations
Benachrichtigungen über Update
machen invalidation protocols
braucht wenig Bandbreite
am besten bei kleiner read-to-write ratio
Daten von einer Kopie zur anderen
bei hoher read-to-write ratio
Update-Operation zu anderen Kopien
auch "active replication"
3 Arten von Protokollen
a) Push-Protokolle
b) Pull-Protokolle
c) hybrid: leases
push-based approach
auch "server-based protocols"
Repliken fragen nicht nach Update
meist zwischen permanent und server based Repliken
meist wenn starke Konsistenz verlangt wird
Server muss alle Client-Caches kennen
pull-based approach
server oder client fragt Server nach Update
auch "client-based protocols"
meist bei client caches
client fragt server, ob Daten nach letztem cache modifiziert wurden
bei niedriger read-to-update-ratio
Leases - 3 Arten
Server verspricht Client für bestimmte Zeit updates zu schicken
nach der Zeit muss Client lease verlängern
oder dynamischer Wechsel zwischen push und pull
3 Arten
age-based lease
je nachdem wann Daten zuletzt geändert wurden
lange nicht geändert - wahrscheinlich auch in Zukunft nicht so schnell
renewal-frequency-based leases
je nach Häufigkeit, die der Cache geupdatet werden muss
für Clients die often refresh benötigen einen langen lease
kurzer lease für Client, der Daten nur selten benötigt
state-based lease
je nach server overhead
wird Server zu sehr ausgelastet, verkürzt er lease
ggf. muss er dann aber auch mehr arbeiten, wenn read-to-update ratio hoch ist
2 Arten von Replikation
aktiv
Operation wird an alle Repliken weitergeleitet
jede Replik hat Prozess, der Updates ausführt
Updates als Write-Operationen verbreitet
Problem:
Operationen müssen überall in gleicher Reihenfolge ausgeführt werden
braucht total-ordered multicast mechanism
nutzt zentralen Koodinator:
heißt "sequencer"
Operation geht zu ihm
er gibt jeder eine einzigartige Sequenznummer
und schickt sie zu anderen Repliken
passiv
die Daten werden wieder verschickt?
passives Replikations-Protokoll "Primary Backup Protocol"
2 Arten
für sequentielle Konsistenz
jedes Data-Item had “primary”
= zentrale Maschine, die Schreiboperationen ausführt
propagiert Schreiboperationen zu anderen Servern
gibt Operation frei, wenn alle Server mit ok geantwortet haben
Zwei arten
Remote-write protocols
primary ist fest auf remote server
lesen geht auch lokal, schreiben nur dort
auch "primary-backup protocol"
schreiben geht an zentralen primary - der updated alle repliken -> die geben ok -> ok geht zurück an ursprünglichen Client
Problem: Update dauert zu lange
implementiert als Blockierung
b) local-write protocols
lokale Repliken werden geschrieben
variante des primary-backup protocols
primary-Kopie wandert zwischen Prozessen, die schreiben wollen
Quorum-basiertes Protokoll
3 Varianten
nutzt Wahlen - Clients fragen um Erlaub
es gibt N Replikate einer Datei auf ebensovielen Servern
Clients wollen DateienLesen oder Schreiben
Varianten:
Clients fragen immer N/2 + 1 Server
zum Schreiben - dann ist ok zu schreiben und neue Versionsnummer für updated file
zum Lesen: schauen, ob alle Server die gleiche Versionsnummer haben - dann ist es die aktuellste Version
read-quorum : N_R und write-quorum: N_W
2 Regeln:
1) N_R + N_W > N
vermeidet read-write-Konflikte
immer aktuellste Version, weil ein Server beim Schreiben dabei gewesen sein muss
2) N_W > N/2
vermeidet write-write-Konflikte
kein zwei disjunkte Teilmengen zum Schreiben
ROWA (Read-one, Write-all)
gute Leseperformanz (man braucht nur eine Kopie finden)
schlechte Schreibperformanz
kein Schreiben mehr möglich, wenn ein Server ausfälle
Kohärenzerkennungsstrategieen - 3 Arten
erkennt Inkonsistenzen
bei statischen Lösugnen:
Compiler macht Analyse vor Ausführung
bei dynamischen Lösungen:
in VS - wie im Buch
Inkonsistenzen bei Runtime erkannt
z.B. bei Server schauen, ob Daten im Cache geändert wurden
3 Arten:
1) Vor Transaktion
2) Während Transaktion
3) Nach Transaktion bei Commit
b)
Kohärenzdurchsetzungs-Strategieen
-> 2 Möglichkeiten, wann man Daten cachen darf
entscheidet, wie Caches konsistent gehalten werden
einfachste Lösung: geteilte Daten darf man nicht cachen
wenn man Daten cachen darf - 2 Möglichkeiten
1) Daten werden modifiziert? -> Server schickt Invalidation zu allen Caches
2) Update verbreiten
Was sind write through-caches?
Clienten können ihren Cache direkt modifizieren
Updates werden zum Server geschickt
meist in verteilten Datei-Systemen
Was sind write-back-caches?
wie write through
nur mehrere Schreib-Zugriffe erlaubt
5 weitere Forderungen an gemeinsamen Zugriff auf Daten (neben Konsistenz)
ergeben sich aus dem Prozess der Zusammenarbeit
Isolation
Benutzer arbeiten wie alleinige Besitzer an gemeinsamen Daten
Integration
Änderungen müssen für Gruppe integriert werden können
Aktualität
leicht alte Daten zu aktualisieren
und akutelle Daten zu erhalten
Nachvollziehbarkeit
alle früheren Zustände sind verfügbar und vergleichbar
Veränderungen mit Namen und Datum gespeichert
Gruppenwahrnehmung
Benutzer über Aktivitäten anderer informieren
Was ist ein Repository?
= gemeinsamer Datenspeicher
alte Versionen werden nicht gelöscht
Veränderungen resultieren in neuer Version eines Repositories
Was ist eine Versionsliste?
jede Version hat Vorgänger
aktuellste Version ist am Ende
Aufspaltung ist möglich:
Branch
= Version hat mehrere Nachfolger
mehrere Versionen verbinden:
merge
3 Phasen für Arbeit im System mit geteilten Daten
Checkout/ Update
Benutzer wählt zu bearbeitetende Datei
meist komplettes (Teil-)Projekt
Checkout
kopiert neues Projekt in lokalen Arbeitsbereich
Update
lokale Kopie auf neuesten Stand bringen
Bearbeiten = Daten lokal verändern
nur Benutzer kann darauf zugreifen (Isolation)
Commit
(Integration)
veränderte Daten ins Repository übertragen
neue Versionen der Dateien mit Zeitstempel und Zusatzinformationen speichern
Versionen werden mit Vorgängern verknüpft (Nachvollziehbarkeit)
Befehle und Operationen von CVS
CVS = "Concurrent Version System"
checkout [projektname]
holt aktuelle Version des gesamten Projekts in lokalen Arbeitsbereich
add [filename]
Datei zum Repository hinzufügen
erzeugt nur Dateieintrag
commit [filename] [version comment]
erstellt neue Version einer Datei auf CSV-Server
status [filename]
findet Abweichungen lokaler Version von Repository-Version
Ergenisse:
a) Up-to-Date
b) Locally Modified
c) Locally Added
lokale Version wurde hinzugefügt
d) Needs Update
Datei wurde von anderem Benutzer auf Server verändert
diff [filename]
listet genaue Unterschiede zwischen zwei Versionen auf
z.B. zwischen aktueller und lokaler Kopie
update [filename]
aktuellste Version einer Datei lokal laden
log [filename]
listet für alle bisherigen Versionen der Datei:
Versionsnummer
Änderungsdaten
Speicherungskommentare
branch [filename]
erzeugt Abzweigung aus Versionliste
Liste wird zu einem Versionsbaum
bei vielen Verzweigungen lieber GIT verwenden
Sicherheitsvorkehrung bei CVS
man kann nur neue Version einchecken, die auf der gerade aktuellen beruht
prüft lokale Versionnummer mit der im Repository
wenn unterschiedlich, muss man merge
ist Nebeneffekt vom update-Befehl
kein merge bei commit möglich!
Merge-Konflikt
wenn man bei lokalem Merge Fehler erhält
geht nur bei Textdateien
bei Binärdateien kann man nur feststellen, ob sie gleich sind oder nicht
Wie überprüft ein Versionsverwaltungssystem?
Es überprüft zeilenorientiert
wenn eine Zeile geändert wurde wird die nächste gleiche gesucht
alles andere dazwischen ist anders
Wie vergleicht der Dreiwegeverlgeich
zwischen:
lokaler Version
aktueller Version
gemeinsamer Vorgängerversion
Last changeda year ago