一貫性のあるハッシュ アルゴリズムは 1997 年に MIT によって提案されました。分散キャッシュの問題を解決することを目的とした特別なハッシュ アルゴリズムです。サーバーを削除または追加するときに、マッピングをわずかに変更することができます。既存のサービスリクエストとそれらを処理するサーバーの間で。
一貫性のあるハッシュ アルゴリズムは、1997 年に MIT によって提案されました。分散キャッシュの問題を解決するために設計された特別なハッシュ アルゴリズムです。サーバーを削除または追加する場合、既存のサービス リクエストとリクエストを処理するサーバー間のマッピングの変更を最小限に抑えることができます。一貫性のあるハッシュは、分散ハッシュ テーブル (DHT) における単純なハッシュ アルゴリズムの動的スケーリングの問題を解決します。
はじめに:
一貫性のあるハッシュ アルゴリズムは、1997 年に論文『Consistenthashing and Random Trees』で提案され、分散システムで広く使用されています。コンシステントハッシュとは、ハッシュ化アルゴリズムのことで、簡単に言うと、サーバーが削除または追加されたときに、既存のサービスリクエストとリクエストを処理するサーバー間のマッピング関係の変更を最小限に抑え、単調性を可能な限り満たすことができるアルゴリズムです。 。通常の分散クラスタでは、サービス要求と処理要求サーバは1対1に対応しており、サービス要求と処理サーバのマッピング関係は固定されており、あるリクエストは固定のサーバで処理されます。 。この方法ではシステム全体の負荷を分散することができず、一部のサーバーがビジー状態になって新しいリクエストを処理できない可能性があります。他のサーバーがアイドル状態になっている間は、システム全体のリソース使用率が低く、分散クラスター内のサーバーがダウンすると、特定のサービス要求が処理できなくなる直接的な原因となります。
さらなる改善により、ハッシュ アルゴリズムを使用してサービス リクエストと処理サーバー間の関係をマッピングし、動的割り当ての目的を達成できます。サービスリクエストはハッシュアルゴリズムにより変換され、変換結果はサービスリクエストに対応するリクエスト処理サーバとなるサーバノード値の剰余計算が行われます。この方法はノード障害に対処でき、分散クラスター ノードがダウンした場合、ハッシュ アルゴリズムを通じてサービス リクエストを他の利用可能なサーバーに再分散できます。これにより、リクエストが処理できない状況が回避されます。
ただし、この方法の欠点も明らかで、サービスリクエストに対応するデータがサーバーに保存されている場合、リクエストのハッシュ値を再計算すると、大量のリクエストがリダイレクトされてしまいます。リクエストで使用されるデータが無効であり、これは分散システムでは非常に好ましくありません。適切に設計された分散システムは良好な単調性を備えている必要があります。つまり、サーバーの追加や削除によって大量のハッシュの再配置が発生することはなく、コンシステント ハッシュによってこの問題を正確に解決できます。
コンシステント ハッシュ アルゴリズムは、ハッシュ値空間全体を仮想リングにマッピングし、ハッシュ空間全体の値の範囲は 0 ~ 232-1 です。空間全体は時計回りに整理されています。 0~232-1の方向はゼロ点で一致します。次に、次のアルゴリズムを使用してサービス リクエストをマッピングし、ハッシュ アルゴリズムを使用してサービス リクエストの対応するハッシュ値を計算し、ハッシュ値の位置に従って円に沿って時計回りに検索します。最初に見つかったサーバーが対応するサーバーです。処理リクエストのサーバー。新しいサーバーが追加された場合、影響を受けるのは、新しく追加されたサーバーとそのリング空間内の以前のサーバー (つまり、反時計回りに最初に遭遇したサーバー) の間のデータのみであり、他のデータには影響しません。要約すると、コンシステント ハッシュ アルゴリズムは、ノードの増減に対してリング空間内のデータのごく一部を再配置するだけでよく、耐障害性とスケーラビリティが優れています。
機能:
スケーラビリティ。一貫したハッシュ アルゴリズムにより、サーバーの追加または削除時にデータ ストレージの変更が最小限に抑えられ、従来のハッシュ アルゴリズムと比較してデータ移動のオーバーヘッドが大幅に節約されます。
データの急速な増加への適応を強化します。データの分散には一貫性のあるハッシュ アルゴリズムが使用されます。データが増加し続けると、一部の仮想ノードに大量のデータが含まれる可能性があり、仮想ノード上でデータが不均一に分散されます。このとき、大量のデータを含む仮想ノードは、この分割は元の仮想ノードを 2 つに分割するだけであり、すべてのデータを再ハッシュして分割する必要はありません。仮想ノードを分割した後、物理サーバーの負荷がまだアンバランスである場合は、サーバー間で一部の仮想ノードのストレージの分散を調整するだけで済みます。これにより、データの増加に応じて物理サーバーの数を動的に拡張でき、従来のハッシュ アルゴリズムを使用してすべてのデータを再配布するよりもコストが大幅に低くなります。
以上がコンシステントハッシュとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。