Riak Vector Clocks und Versionierung

Werbung
Riak
Vector Clocks und Versionierung
Amirabbas Esmaeili
29.11.2013
Übersicht
 Vektor Uhr
 Versionierung
 Konfliktlösung
 Read repair
 Quellen
16.12.2013
2
Vektor Uhr (1)
 Eine Vektor Uhr ist eine Softwarekomponente oder ein Protokoll zum
Zuweisen von eindeutigen Zeitstempeln an Nachrichten
 Sie wurde im Jahr 1988 von Colin J. Fidge und Friedemann Mattern
entwickelt
 Sie ermittelt die Nebenläufigkeiten von Ereignissen
16.12.2013
3
Vektor Uhr (2)
Funktionsweise

Jeder Prozess führt einen Zähler, der bei einem jeden Ereignis
erhöht wird

Die Uhr eines jeden Prozesses besteht aus einem Vektor von Zählern

Jeder gesendeten Nachricht wird der aktuelle Stand der Uhr
angehängt

Der eigene Zähler wird bei jedem neuen Ereignis erhöht

Sobald eine Nachricht empfangen wird, wird aus dem aktuellen und
dem empfangenen Vektor ein elementweises Maximum gebildet
16.12.2013
4
Vektor Uhr bei Riak (1)
 Wenn ein Wert in Riak gespeichert wird, wird er mit einer Vektor Uhr
getaggt, wodurch eine ursprüngliche Version entsteht
 Bei jedem Update wird die Vektor Uhr in der Weise erweitert, dass Riak
später zwei Versionen des Objekts vergleichen kann:
 Ob ein Objekt ein direkter Nachkomme des anderen ist
 Ob die Objekte direkte Nachkommen eines gemeinsamen
Elternteils sind
 Ob die Objekte in dem letzten Erbgut nicht verwandt sind
16.12.2013
5
Vektor Uhr bei Riak (2)
 Ein Parameter „X-Riak-ClientId“ wird auf einen beliebigen Wert gesetzt,
um das Vektor Clock-Protokoll zu führen
 Auf diese Weise wird ein Knoten im Netz identifiziert („X-RiakClientId“:Knoten-X)
 Um bei einer Veränderung eines Datensatzes das Vorgängerprotokoll
bereitzustellen wird in dem HTTP Header der Parameter „X-Riak-Vclock“
mitgesendet
[1]
16.12.2013
6
Vektor Uhr bei Riak (3)
 Riak beschneidet Vektor Uhren, um ein übermäßiges Wachstum zu
verhindern
[4]
16.12.2013
7
Übersicht
 Vektor Uhr
 Versionierung
 Konfliktlösung
 Read repair
 Quellen
16.12.2013
8
Versionierung
 Sie ist ein System, das zur Erfassung von Änderungen an Dokumenten
/Dateien verwendet wird
 Durch Versionierung kann auf ältere Versionen eines Dokuments
zugegriffen werden
 Durch Protokollierung der Änderungen können diese jederzeit
nachvollzogen werden
[2]
16.12.2013
9
Versionierung bei Riak
 Für den Fall, dass ein Knoten für ein paar Minuten ausfällt
 Die Nachbar-Maschine bearbeitet die Daten, die ihr zugewiesen wurden
 Wie bei VCM werden die Daten mit einer Version behaftet
 Durch Vektor Clocks wird einem Knoten die Veränderung eines
Datensatzes mit der Erhöhung der Versionsnummer in seinem Protokoll
angeben
 Wenn ein anderer Knoten den gleichen Datensatz verändert, dann fügt
er seine Id hinzu
16.12.2013
10
Übersicht
 Vektor Uhr
 Versionierung
 Konfliktlösung
 Read repair
 Quellen
16.12.2013
11
Konfliktlösung
 Wenn mehrere Optionen für einen einzelnen Wert bestehen, muss der
korrekte Wert bestimmt werden
 In einer Anwendung kann dies in einer automatischen Art und Weise
erfolgen, oder dadurch, dass die in Konflikt stehenden Objekte dem
Benutzer präsentiert werden
 Um den entsprechenden Wert zu aktualisieren, benötigt Riak die aktuelle
Vektor Uhr.
[2]
16.12.2013
12
Übersicht
 Vektor Uhr
 Versionierung
 Konflikte
 Read repair
 Quellen
16.12.2013
13
read repair (1)
 Es gibt zwei Möglichkeiten für fehlerhafte Knoten:
 Der Knoten antwortet mit “not found“ für das Objekt, das heißt es
gibt keine Kopie
 Der Knoten antwortet mit einer Vektor-Uhr, die ein Vorfahre der
Vektor-Uhr des erfolgreichen Lesevorgangs ist
 Riak wird den fehlerhaften Knoten zwingen, seine Objektwerte basierend
auf dem Wert des erfolgreichen Lesevorgangs zu aktualisieren
16.12.2013
14
read repair (2)
 Wenn der verwendete R-Wert großer als die Anzahl der Replikationen ist,
die das originale Objekt gespeichert hat
 Für jedes Objekt, das nicht gelesen wird, wird das Objekt anhand von
einem R-Wert, der gleich oder kleiner als die Anzahl der Replikationen
ist, gelesen
 Wenn Beispielsweise der original Knotenwert 3 wäre und dieser auf 5
erhöht wird, so wird die Leseoperationen mit R=3 oder weniger
durchgeführt
 Dies bewirkt, dass die Knoten, die kein Objekt mit "not found " als
Antwort haben, read repair aufrufen
16.12.2013
15
Übersicht
 Vektor Uhr
 Versionierung
 Konflikte
 Read repair
 Quellen
16.12.2013
16
Quellen
1.
Eric Redmond and Jim R. Wilson: Seven Databases in seven Weeks- A
Guide to Modern Databases and the NOSQL Movement, USA, 2012
2.
http://www.bitfarmarchiv.de/dokumentenmanagement/glossar/versionierung.htm
3.
Nils Petersohn: Vergleich und Evaluation zwischen modernen und
traditionellen Datenbankenkonzepten unter den Gesichtspunkten
Skalierung, Abfragemöglichkeit und Konsistenz, Hamburg, 2011
4.
http://docs.basho.com/riak/latest/theory/concepts/Vector-Clocks/
16.12.2013
17
Herunterladen