コンシステントハッシングとは?
こんしすてんとはっしんぐ
コンシステントハッシングとは、分散システムでノードの増減時にデータの再配置を最小限に抑えるハッシュアルゴリズムの手法です。
コンシステントハッシング(Consistent Hashing)は、分散キャッシュや分散データベースなどのシステムで、複数のサーバー(ノード)にデータを均等に割り振るための仕組みです。
基本的な仕組みは、「ハッシュリング」と呼ばれる円環状の空間を使うことにあります。サーバーとデータキーの両方をハッシュ関数でこのリング上の点に配置し、各データは時計回りで最初に出会うサーバーに割り当てられます。これにより、サーバーが1台追加・削除された場合に移動が必要なデータは、そのサーバーが担当していた範囲のデータだけに限定されます。
従来の単純な「ノード数で割り算するハッシュ」では、ノード数が変わるたびにほぼ全データの再割り当てが発生しますが、コンシステントハッシングでは再割り当ては 1/N(Nはノード数)程度に抑えられます。
実用上は、負荷を均等にするために各サーバーをリング上の複数の仮想ノードとして配置する「仮想ノード」技術が組み合わされます。主な用途は以下のとおりです。
- 分散キャッシュ(Memcached、Redisクラスター)
- 分散データベース(Apache Cassandra、Amazon DynamoDB)
- CDNのコンテンツ振り分け
- ロードバランサーのセッション保持
スケールアウト・スケールインが頻繁に起こる現代のクラウドインフラにおいて、システム全体への影響を最小化しながら柔軟に拡張できる点が高く評価されています。
使い方・例文
Webサービスのキャッシュサーバーを3台から4台に増設した際、コンシステントハッシングを使うと移動が必要なキャッシュデータが全体の約25%のみに抑えられ、大規模なキャッシュ無効化によるパフォーマンス低下を防ぐことができます。
この用語をシェア
最終更新: