問題タブ [consistent-hashing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - google/guava の Hashing#consistentHash を呼び出すために HashCode を生成する方法は?
google/guava@GitHubでは、 Hashingクラスが一貫性のある hashing@wikiを実装しています。メソッドには次のオブジェクトconsistentHash
が必要です。HashCode
Row
プロトタイプの分散キー値ストレージを実装しており、カスタムキーとキーによってキースペースを分割したいと考えていColumn
ます。
ここで、 class Row
(および class Column
) は単にString
フィールドのラッパーであり、独自のhashCode()
メソッドを持っています。私の質問は、呼び出すためにHashCode
@param r と @param c に基づいてa を生成する方法です。locateNodeIndexFor
Hashing#consistentHash
java - 同じユーザーIDに同じ色を選択する方法
String ユーザー ID が渡されるライブラリがあるため、その String ユーザー ID に基づいて、これら 3 つの色のいずれかのみを選択する必要があります。
たとえば、ユーザーID が文字列である場合は、次に同じユーザー IDが渡された場合12345
に選択できるため、同じ RED 色のみを選択する必要があります。String userid が である場合の別の例です。この場合、次に同じユーザー IDが渡された場合に選択できるため、同じ色のみを選択する必要があります。RED
12345
98765
BLUE
98765
BLUE
アイデアは同じユーザーIDのためのもので、常に同じ色を選択する必要があります。最初に 1 つの色を選択し、次に別の色を選択するのと同じユーザー ID であってはなりません。
同じユーザーIDに対して常に同じ色を選択できるように、ここでユーザーIDに使用できるハッシュ手法は何ですか?
c++ - コンシステント ハッシュ SHA1 モジュロ演算
ここの教祖が私を助けてくれることを願っています
ハッシュ アルゴリズムとして SHA1 を使用してコンシステント ハッシュを実装する C/C++ コードを作成しています。
次のようにモジュール操作を実装する必要があります。
0100 0011....0110 100 mod 0010 1001 = ?
除数 ( 0000 1111
) が 2 のべき乗である場合、被除数pow(2,n)
の最後の n ビットが結果であるため、簡単です。
SHA1 の長さは 160 ビット (または 40 hex ) です。私の質問は、長いビット文字列のモジュロ演算を別の任意のビット文字列に実装するにはどうすればよいですか?
ありがとうございました。
algorithm - 分散ハッシュ テーブルでのノード結合中のキースペース パーティショニングの最適化
ノードが DHT ネットワークに参加すると、再マッピングを最小限に抑えるために、新しいノードが一貫したハッシュの円の最大間隔を均等に分割することが最適なようです。ただし、これは 2 nノードに対してのみ最適です( n = 1 で開始すると仮定)。キーが一様にアクセスされる場合、他のすべての番号はホットスポットを作成します。
- n =2, 1 / 2 1 / 2 , 最適
- n =3, 1 / 4 1 / 4 1 / 2 , 1 / 3のノードが1 / 2のトラフィックを処理するホットスポット
- n =4, 1 / 4 1 / 4 1 / 4 1 / 4 , 最適
- n =5、1 / 8 1 / 8 1 / 4 1 / 4 1 / 4 、 3 / 5のノードが3 / 4のトラフィックを処理するホットスポット
より多くの再マッピングを発生させながらホットスポットを最小限に抑えるアプローチは、新しいノードを均等に再配布することです。
- n = 2、1 / 2 1/2 _ _
- n = 3、1 / 3 1/3 1/3 _ _ _ _
以下のような実装では、かなり少数の要素が再マップされ (実際に最小化されているかどうかは不明)、ホットスポットが排除され、基本的な一貫したハッシュ アルゴリズムが維持されます。
そこからの遷移 (数字ではなく文字) は次のとおりです。
[abcdefghij]
-> [abcde][fghij]
-> [abc][defg][hij]
->[ab][cde][fg][hij]
これに対する他の/より良い解決策はありますか (これは解決済みの問題ですか)? 私は一般的にDHTと分散アルゴリズムに比較的慣れていませんが、私が読んだDHT / p2p /分散アルゴリズムでこれに対処していることは見つかりませんでした. 私の特定のシナリオでは、ホットスポットを最小限に抑えることが重要ですが、再マッピングを最小限に抑えることはコストがかかりません。
akka.net - コンシステント ハッシュを使用する場合、どのアクターがどのキーを取得するかを決定できますか?
Akka .NET コンシステント ハッシュ ルーターを少し試してみました。ハッシュに使用するキーを指定することはできますが、アクター間でキーを割り当てる方法を決定するのはルーターのようです。
アクター A がタイプ A のメッセージを受け取り、アクター B がタイプ B のメッセージを受け取る、などのようなことをしたかったのですが、一貫したハッシュ ルーターでこれはまったく可能ですか?
java - Akka ConsistentHashingRoutingLogic が一貫して同じディスパッチャー スレッドにルーティングされない
ConsistentHashingRoutingLogic
Akka を使用して、同じキーを持つメッセージが同じアクターにルーティングされることを保証しようとしています。同じキーを持つメッセージが FIFO 順で処理されることが重要です。異なるキーを持つメッセージを異なるアクタにルーティングし、自由に並列処理できます。私は分散モードで Akka を使用していません。
メッセージは実際には RabbitMQ ブローカーから読み取られる JSON メッセージであるため、マスター アクターは AMQP メッセージを受信し、ルーティング キーをメッセージ キーとして使用します。同じキーがメッセージ自体にもあります。アクターは Spring アプリケーションの一部です。
私のマスター アクターは次のようになります。
私は最初にマスターを一度取得しています:
次に、次の方法でメッセージを送信します。
しかし、ワーカーのログを印刷するonReceive()
と、同じキーに対して異なるディスパッチャ スレッドが使用されていることがわかります。
また、マスター アクターとワーカー アクターに同じディスパッチャー スレッドが使用されることがある理由も明確ではありません。これはスレッド間の非同期メッセージ パッシングではないでしょうか。
ここでわかるように、キー 10420186 を持つワーカー処理メッセージのディスパッチャー スレッドは、9 の場合もあれば 10 の場合もありました。マスター アクターもこれら 2 つのスレッドを使用する場合がありました。
ConsistentHashingRoutingLogic
が実際に機能していて、同じスレッドが同じキーでメッセージを処理していることを確認するにはどうすればよいですか? ルーターの初期化で何か間違ったことをしていますか?