クラスタで複数のノードを使用する理由は2つあります。
- 各ノードに保存されるデータの量を制限するためのシャーディング
- 読み取りの負荷を軽減し、データを失うことなくノードを削除できるようにするための複製。
この2つは根本的に異なりますが、両方を実装できます。コンシステントハッシュを使用して、単一のノードではなく、標準のマスター/スレーブ設定でノードのセットをポイントします。
クラスタがキャッシュではなくプライマリデータストアである場合は、データのコピーを含む別の再配布戦略が必要になります。
私の実装は、クライアントにハッシュ用に64kバケットのいずれかを選択させ、そのバケットをノードにマップするテーブルを用意することに基づいています。最初は、すべてがノード#1にマップされます。
ノード#1が大きくなりすぎると、そのスレーブはマスターノード#2になり、テーブルが更新されて、ノード#1のキーの半分がノード#2にマップされます。この時点で、すべての読み取りと書き込みは新しいマッピングで機能し、間違ったノードにあるキーをクリーンアップする必要があります。パフォーマンス要件に応じて、すべてのキーを一度にチェックすることも、有効期限システムのようにランダムに選択したキーをチェックすることもできます。