ハッシュアルゴリズム[一貫性]ハッシュアルゴリズムの一貫性とは何ですか


転載この記事はブログ


1.はじめに一貫性ハッシュアルゴリズム

マサチューセッツ工科大学分散ハッシュ(DHT)アルゴリズムによって1997年に提案した一貫性のハッシュアルゴリズムは、設計目標は、インターネットのホットスポット(ホットスポット)の問題、心と非常によく似たCARPを解決することです。CARPによって使用されるコンシステントハッシュ法を修正し、単純なハッシュアルゴリズムは、分散ハッシュ(DHT)は、実際にP2P環境に適用することが可能になり、もたらします。 
    一貫性のハッシュアルゴリズムは、ハッシュアルゴリズムが良いか悪いかで判断され、キャッシュの動的に変化する環境の中で4つの定義を提案しました。

図1は、バランス(バランス):バッファ空間のすべてが利用されていてもよいように、ハッシュ結果のバランスを可能な限り全てのバッファに分配することができることをいいます。我々Duoha Xiのアルゴリズムは、この条件を満たすことができます。

図2に示すように、単調性(単調):単調性は既にバッファに対応するハッシュによって割り当てられたものを指す場合、新しいバッファがシステムに追加されて存在します。ハッシュ結果は、オリジナルのコンテンツが行くように、既存または新規のバッファにマッピングすることができ、かつ他のバッファの古いバッファセットにマッピングされることはありません割り当てられていることを保証することができるはずです。 

3、(スプレッド)の分散:分散環境では、それは全ての端末のバッファを表示することが可能であるが、それだけの一部を見ることができます。見緩衝範囲などの異なる端末が矛盾した結果のハッシュをもたらす、異なっていてもよいので、端末は、バッファへのコンテンツのハッシュをマッピングするプロセスにより、所望の場合、最終的な結果は同じ内容である別の異なる端末にマッピングされますバッファ。それは同じ内容につながるため、明確に避けるべきである。このような状況は、ストレージシステムの効率を低下させるために別のバッファに格納されます。これは、この出来事の重症度の分散を定義しています。良いハッシュアルゴリズムはつまり、分散を最小限にするために、矛盾が生じないようすることができるはずです。 

図4に示すように、負荷(荷重):ローディングの問題は、実際には別の角度からの分散性の問題を知覚します。異なる端末が同じバッファの異なるコンテンツにマッピングすることができるので、その後、特定のバッファのために、それはまた、異なるユーザに異なるコンテンツにマッピングすることができます。このような状況を回避すべきであるとし、分散性、良好なハッシュアルゴリズムは、バッファの負荷を最小限に抑えることができるはずです。

分散型クラスタでは、マシンを追加、削除、または自動機械から失敗したクラスタの後にこれらの操作は、クラスタ管理の最も基本的な機能を分散しています。共通のハッシュ(オブジェクト)%のNアルゴリズムは、そこの追加やマシンの後に削除された場合は、元のデータの多くは、単調の原則の、このような重大な違反を発見することはできません。に設計されてどのように一貫性のハッシュアルゴリズムを説明し、次の主要:

ハッシュ環状空間

32 ^ 2バケットのパワーを有するハッシュキー空間に対応する従来のハッシュアルゴリズム、(2 ^ 32)-1の0〜すなわちデジタル空間によります。今、これらの数字は、エンドツーエンドを接続することができ、閉じたリングを想像してみてください。下記に示すように、

リングにマッピングされた特定のハッシュアルゴリズム後のデータ処理

今、私たちはobject2は、オブジェクト3、object4 4ハッシュ関数に固有で計算キー値に対応するオブジェクト、その後、ハッシュリングにハッシュ化された、OBJECT1ます。図は、次の
    ハッシュ(物体1)= KEY1、
    ハッシュ(オブジェクト2)= KEY2、
    ハッシュ(オブジェクト3)= KEY3、
    ハッシュ(object4)= KEY4。

機械は、ハッシュアルゴリズムを介して環にマッピングされます

新しいマシンがクラスタに追加機を使用してハッシュ計算のための一般的な機械で(オブジェクトに格納されている同一のハッシュアルゴリズムがリングマシンにマッピングされている原理を使用して、一貫したハッシングアルゴリズムを使用して分散入力値として固有のエイリアスIPまたはマシン)、その後、時計回り方向を計算し、すべてのオブジェクトは、最も近いマシンに格納されています。
次のように図であるリングにマッピングされたハッシュキーアルゴリズムによって得られた値に対応し、そこNODE1、NODE2、NODE3 3台のマシンを仮定:
ハッシュ(NODE1)= KEY1を、
ハッシュ(NODE2)はKEY2を=、
ハッシュ(NODE3)= KEY3 ;

