コンテンツへスキップ
uencoder

Consistent Hashing

一貫性ハッシュとは、ノードの追加や削除時に再割り当てが行われるキーを 1/n だけに抑えるハッシュ技法であり、分散キャッシュやシャーディングで使われる。

目的

ノードの参加や離脱に伴うデータ移動を最小化する、分散ストレージと分散キャッシュの中核技術である。

メカニズム

ノードとキーを両方 0〜2^32 のハッシュリングへ配置し、各キーはそこから時計回りで最初のノードに属する。ノードの追加や削除は隣接区間のキーにのみ影響する。仮想ノード(ノードごとに複数のハッシュ点を置く)はバランスを改善する。負荷はほぼ均等に分散する。

ユースケース

  • 分散キャッシュ(Memcached)
  • CDN ノードの分割
  • データベースのシャーディング(Cassandra)
  • サーバーの負荷分散

例

  • 入力
    Node C joins
    Output
    Only keys in C's adjacent arc migrate

    Minimal migration

よくあるエラー

Too few virtual nodes causes uneven load
Use 150+ virtual nodes per node

関連用語

References