【いっかんせいはっしゅ】
一貫性ハッシュ とは?
最終更新:
💡 担当が増えても、引っ越すデータを少なくする
ノードの増減で担当するキーが変わる範囲を抑える割り当て手法。代表的な方式では、キーとノードをハッシュ値の輪に配置し、輪をたどって担当ノードを決める。
📌 このページのポイント
- 代表的な方式は、キーとノードを同じハッシュリングに置く
- 時計回りの次のノードを担当にする例がある
- ノード増減で変更する担当の範囲を抑える
- 仮想ノードで分散を調整するが、完全な均等の保証ではない
サーバー数で割る方法とは、どう違う?
例えばhash(key) % Nで担当を決めると、サーバー数Nの変更で多くのキーの担当が変わるよ。全部が必ず変わるわけではない。一貫性ハッシュは、増減で変わる範囲を抑えるための割り当て方法なんだ。
リングでは、どう決める?
ノードとキーをハッシュ値の輪に置き、時計回りで次にあるノードを担当とする例があるよ。途中に新しいノードを入れると、その前の区間のキーを引き受ける。ほかの区間は担当を保てるんだ。
データの偏りは、なくなる?
必ず均等にはならないよ。仮想ノードでは、一つの物理ノードを輪の複数の位置に置いて分散を調整する。担当位置やキー、アクセスの偏りもあるので、実際の負荷を確かめる必要があるね。複製やデータの移行も別に設計するんだ。
まとめ:ざっくりこれだけ覚えればOK!
「一貫性ハッシュ」って出てきたら「サーバーの増減で、データの担当変更を少なくする割り当て方法」と思えばだいたいOK!
📖 おまけ:英語の意味
「Consistent Hashing」 = 一貫性のあるハッシュ法
💬 Consistent は「一貫した」という意味で、ノードが変わってもハッシュの割り当てが大きく変わらないということだよ