web-dev-qa-db-ja.com

分散ハッシュテーブル(DHT)の簡単な基本的な説明

DHTの仕組みについて説明できる人はいますか?

重すぎず、基本だけです。

168
Gustavo Carreno

わかりました、それらは基本的には非常にシンプルなアイデアです。 DHTは辞書のようなインターフェースを提供しますが、ノードはネットワーク全体に分散されます。 DHTの秘Theは、特定のキーを保存するノードがそのキーをハッシュすることで見つかることです。そのため、実際にはハッシュテーブルバケットはネットワーク内の独立したノードになります。

これにより、多くのフォールトトレランスと信頼性が得られ、パフォーマンスが向上する可能性がありますが、多くの頭痛の種にもなります。たとえば、障害が発生したなどの理由で、ノードがネットワークを離れるとどうなりますか?また、ノードが参加したときにキーがどのように再配布されるので、負荷がほぼ均衡します。考えてみると、どうやってキーを均等に配布しますか?また、ノードが参加するとき、すべてを再ハッシュすることをどのように回避しますか? (バケットの数を増やす場合は、通常のハッシュテーブルでこれを行う必要があることに注意してください)。

これらの問題のいくつかに取り組むDHTの例の1つは、n個のノードの論理的なリングです。各ノードは、キースペースの1/nを担当します。ネットワークにノードを追加すると、リング上の他の2つのノードの間に位置する場所を見つけ、その兄弟ノードのキーの一部を担当します。このアプローチの利点は、リング内の他のノードが影響を受けないことです。 2つの兄弟ノードだけがキーを再配布する必要があります。

たとえば、3ノードリングでは、最初のノードのキーが0〜10、2番目のノードが11〜20、3番目のノードが21〜30です。 4番目のノードが来て、ノード3と0の間に自分自身を挿入する場合(リング内にあることを思い出してください)、たとえば3のキースペースの半分に対して責任を負うことができるため、26-30を処理し、ノード3は21を処理します-25。

このようなコンテンツベースのルーティングを使用してキーを格納する適切なノードを見つけるオーバーレイ構造は他にも多数あります。リング内のキーを見つけるには、O(n)ホップルーティングであるローカルルックアップテーブルを保持している場合を除き、数千のノードのDHTでリングを1つずつ検索する必要があります。他の構造-拡張リングを含む-はO(log n)ホップルーティングを保証し、O(1)ホップルーティングを維持するためにいくつかの主張があります。

ウィキペディアのページを読んで、少し詳しく知りたい場合は、ハーバード大学の非常に包括的な読書リストがある coursepage をチェックしてください。

224
HenryR

DHTは通常のハッシュテーブルと同じタイプのインターフェースをユーザーに提供します(キーで値を検索します)が、データは接続された任意の数のノードに分散されます。ウィキペディアには、基本的な紹介があり、もっと書くと基本的に逆流するでしょう-

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

12
Peter

一貫性のあるハッシングについての洞察が得られたばかりなので、HenryRの有用な答えに追加したいと思います。通常/単純なハッシュルックアップは2つの変数の関数であり、そのうちの1つはバケットの数です。一貫性のあるハッシュの利点は、式からバケットの数「n」を排除することです。

単純なハッシュでは、最初の変数はテーブルに保存されるオブジェクトのキーです。キーを「x」と呼びます。 2番目の変数は、バケットの数「n」です。そのため、オブジェクトがどのバケット/マシンに保存されているかを判断するには、hash(x)mod(n)を計算する必要があります。したがって、バケットの数を変更すると、ほとんどすべてのオブジェクトが保存されるアドレスも変更されます。

これを一貫したハッシュと比較してください。ハッシュ関数の範囲として「R」を定義しましょう。 Rは単なる定数です。一貫したハッシュでは、オブジェクトのアドレスはhash(x)/ Rにあります。ルックアップはもはやバケットの数の関数ではないため、バケットの数を変更したときに再マッピングが少なくなります。

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

7

チェックアウト このウィキペディアの記事 またはこれ PowerPointスライド

0
Vijesh VP