ハッシュアルゴリズムとは?ハッシュアルゴリズムは一つの暗号化しかできず、クラッキングができない暗号学アルゴリズムであり、任意の長さの情報を固定長さの文字列に転換することができる。それが分散式における作用を解読しよう。

https://images.ihuoqiu.com/article/2018/03/27/huoqiuwang_201803272055175506.jpg

 では、分散式の中で、【例えばmemcached】、違うキャッシング対象を相応のハッシュアルゴリズムを相応のマシンにマッピングしないといけない、そうすると一台のマシンを添加したとき、或いはその内の某マシンにファイターした時に、もし最も原始的のkey%nの形式に基づいてハッシュにした場合、キャッシングクリアしてから、これらの内容を改めて全てのマシンにマッピングしないといけない、この代価があまりにも巨大である。

 すると一致性ハッシュが現われる。簡単に言えば、一致性ハッシュは全体のハッシュ値スペースを仮想的なリングに組織して、もし某ハッシュ関数Hの値スペースが0~2`32-1で、全体のスペースが時計回りの方法で組織すると仮設した場合、0と232-1は零点の方向へ重なる。

 次のステップはサーバーをH【ハッシュアルゴリズム】を使用してハッシュし(具体的にサーバーのIP或いはホスト名とキーワードにしてハッシュを行うことができる)、ハッシュリングの某位置にマッピングする、ここでは三台のサーバーをIPアドレスを使用してハッシュした後のリングスペースの位置は下記として仮設する:

2001.jpg

サーバーが配置された後、データをマッピングことにする。

下記アルゴリズムを使用してデータを相応のサーバーにマッピングする:データキーを同じ関数H【ハッシュアルゴリズム】でハッシュ値hを計算する【hに基づいてこのデータがリング上の位置を確定する】。この位置からリングにそって時計回りで「走らせる」、初めて遭遇したサーバーこそはそれがマッピングすべきサーバーである。

例えば、我々はA、B、C、Dの四つのデータ対称がある、ハッシュ計算を経て、リングスペースにおける位置は下記の如く:

3001.jpg

 一致性ハッシュアルゴリズムに基づくと、データAはサーバーAに固定され、Dはサーバー3に固定される、そしてB、Cはそれぞれサーバー2に固定される。

 以上は一致性ハッシュのサーバー配置とKey-Valueのマッピングの過程を説明した。

 次は一致性ハッシュの拡張性とフォールトトレランスを説明しよう。

 サーバー3がファイターされたと仮設しよう: