整合性ハッシュ:環でノード追加に強い

キーとノードを同じハッシュ環に置き、ノード追加・削除で動くキーだけを見る。素朴な mod N 割当と並べて移動量の差を体感します。

3
20
×1
直前操作で動いたキー
同じ操作(mod N)
理論移動量 ≈ K/N
負荷の偏り(最大/平均)
整合性ハッシュ(環+時計回り割当)
ノード(環上の位置) · キー 点と弧は所属ノードの色。
直前の操作で動いたキーは赤く大きく点滅します。
素朴な mod N 割当(参照棒グラフ)
各バー = ノード i が持つキー数。同じ操作を hash(key) mod N で行うと 色のついた分が動き、ほぼ全キーが入れ替わります。
分散DBやキャッシュでは、たくさんのキーを複数のノード(サーバ)に振り分けます。素朴なやり方は node = hash(key) mod N。簡単ですが、ノードを 1 台足すと N が変わってほぼ全キーの行き先が変わり、大移動(リハッシュ)が起きます。
整合性ハッシュ(consistent hashing)は、キーもノードも 0〜2m−1 の同じ環に hash で配置し、各キーを「時計回りで最初に出会うノード」に割り当てます。ノードを足しても、動くのはその新ノードの直前区間のキーだけ=平均 K/N 個で済みます。
スライダーとボタンを動かし、左(整合性ハッシュ)と右(mod N)で移動するキー数の差を見比べてみましょう。

いま何が起きている?

ここがポイント