オブジェクトが同じハッシュ空間に機械を通して見ることができる、物体1は、その時計回りの格納されたオブジェクト3にNODE1、NODE2への回転、オブジェクト2、object4 NODE3に格納されているように記憶されています。そのようなデプロイメント環境では、ハッシュリングは、オブジェクトによって計算されたハッシュ値がすばやく対応する機械を見つけることができるようになりますので、変更するつもりはないので、あなたは、オブジェクトの位置が実際に格納されて見つけることができます。

マシンの追加削除

ローカル残り通常ハッシュアルゴリズムは、機械が大幅単調性を満たさない場合、オブジェクト格納場所の多数が失敗有するように付着される追加または削除した後、最も間違っています。さんがどのように処理されるか一貫性のハッシュアルゴリズムを分析してみましょう。

  1. ノード(マシン)が削除
        NODE2障害が除去された場合に時計回りの移動に応じて、方法の上記の例を配布するだけでオブジェクト3のマッピング位置が変更されたので、オブジェクト3は、他の、NODE3に移行しますオブジェクトは、すべての変更はありません。図は次のとおりです。

  1. ノード(マシン)を追加
    新しいノードがクラスタノード4に追加される場合、以下に示すように、対応するハッシュアルゴリズムKEY4によって得られた、リングにマッピングされました。

マイグレーション時計回りルールの適用は、その後、NODE4にオブジェクト2移行され、他の目的は、元の格納場所と主張しました。ノードの追加および削除の分析を通じて、一貫したハッシングアルゴリズム単調さを維持しながら、またはデータが最小値に達した移行、そのような分散型クラスタリングアルゴリズムは、データマイグレーション大量のを避けるために非常に適しています、サーバー上の圧力を低下させます。

バランス

上記の分析が示すによると、一貫したハッシングアルゴリズムは、単調性と負荷分散特性と分散一般的なハッシュアルゴリズムを満たすだけでなく、その理由としては、広くためのバランスの欠如のため、使用されません。以下は、ハッシュアルゴリズムは、自然のバランスを満たすためにどのように一貫性のある分析します。のみNODE1および展開上述のようにハッシュアルゴリズムは、バランスのとれた保証されない場合のNODE3(NODE2図を削除)、NODE1に物体1記憶されている非常になるとオブジェクト2、オブジェクト3、一方、そうでNODE3にobject4格納されています不均衡の状態。一貫したハッシングアルゴリズムで、仮想ノードを導入することは、可能な限りバランスを満たすためです。
    - 「仮想ノード」(仮想ノード)は、「仮想ノード」の数に対応する実際のノード(マシン)は、この数は、「コピーにハッシュ空間の複製(レプリカ)の実際のノード(マシン)に対応していますハッシュ空間内のハッシュ値に配置番号「」仮想ノード」。
のみ上記の状況を配備してのNODE1 NODE3(NODE2は、マップを削除)するには、例えば、マシン上のオブジェクトの配布に先立っては非常にバランスが取れている、そして今、我々は二つのコピー(コピー数)を注文し、例えば、全体のハッシュリングするように次のように4つの仮想ノード、最後のグラフオブジェクトマップがあります。

object1-> NODE1-1、object2-> NODE1-2、object3-> NODE3-2、object4-> NODE3-1:図は、オブジェクト間のマッピングを示します。仮想ノードを導入することによって、よりバランスのとれに分散オブジェクト。だから、実際には、オブジェクトクエリは、それを操作する方法は本当にありますか?仮想ノードからハッシュへの実際の変換ノードのオブジェクトは次のとおり

ノード数と接尾辞に対応するハッシュを計算する「仮想ノード」IPアドレスを使用することができます。たとえば、IPアドレスNODE1が192.168.1.100であると仮定します。「仮想ノード」の導入前に、ハッシュ値計算キャッシュA:
ハッシュ(「192.168.1.100」);
「仮想ノード」を算出「仮想セクション」との点NODE1-1 NODE1-2のハッシュ値の導入:
ハッシュ( " #1 192.168.1.100 "); // NODE1-1
ハッシュ(" 192.168.1.100#2「); // NODE1-2

おすすめ

転載: www.cnblogs.com/54chensongxia/p/11596962.html