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