0

多くのユーザーが 1 つのサーバーに接続し、ハッシュを使用してキーと値のペアを格納するインフラストラクチャを考えています。

このようなサーバーは多数存在し、それぞれが独自のユーザーのキーと値のペアを格納しています。キーが衝突しないことを前提としています。

サーバー S1 のユーザー U1 は、サーバー S2 に存在するキー K2 を持つオブジェクトを検索する可能性があります (ユーザーはまだこれを知りません)。キーを server_addr にマップするには、ある種の分散ハッシュ テーブルが必要なので、そのサーバーにオブジェクトを問い合わせることができます。

Tapesry、Chord など、このような DHT はたくさんあります。このフェアのようなシステムをどのように作成するかを考えていました。

たとえば、3 台のサーバーを備えたシステムでは、サーバー S1 に 1000 人のユーザーがいて、S2 に 2 人のユーザーがいて、S3 に 5 人のユーザーがいるとします。ユーザーがそれぞれ 10 個のオブジェクトを作成し、キー スペースを均一に分散すると仮定すると、サーバー S2 と S3 はそれぞれ約 3500 個のキーを格納します。

私は、S1 が DHT 内のキーの公平な共有に責任を持つ方法が必要です。

私が持っていたアイデアの 1 つは、監査システムのようなもので、各ピアが DHT に保存しているキーの数を他のすべての人に尋ね、そのキー スペースの一部に対しても責任があるかどうかを確認します。

ただし、これにより、各ノードの消費量を取得するために帯域幅が大量に使用されます。

他のアイデアはありますか?

4

1 に答える 1

1

いくつかの可能なアプローチがあります

何もしない

野生の DHT は、完全に均質な環境ではありません。一部のノードは他のノードよりも多くのリソースを持っています (組み込みデバイスとファット サーバー)。一部のノードは、他のノードよりも多くのアクティビティを作成します。

ノードは、その能力に応じてサービス (ルーティング、ストレージ) をレンダリングし、容量に達すると、要求を拒否する (ドロップするか、否定的な応答を返すことによって) だけです。

リクエストを発行するノードは、単にそれらを障害のように扱い、障害ポイントを回避します。

基本的に、ノードが他のノードよりも数桁多くリソースを消費するケースが一般的であり、バランスをとるのに十分かどうかを確認する必要があります。

自主的措置

より多くのトラフィックを引き起こすノードは、より多くのリソースを提供するように単純に設計されている可能性があります。たとえば、キースペース全体に散在する複数の仮想ノードを実行できるため、より多くのキーのストレージとルーティングを提供できます。

これは、アップタイムが高く、帯域幅が大きく、待ち時間が短いサーバークラスのマシンでは特に簡単です。

執行

ここがややこしいところです。分散システムでは、信頼も規制権限もありません。ノードは、要求にサービスを提供する前に、適切なサービスを提供することを証明する必要があります。

最初の明白な手段は、それが主張するサービスを実際に提供したことを他のノードが保証することです。しかし、それはそれがいくつかのサービスを提供しているという証拠を提供するだけであり、提供されたリソースと消費されたリソースの比率については何も述べていません. また、肯定的な応答を返してから破棄するだけでなく、主張するデータが実際に保存されていることを確認するメカニズムも必要です。

したがって、1 ホップのバウチャーでは不十分な場合があるため、アカウンティング、検証、信頼の網が必要になります。

ご覧のとおり、複雑さは急速に爆発します。


おそらく、全体像を見て、攻撃者やネットワークの善良な市民が持つインセンティブを判断する必要があります。

  • 過剰な量のリソースを消費することで得られるもの
  • 検証のコストはどのくらいですか (複雑さ、人的努力、防止された悪意のあるトラフィックに関連するトラフィック オーバーヘッド)
  • 外れ値は実際にどの程度の負担になるのでしょうか?

于 2015-12-19T07:13:27.803 に答える