Vektoruhr
A Vektoruhr ist ein Datenstruktur verwendet zur Bestimmung der teilweise Bestellung von Ereignissen in a verteiltes System und Erkennen Kausalität Verstöße. Genau wie in Lamport Timestemps, Inter-Process-Nachrichten enthalten den Status des Sendungsprozesses logische Uhr. Eine Vektoruhr eines Systems von N Prozesse ist ein Array/Vektor von N logische Uhren, eine Uhr pro Prozess; Eine lokale Kopie des Global Clock-Array "größtmögliche Werte" wird in jedem Prozess gehalten.
Bezeichnen Da die Vektoruhr von Prozess I gepflegt wird, verlaufen die Uhr -Updates wie folgt:[1]
- Anfangs sind alle Uhren Null.
- Jedes Mal, wenn ein Prozess ein internes Ereignis erfährt, erhöht es seine eigene logische Uhr im Vektor von einem. Zum Beispiel aktualisiert es bei einem Ereignis bei Process I .
- Jedes Mal, wenn ein Prozess eine Nachricht sendet, erhöht er seine eigene logische Uhr im Vektor um eins (wie in der oben genannten Kugel, jedoch nicht zweimal für dasselbe Ereignis) und dann die Meldung eine Kopie eines eigenen Vektors.
- Jedes Mal, wenn ein Prozess eine Nachricht erhält, erhöht er seine eigene logische Uhr im Vektor um eins und aktualisiert jedes Element in seinem Vektor, indem der Wert des Wertes in seiner eigenen Vektoruhr und des Werts im Vektor in der empfangenen Nachricht (für den Vektor "(für den Wert jedes Element). Wenn der Prozess PJ beispielsweise eine Nachricht m aus PI empfängt, aktualisiert es sich durch Einstellen .
Geschichte
Ohne den spezifischen Namen "Vector Clock" wurde das Konzept einer Vektoruhr zuerst erwähnt[2] in einem 1986er Artikel von 1986 Rivka Ladin und Barbara Liskov wo sie den Begriff "mehrteiler Zeitstempel" verwenden.[3] So zitieren Sie aus Seite 31 des Liskov/Ladin -Papiers:
Wir lösen dieses Problem durch die Verwendung Mehrteilige Zeitstempel, wo es einen Teil für jede Replik gibt. Wenn es also N -Repliken gibt, ist ein Zeitstempel t t
t =
wo jeder Teil eine positive Ganzzahl ist. Da es in der Regel eine kleine Anzahl von Repliken (z. B. 3 bis 7) gibt, ist es praktisch, wenn ein solcher Zeitstempel verwendet wird.
Der Begriff "Vektoruhr" wurde erstmals unabhängig von Colin Fidge und verwendet Friedemann Matter 1988.[4][5]
Teilweise Bestelleigentum
Vektoruhren ermöglichen die teilweise kausale Reihenfolge von Ereignissen. Definieren Sie Folgendes:
- bezeichnet die Vektoruhr des Ereignisses , und bezeichnet die Komponente dieser Uhr für den Prozess .
-
- Auf Englisch: ist weniger als , dann und nur dann, wenn ist kleiner als oder gleich zu Für alle Prozessindizes und mindestens eine dieser Beziehungen ist streng kleiner (dh,, ).
- bezeichnet dieses Ereignis passiert vor Ereignis . Es ist definiert als: wenn , dann
Eigenschaften:
- Antisymmetrie: wenn dann ¬
- Transitivität: wenn und , dann ; oder wenn und , dann
Beziehung zu anderen Bestellungen:
- Lassen Sei die Echtzeit beim Ereignis tritt ein. Wenn , dann
- Lassen sei der Lamport Timestamp der Veranstaltung . Wenn , dann
Andere Mechanismen
- 1999 entwickelten sich Torres-Rojas und Ahamad Plausible Uhren,[6] Ein Mechanismus, der weniger Platz als Vektoruhren benötigt, in einigen Fällen jedoch Ereignisse, die kausal gleichzeitig sind, vollständig bestellen.
- Im Jahr 2005 kreierten Agargwal und Garg Kettenuhren,[7] Ein System, das Abhängigkeiten anhand der Vektoren mit einer Größe von kleiner als der Anzahl der Prozesse verfolgt und sich automatisch an Systeme mit dynamischer Anzahl von Prozessen anpasst.
- Im Jahr 2008 Almeida et al. eingeführt Intervall -Baumuhren.[8][9][10] Dieser Mechanismus verallgemeinert Vektoruhren und ermöglicht den Betrieb in dynamischen Umgebungen, wenn die Identität und die Anzahl der Prozesse in der Berechnung im Voraus nicht bekannt sind.
- Im Jahr 2019 entwickelte sich Lum Ramabaja Blüte Uhren,[11] Eine probabilistische Datenstruktur, deren Raumkomplexität nicht von der Anzahl der Knoten in einem System abhängt. Wenn zwei Uhren nicht vergleichbar sind, kann die Bloom -Uhr sie immer ableiten, d. H. Falsche Negative sind nicht möglich. Wenn zwei Uhren vergleichbar sind, kann die Bloom -Uhr das Vertrauen dieser Aussage berechnen, d. H. Sie kann die falsch positive Rate zwischen vergleichbaren Uhrenpaaren berechnen.
Siehe auch
Verweise
- ^ "Distributed Systems 3rd Edition (2017)". Verteilt-systems.net. Abgerufen 2021-03-21.
- ^ Der Hinweis auf dieses Papier wurde von entdeckt von Prof. Lindsey Kuper und beschrieben in Vortrag 23 ihrer YouTube -Videovorlesungsreihe auf verteilten Systemen
- ^ Barbara Liskov, Rivka Ladin (1986). "Hochverteilte verteilte Dienste und fehlertolerante verteilte Müllsammlung". 5. Symposium über die Prinzipien des verteilten Computers. ACM. S. 29–39. Citeseerx 10.1.1.569.3601. Abgerufen 2020-09-22.
- ^ Colin J. Fidge (Februar 1988). "Zeitstempel in Nachrichten-Passing-Systemen, die die teilweise Bestellung bewahren" (PDF). In K. Raymond (Hrsg.). Proc. der 11. australischen Informatikkonferenz (ACSC'88). S. 56–66. Abgerufen 2009-02-13.
- ^ Mattern, F. (Oktober 1988), "Virtuelle Zeit und globale Zustände verteilter Systeme", in Cosnard, M. (Hrsg.), Proc. Workshop über parallele und verteilte Algorithmen, Chateau de Bonas, Frankreich: Elsevier, S. 215–226
- ^ Francisco Torres-Rojas; Mustaque Ahamad (1999), "Plausible Uhren: Logische Uhren für konstante Größe für verteilte Systeme", Verteiltes Computer, 12 (4): 179–195, doi:10.1007/s004460050065, S2CID 2936350
- ^ Agarwal, Anurag; Garg, Vijay K. (17. Juli 2005). "Effiziente Abhängigkeitsverfolgung für relevante Ereignisse in Shared-Memory-Systemen" (PDF). Verfahren des vierundzwanzigsten jährlichen ACM-Symposiums über Prinzipien des verteilten Computers. Assoziation für Computermaschinen: 19–28. doi:10.1145/1073814.1073818. ISBN 1-58113-994-2. S2CID 11779779. Abgerufen 21. April 2021.
- ^ Almeida, Paulo; Baquero, Carlos; Fonte, Victor (2008), "Intervallbaumuhren: Eine logische Uhr für dynamische Systeme", in Baker, Theodore P.; Bui, Alain; Tixeuil, Sébastien (Hrsg.), Prinzipien verteilter Systeme (PDF), Vorlesungsnotizen in Informatik, Vol. 5401, Springer-Verlag, Vorlesungsnotizen in Informatik, S. 259–274, Bibcode:2008lncs.5401 ..... b, doi:10.1007/978-3-540-9221-6, ISBN 978-3-540-92220-9
- ^ Almeida, Paulo; Baquero, Carlos; Fonte, Victor (2008), "Intervallbaumuhren: Eine logische Uhr für dynamische Systeme", Intervallbaumuhren: Eine logische Uhr für dynamische Systeme, Vorlesungsnotizen in Informatik, Vol. 5401, p. 259, doi:10.1007/978-3-540-92221-6_18, HDL:1822/37748, ISBN 978-3-540-92220-9
- ^ Zhang, Yi (2014), "Hintergrundvorbereitungen: Intervall -Baumuhrergebnisse", Hintergrundvorbereitungen: Intervallbaumuhrergebnisse (PDF)
- ^ Lum Ramabaja (2019), Die Blüteuhr, Arxiv:1905.13064, Bibcode:2019ArXIV190513064R
Externe Links
- Warum logische Uhren einfach sind (vergleicht Kausalakten, Vektoruhren und Versionsvektoren)
- Erläuterung der Vektoruhren
- Zeitstempel-basierte Vektoruhr-Implementierung in Erlang
- Implementierung der Vektoruhr in Objective-C
- Implementierung der Vektoruhr in Erlang
- Warum Vektoruhren hart sind
- Warum Cassandra keine Vektoruhren benötigt