Definition: Vector Clock

Als Vector Clock (auch Lamport Vector Clock) bezeichnen wir einen Mechanismus zur Verfolgung der Kausalität und der Reihenfolge von Ereignissen in verteilten Systemen.

Jeder Knoten in einem verteilten System führt einen Vektor von logischen Zeitstempeln (auch Lamport Clock), der die letzte bekannte logische Zeit jedes anderen Knotens im System speichert. Dadurch kann man feststellen, ob Ereignisse gleichzeitig aufgetreten sind, voneinander abhängen oder in welcher Reihenfolge sie passiert sind.

Die logische Zeit eines Knotens wird dabei nicht bspw. als Unix-Zeitstempel repräsentiert, sondern als Integer, das bei jedem Update um hochgezählt wird:

Enthält der -te Node eine Transaktion von dem Knoten und gilt für die logischen Uhren (LC) , so setzen wir .

Anmerkungen

Anmerkung

Beispiel: Vector Clock

Seien die Vector-Clocks der Knoten gegeben durch

Wir sprechen nun das folgende Beispiel durch:

Erste Transaktion

Wir starten mit einer Transaktion an dem Knoten und setzen

Dieses Update wird nun an die Knoten propagiert und wir setzen nun auch

Zweite Transaktion

Nun erhält der Knoten eine Transaktion. Wir setzen daher

Das Update wird nun an und propagiert:

Dritte Transaktion

Nun erhält der Knoten eine Transaktion. Wir setzen daher

und propagieren das Update wieder

Vierte Transaktion

Der Knoten erhält eine Transaktion. Wir setzen daher

und propagieren das Update weiter

Fünfte Transaktion und read

Der Knoten erhält eine Transaktion. Wir setzen daher

Bevor wir das Update jedoch propagieren können, erhalten Knoten und Knoten jeweils eine read-Anfrage.

Das System kann nun durch einen Abgleich der Vector Clocks und erkennen, dass der Knoten einen aktuelleren Stand als der Knoten hat.

Link to original