it-swarm.com.de

Einfache grundlegende Erklärung einer Distributed Hash Table (DHT)

Könnte jemand eine Erklärung geben, wie ein DHT funktioniert?

Nichts zu schweres, nur die Grundlagen.

168
Gustavo Carreno

Ok, sie sind im Grunde eine ziemlich einfache Idee. Ein DHT bietet eine wörterbuchähnliche Oberfläche, die Knoten sind jedoch über das Netzwerk verteilt. Der Trick bei DHTs ist, dass der Knoten, der einen bestimmten Schlüssel speichert, durch Hashing dieses Schlüssels gefunden wird. In der Tat sind Ihre Hash-Table-Buckets nun unabhängige Knoten in einem Netzwerk.

Dies bietet viel Fehlertoleranz und Zuverlässigkeit sowie möglicherweise einen gewissen Leistungsvorteil, bereitet jedoch auch viel Kopfzerbrechen. Was passiert zum Beispiel, wenn ein Knoten das Netzwerk verlässt, indem er ausfällt oder auf andere Weise? Und wie verteilen Sie Schlüssel neu, wenn ein Knoten beitritt, sodass die Last ungefähr ausgeglichen ist. Denken Sie mal darüber nach, wie verteilen Sie die Schlüssel überhaupt gleichmäßig? Und wenn ein Knoten beitritt, wie vermeidet man es, alles neu aufzuwärmen? (Denken Sie daran, dass Sie dies in einer normalen Hash-Tabelle tun müssen, wenn Sie die Anzahl der Buckets erhöhen.).

Ein Beispiel für eine DHT, die einige dieser Probleme löst, ist ein logischer Ring von n Knoten, die jeweils die Verantwortung für 1/n des Schlüsselraums übernehmen. Sobald Sie dem Netzwerk einen Knoten hinzugefügt haben, findet dieser einen Platz im Ring zwischen zwei anderen Knoten und übernimmt die Verantwortung für einige der Schlüssel in seinen gleichgeordneten Knoten. Das Schöne an diesem Ansatz ist, dass keiner der anderen Knoten im Ring betroffen ist. Nur die beiden Geschwisterknoten müssen die Schlüssel neu verteilen.

Zum Beispiel hat der erste Knoten in einem Drei-Knoten-Ring die Schlüssel 0-10, der zweite 11-20 und der dritte 21-30. Wenn sich ein vierter Knoten zwischen Knoten 3 und 0 einfügt (denken Sie daran, dass er sich in einem Ring befindet), kann er die Verantwortung für etwa die Hälfte des Schlüsselraums von 3 übernehmen. Daher werden jetzt 26-30 und Knoten 3 21 behandelt -25.

Es gibt viele andere Überlagerungsstrukturen wie diese, die das inhaltsbasierte Routing verwenden, um den richtigen Knoten zum Speichern eines Schlüssels zu finden. Um einen Schlüssel in einem Ring zu finden, muss der Ring knotenweise durchsucht werden (es sei denn, Sie führen eine lokale Nachschlagetabelle, die in einem DHT mit Tausenden von Knoten problematisch ist). Dies ist das O (n) -Hop-Routing. Andere Strukturen - einschließlich erweiterter Ringe - garantieren das O (log n) -Hop-Routing und einige beanspruchen das O (1) -Hop-Routing auf Kosten von mehr Wartung.

Lesen Sie die Wikipedia-Seite, und wenn Sie wirklich ein bisschen mehr darüber wissen möchten, lesen Sie diese Kursseite in Harvard, die eine ziemlich umfassende Leseliste enthält.

224
HenryR

DHTs bieten dem Benutzer dieselbe Art von Schnittstelle wie eine normale Hash-Tabelle (suchen Sie einen Wert mit einem Schlüssel), aber die Daten werden über eine beliebige Anzahl verbundener Knoten verteilt. Wikipedia hat eine gute grundlegende Einführung, die ich im Wesentlichen aufstoßen würde, wenn ich mehr schreibe -

http://en.wikipedia.org/wiki/Distributed_hash_table

12
Peter

Ich möchte die nützliche Antwort von HenryR ergänzen, da ich gerade einen Einblick in das konsistente Hashing hatte. Eine normale/naive Hash-Suche ist eine Funktion von zwei Variablen, von denen eine die Anzahl der Buckets ist. Das Schöne an konsistentem Hashing ist, dass wir die Anzahl der Buckets "n" aus der Gleichung entfernen.

Beim naiven Hashing ist die erste Variable der Schlüssel des Objekts, das in der Tabelle gespeichert werden soll. Wir nennen den Schlüssel "x". Die zweite Variable ist die Anzahl der Buckets "n". Um zu bestimmen, in welchem ​​Bucket/in welcher Maschine das Objekt gespeichert ist, müssen Sie Folgendes berechnen: hash (x) mod (n). Wenn Sie also die Anzahl der Eimer ändern, ändern Sie auch die Adresse, unter der fast jedes Objekt gespeichert ist.

Vergleichen Sie dies mit konsistentem Hashing. Definieren wir "R" als Bereich einer Hash-Funktion. R ist nur eine Konstante. Beim konsistenten Hashing befindet sich die Adresse eines Objekts bei Hash (x)/R. Da unsere Suche nicht mehr von der Anzahl der Schaufeln abhängt, werden wir weniger neu zugeordnet, wenn wir die Anzahl der Schaufeln ändern.

http://michaelnielsen.org/blog/consistent-hashing/

7
0
Vijesh VP