Akkord (Gleicher-zu-Gleicher)

In der Computerwissenschaft ist Akkord ein Protokoll und Algorithmus für eine Gleicher-zu-Gleicher-verteilte Hash-Tabelle. Eine verteilte Hash-Tabelle versorgt Schlüsselwert-Paare durch das Zuweisen von Schlüsseln zu verschiedenen Computern (bekannt als "Knoten"); ein Knoten wird die Werte für alle Schlüssel versorgen, für die es verantwortlich ist. Akkord gibt an, wie Schlüssel Knoten zugeteilt werden, und wie ein Knoten den Wert für einen gegebenen Schlüssel durch das erste Auffinden des für diesen Schlüssel verantwortlichen Knotens entdecken kann.

Akkord ist eines der vier ursprünglichen verteilten Hash-Tabelle-Protokolle, zusammen mit der DOSE, der Tapisserie und dem Gebäck. Es wurde 2001 von Ion Stoica, Robert Morris, David Karger, Frans Kaashoek und Hari Balakrishnan eingeführt, und wurde an MIT entwickelt.

Übersicht

Mit dem Akkord lookup Protokoll werden Knotenschlüssel in einem Kreis eingeordnet, der an den meisten Knoten hat. Der Kreis kann Personalausweise/Schlüssel im Intervall von 0 dazu haben.

Personalausweise und Schlüssel werden - Bit-Bezeichner mit konsequentem hashing zugeteilt. Der SHA-1 Algorithmus ist die Basis hashing Funktion für konsequenten hashing. Konsequenter hashing ist zur Robustheit und Leistung des Akkords integriert, weil sowohl Schlüssel als auch Personalausweise (IP Adressen) gleichförmig verteilt werden und in demselben Bezeichner-Raum. Konsequenter hashing ist auch notwendig, um sich Knoten dem Netz ohne Störung anschließen und es zu lassen.

Jeder Knoten hat einen Nachfolger und einen Vorgänger. Der Nachfolger eines Knotens (oder Schlüssel) ist der folgende Knoten (Schlüssel) im Bezeichner-Kreis in im Uhrzeigersinn Richtung. Der Vorgänger ist gegen den Uhrzeigersinn. Wenn es einen Knoten für jeden möglichen Personalausweis gibt, ist der Nachfolger des Knotens 2 Knoten 3, und der Vorgänger des Knotens 1 ist Knoten 0; jedoch normalerweise gibt es Löcher in der Folge. Zum Beispiel kann der Nachfolger des Knotens 153 Knoten 167 sein (und Knoten von 154 bis 166 werden nicht bestehen); in diesem Fall wird der Vorgänger des Knotens 167 Knoten 153 sein.

Da der Nachfolger (oder Vorgänger) Knoten vom Netz verschwinden kann (wegen des Misserfolgs oder der Abfahrt), registriert jeder Knoten ein ganzes Segment des Kreises daneben, d. h. der Knoten, die ihm und der Knoten im Anschluss daran vorangehen. Diese Liste läuft auf eine hohe Wahrscheinlichkeit hinaus, dass ein Knoten im Stande ist, seinen Nachfolger oder Vorgänger richtig ausfindig zu machen, selbst wenn das fragliche Netz unter einer hohen Misserfolg-Rate leidet.

Akkord-Protokoll

Das Akkord-Protokoll ist eine Lösung, für die Gleichen eines P2P Netzes zu verbinden. Akkord stellt durchweg einen Schlüssel auf einen Knoten kartografisch dar. Sowohl Schlüssel als auch Knoten werden - Bit-Bezeichner zugeteilt. Für Knoten ist dieser Bezeichner ein Kuddelmuddel der IP-Adresse des Knotens. Für Schlüssel ist dieser Bezeichner ein Kuddelmuddel eines Schlüsselwortes wie ein Dateiname. Es ist ziemlich üblich, die Wörter "Knoten" und "Schlüssel" zu verwenden, sich auf diese Bezeichner, aber nicht wirkliche Knoten oder Schlüssel zu beziehen. Es gibt viele andere Algorithmen im Gebrauch durch P2P, aber das ist eine einfache und einheitliche Methode.

