【いっかんせいはっしゅ】

一貫性ハッシュ とは?

💡 サーバーが増減しても、データの大移動が起きないハッシュの魔法
📌 このページのポイント
コンシステントハッシュ — ハッシュリング Node A Node B Node C Node D key1→B key2→C key3→A 時計回り → 次のノードに格納 ノード追加時 影響は隣接キーだけ 大半のデータは移動不要 ノード削除時 そのノードのデータだけ 次のノードに引き継ぎ 通常のハッシュとの違い 通常: ノード変更→全再配置 CH: ノード変更→一部だけ 分散キャッシュ・ロードバランサ等で広く利用される
コンシステントハッシュのハッシュリング
ひよこ ひよこ

一貫性ハッシュって普通のハッシュと何が違うの?

ペンギン先生 ペンギン先生

普通のハッシュだと hash(key) % N でサーバーを決めるけど、サーバー数Nが変わると全部のキーの割り当てが変わっちゃう。一貫性ハッシュならNが変わっても影響するのはごく一部だよ

ひよこ ひよこ

どうやって実現してるの?

ペンギン先生 ペンギン先生

ハッシュ空間を円環(リング)にして、サーバーとキーを同じリング上に配置するんだ。各キーは時計回りで最初に見つかるサーバーが担当する。サーバーが1台増えても、その周辺のキーだけ移動すれば済むよ

ひよこ ひよこ

データが偏ったりしないの?

ペンギン先生 ペンギン先生

物理サーバーが少ないと偏りやすいね。だから仮想ノード(Virtual Node)を使うんだ。1台のサーバーをリング上の複数箇所に配置して、データの分布を均等にするテクニックだよ

ひよこ ひよこ

どんなサービスで使われてるの?

ペンギン先生 ペンギン先生

AmazonDynamoDBが一貫性ハッシュの代表格で、Dynamo論文が有名だよ。他にもMemcachedクライアント、Redis Cluster、CDNキャッシュ分散など、分散システムのあちこちで使われてるんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「一貫性ハッシュ」って出てきたら「ノード増減時のデータ再配置を最小化するハッシュ手法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Consistent Hashing」 = 一貫性のあるハッシュ法
💬 Consistent は「一貫した」という意味で、ノードが変わってもハッシュの割り当てが大きく変わらないということだよ
← 用語集にもどる