操作して学ぶ

コンシステントハッシュ可視化

サーバーを1台足すたびにキャッシュが全部無効になる—— 素朴な hash % サーバー数 の弱点です。 コンシステントハッシュは、キーもノードもリング上に置き、 キーを時計回りで最初に出会うノードへ割り当てることで、 ノードの増減で移動するキーを最小限に抑えます。「ノード追加」を押して、動くキー(黄色枠)の少なさを確かめてください。

ノードごとのキー数(20個中)

node1
4
node2
9
node3
7

なぜリングにするのか

  • hash % N の弱点。N(ノード数)が変わると、剰余がずれてほぼ全キーの割当先が変わる。1台の追加や故障で、全キャッシュ無効化・全データ再配置という大事故になる。
  • リングなら影響は隣接区間だけ。ノードを1つ足すと、動くのは「その新ノードと、ひとつ手前のノードの間」にあるキーだけ。移動するのは平均で全体の 1/N に収まる。
  • 仮想ノードで負荷を平準化。物理ノードが少ないとリング上の区間が偏り、負荷が不均等になる。各ノードを複数の位置(仮想ノード)に置くと区間が細かく分散し、担当キー数が揃う。スライダーを上げると分布バーが均等に近づく。
  • 削除も同じく最小。ノードが抜けると、その担当キーは時計回りの次のノードが引き継ぐだけ。他のノードは無関係。

分散KV(Dynamo・Cassandra)、シャーディング、CDN やキャッシュのキー分配、一貫性ハッシュ方式のロードバランサなど、「台数が動いても影響を局所化したい」あらゆる場面で使われます。