Ein logischer Ring mit Positionen, die dazu numeriert sind, wird unter Knoten gebildet.

Schlüssel k wird dem Knotennachfolger (k) zugeteilt, der der Knoten ist, dessen Bezeichner dem gleich ist oder dem Bezeichner von k folgt.

Wenn es N Knoten und K Schlüssel gibt, dann ist jeder Knoten für grob Schlüssel verantwortlich.

Wenn sich ein neuer Knoten anschließt oder das Netz, die Verantwortung für Schlüsseländerungshände verlässt.

Wenn jeder Knoten nur die Position seines Nachfolgers weiß, konnte eine geradlinige Suche über das Netz einen besonderen Schlüssel ausfindig machen. Das ist eine naive Methode, für das Netz zu suchen, seitdem jede gegebene Nachricht durch den grössten Teil des Netzes konnte potenziell weitergegeben werden müssen. Akkord führt eine schnellere Suchmethode durch.

Akkord verlangt, dass jeder Knoten einen "Finger-Tisch" behält, bis zu Einträgen enthaltend. Der Zugang des Knotens wird die Adresse des Nachfolgers enthalten.

Mit solch einem Finger-Tisch ist die Zahl von Knoten, mit denen in Verbindung gesetzt werden muss, um einen Nachfolger in einem N-Knotennetz zu finden. (Sieh Beweis unten.)

Potenzieller Gebrauch

  • Das kooperative Widerspiegeln: Ein Lastausgleichen-Mechanismus durch eine lokale Netzbewirtungsinformation, die für Computer außerhalb des lokalen Netzes verfügbar ist. Dieses Schema konnte Entwicklern erlauben, die Last zwischen vielen Computern statt eines Hauptservers zu erwägen, um Verfügbarkeit ihres Produktes zu sichern.
  • Zeitgeteilte Lagerung: In einem Netz, einmal schließt sich ein Computer dem Netz an, seine verfügbaren Daten werden überall im Netz für die Wiederauffindung verteilt, wenn dieser Computer vom Netz trennt. Sowie die Daten anderer Computer werden an den fraglichen Computer für die Off-Linewiederauffindung gesandt, wenn sie mit dem Netz nicht mehr verbunden werden. Hauptsächlich für Knoten ohne die Fähigkeit, ganztags zum Netz in Verbindung zu stehen.
  • Verteilte Indizes: Wiederauffindung von Dateien über das Netz innerhalb einer auffindbaren Datenbank. z.B. P2P Datei überträgt Kunden.
  • In großem Umfang kombinatorische Suchen: Schlüssel, die Kandidat-Lösungen eines Problems und jedes Schlüssels sind, der zum Knoten oder Computer kartografisch darstellt, der dafür verantwortlich ist, sie als eine Lösung zu bewerten, oder nicht. z.B Code, der Bricht

Probeskizzen

Mit der hohen Wahrscheinlichkeit setzt sich Akkord mit Knoten in Verbindung, um einen Nachfolger in - Knotennetz zu finden.

Nehmen Sie Knotenwünsche an, den Nachfolger des Schlüssels zu finden. Lassen Sie, der Vorgänger dessen zu sein. Wir möchten einen oberen gebunden für die Zahl von Schritten finden, die sie für eine Nachricht macht, die von dazu aufzuwühlen ist. Knoten wird seinen Finger-Tisch und Weg die Bitte untersuchen, deren nächstem Vorgänger es hat. Nennen Sie diesen Knoten. Wenn der Zugang 's Finger-Tisch ist, dann sind beide und in Entfernungen zwischen und von entlang dem Bezeichner-Kreis. Folglich ist die Entfernung zwischen und entlang diesem Kreis höchstens. So ist die Entfernung von dazu weniger als die Entfernung von zu: Die neue Entfernung dazu ist im grössten Teil der Hälfte der anfänglichen Entfernung.

Dieser Prozess, die restliche Entfernung zu halbieren, wiederholt sich so, nachdem Schritte, die Entfernung, die dazu bleibt, höchstens ist; insbesondere nach Schritten ist die restliche Entfernung höchstens. Weil Knoten gleichförmig aufs Geratewohl entlang dem Bezeichner-Kreis verteilt werden, ist die erwartete Zahl von Knoten, die innerhalb eines Zwischenraums dieser Länge fallen, 1, und mit der hohen Wahrscheinlichkeit, es gibt weniger als solche Knoten. Weil die Nachricht immer um mindestens einen Knoten vorwärts geht, nimmt sie an den meisten Schritten für eine Nachricht, um diese restliche Entfernung zu überqueren. Die erwartete Gesamtroutenplanungszeit ist so.

Wenn Akkord r = O nachgeht (loggen Sie N) Vorgänger/Nachfolger, dann mit der hohen Wahrscheinlichkeit, wenn jeder Knoten Wahrscheinlichkeit von 1/4 des Mangels hat, wird find_successor (sieh unten) und find_predecessor (sieh unten) die richtigen Knoten zurückgeben

Einfach ist die Wahrscheinlichkeit, dass alle r Knoten scheitern, der eine niedrige Wahrscheinlichkeit ist; so mit der hohen Wahrscheinlichkeit sind mindestens ein von ihnen lebendig, und der Knoten wird den richtigen Zeigestock haben.

Pseudocode

Definitionen für den Pseudocode:

  • Finger [k]: Der erste Knoten, der nachfolgt
  • Nachfolger: Der folgende Knoten vom fraglichen Knoten auf dem Bezeichner ruft an
  • Vorgänger: Der vorherige Knoten vom fraglichen Knoten auf dem Bezeichner ruft an

Der Pseudocode, um den Nachfolger-Knoten eines id zu finden, wird unten gegeben:

//bitten Sie Knoten n, den Nachfolger von id zu finden

n.find_successor (id)

wenn (id (n, Nachfolger])//Ja, der eine eckige Schlussklammer sein sollte, um die öffnende Parenthese zu vergleichen. Es ist ein halber geschlossener Zwischenraum.

geben Sie Nachfolger zurück;

sonst

//schicken Sie die Abfrage nach dem Kreis nach

n0 = closest_preceding_node (id);

geben Sie n0.find_successor (id) zurück;

//suchen Sie den lokalen Tisch für den höchsten Vorgänger von id

n.closest_preceding_node (id)

weil ich = M downto 1

wenn (Finger [ich] (n, id))

geben Sie Finger [ich] zurück;

geben Sie n zurück;

Der Pseudocode, um den Akkord-Ring/Kreis nach dem Knoten zu stabilisieren, schließt sich an, und Abfahrten ist wie folgt:

//schaffen Sie einen neuen Akkord-Ring.

n.create

Vorgänger = Null;

Nachfolger = n;

//schließen Sie sich einem Akkord-Ring an, der Knoten n enthält'.

n.join (n')

Vorgänger = Null;

Nachfolger = n '.find_successor (n);

//genannt regelmäßig. n fragt den Nachfolger

//über seinen Vorgänger, prüft wenn der unmittelbare von n nach

//Nachfolger entspricht, und erzählt dem Nachfolger über n

n.stabilize

x = successor.predecessor;

wenn (x (n, Nachfolger))

Nachfolger = x;

successor.notify (n);

//n' denkt, dass es unser Vorgänger sein könnte.

n.notify (n')

wenn (ist Vorgänger Null oder n' (Vorgänger, n))

,

Vorgänger = n';

//genannt regelmäßig. erfrischt Finger-Tabelleneinträge.

//folgende Läden der Index des Fingers, um zu befestigen

n.fix_fingers

als nächstes = als nächstes + 1;

wenn (als nächstes> m)

als nächstes = 1;

Finger [als nächstes] = find_successor (n +);

//genannt regelmäßig. Kontrollen, ob Vorgänger gescheitert hat.

n.check_predecessor

wenn (hat Vorgänger gescheitert)

,

Vorgänger = Null;

Siehe auch

  • KANN
  • Kademlia
  • Gebäck (DHT)
  • Tapisserie (DHT)
  • Koorde
  • OverSim - das Bedeckungssimulierungsfachwerk
  • SimGrid - ein Werkzeug für die Simulation von verteilten Anwendungen -

Links


Václav / Ken Fisher
Impressum & Datenschutz