コンシステントハッシュアルゴリズムの詳細な説明

コンシステントハッシュアルゴリズムの詳細な説明

サーバー負荷分散を行う際には、ラウンドロビン、HASH、最小接続、応答時間、加重など、さまざまな負荷分散アルゴリズムから選択できます。その中でもハッシュアルゴリズムは最もよく使われるアルゴリズムです。

一般的なアプリケーション シナリオは次のようになります。キャッシュ サービスを提供する N 台のサーバーがあり、各サーバーに要求を均等に分散するためにサーバーの負荷を分散する必要があり、各マシンがサービスの 1/N を担当します。

よく使用されるアルゴリズムは、ハッシュ結果の余り (hash() mod N) を取得することです。つまり、マシンに 0 から N-1 までの番号を付け、カスタム hash() アルゴリズムに従って、各要求の hash() 値を N で割った余り i を取得し、番号 i のマシンに要求を配布します。しかし、このアルゴリズムには致命的な問題があります。マシンがクラッシュすると、そのマシンに届くはずのリクエストを正しく処理できなくなります。このとき、障害が発生したサーバーをアルゴリズムから削除する必要があります。このとき、(N-1)/N サーバーのキャッシュ データを再計算する必要があります。新しいマシンが追加された場合は、N/(N+1) サーバーのキャッシュ データを再計算する必要があります。これは通常、システムにとって許容できないスラッシングです (大量のキャッシュ無効化やデータの移動が必要になるため)。では、影響を受けるリクエストをできるだけ少なくするために、負荷分散戦略をどのように設計すればよいのでしょうか?

コンシステント ハッシュ アルゴリズムは、Memcached、Key-Value Store、Bittorrent DHT、LVS で使用されています。コンシステント ハッシュは、分散システムにおける負荷分散に最適なアルゴリズムであると言えます。

1. コンシステントハッシュアルゴリズムの説明

以下では、Memcached の Consistent Hashing アルゴリズムを例として使用します (Memcached の分散アルゴリズムを参照)。

ハッシュアルゴリズムの結果は一般的にunsigned int型なので、ハッシュ関数の結果は[0,232 -1]の間で均等に分布するはずです。232個の点を使って円を均等に切る場合、まずハッシュ(キー)関数に従ってサーバー(ノード)のハッシュ値を計算し、それを0から232までの円に分配します。

同じ hash(key) 関数を使用して、データを保存するキーのハッシュ値を見つけ、それを円にマッピングします。次に、データがマップされている場所から時計回りに検索を開始し、最初に見つかったサーバー (ノード) にデータを保存します。

一貫性ハッシュ原理の概略図

1. 新しいノードを追加します。新しく追加されたノードとリング上の反時計回り方向の最初のノード間のデータのみが影響を受けます (追加されたノードの時計回り方向の最初のノードの情報は、追加されたノードに移行する必要があります)。

2. ノードの削除: 元々削除されたノードとリング上の反時計回り方向の最初のノード間のデータのみが影響を受けます (削除されたノードの情報は時計回り方向の最初のノードに移行する必要があります)。したがって、コンシステント ハッシュは、負荷分散におけるノードの追加と削除によって発生するハッシュ値の変動の問題を効果的に解決できます。

サーバー追加時の一貫性ハッシュ図

仮想ノード: 仮想ノードを導入する理由は、サーバー (ノード) の数が少ない場合 (たとえば、サーバーが 3 台しかない場合)、ハッシュ (キー) によって計算されたノードのハッシュ値がリング上に均等に分散されず (スパース)、各ノードに負荷が不均衡になる問題が依然として発生するためです。仮想ノードは実際のノードのレプリカと見なすことができ、本質的には実際のノードと同じです (ただしキーが異なります)。仮想ノード導入後、実際のサーバ(ノード)の数を一定の割合(例えば200倍)で拡張し、そのハッシュ(キー)値を計算してリング上に均等に分散します。負荷分散を実行すると、仮想ノードに該当するハッシュ値は、実際には実際のノードに該当します。全ての実ノードが同じ割合で仮想ノードに複製されるため、ノード数が少ない場合にリング上でハッシュ値を均等に分散させる問題が解決されます。

仮想ノードが一貫性​​のあるハッシュ結果に与える影響

上図からわかるように、ノード数が 10 で、実際のノードごとの仮想ノード数が実際のノード数の 100 ~ 200 倍の場合でも、結果は非常にバランスが取れています。

2. 一貫性ハッシュアルゴリズムの実装:

記事「Consistent Hashing」では、Consistent Hashing の Java 実装について非常に簡潔に説明しています。

  1. java.util.Collectionをインポートします
  2. java.util.SortedMapをインポートします
  3. java.util.TreeMapをインポートします
  4.  
  5. 公共 クラスConsistentHash<T> {
  6.  
  7.  プライベート 最終的なハッシュ関数ハッシュ関数;
  8.  プライベート ファイナル レプリカの数int ;
  9.  プライベート 最終的なSortedMap<Integer, T> 円 =新しいTreeMap<Integer, T>();
  10.  
  11.  パブリックConsistentHash(HashFunction hashFunction, int numberOfReplicas,
  12. コレクション<T>ノード) {
  13.    これは.hashFunction = hashFunction です。
  14.     this .numberOfReplicas = numberOfReplicas;
  15.  
  16.     ( T ノード: ノード) {
  17. ノードを追加します。
  18. }
  19. }
  20.  
  21.  公共  void add(Tノード) {
  22.     ( int i = 0 ; i < レプリカ数; i++) {
  23. ノードをハッシュ関数でハッシュします。
  24. }
  25. }
  26.  
  27.  公共  void削除(T ノード) {
  28.     ( int i = 0 ; i < レプリカ数; i++) {
  29. 円を削除します(hashFunction.hash(node.toString() + i));
  30. }
  31. }
  32.  
  33.  パブリックT get(オブジェクトキー) {
  34.     (circle.isEmpty())の場合{
  35.      戻る ヌル;
  36. }
  37.     intハッシュ = hashFunction.hash(キー);
  38.    もし(!circle.containsKey(ハッシュ)) {
  39. SortedMap<Integer, T> tailMap = circle.tailMap(hash);
  40. ハッシュ = tailMap.isEmpty() ?circle.firstKey() : tailMap.firstKey();
  41. }
  42.    戻り値:circle.get(hash);
  43. }
  44.  
  45. }

<<:  階乗関連のアルゴリズムとその C++ 実装

>>:  Java でアルゴリズムを実装する場合は、再帰に注意してください。

ブログ    
ブログ    
ブログ    

推薦する

AI企業の成人式:自由が996と衝突し、技術的理想が地上戦争と衝突する

戦争の理由はすべて、例外なく一つのこと、つまり生き残ることにつながります。狼の本能がなければ、生き残...

...

...

...

人工知能の応用、開発、影響についての考察

ケンブリッジ大学人工知能研究センターは、人工知能によってもたらされる新しい能力とそれが直面するリスク...

オープン語彙検出オープンワールド物体検出コンペティション2023優勝チームソリューション共有

OVDテクノロジーの紹介物体検出は、コンピューター ビジョンの分野における中核的なタスクです。その主...

...

WOT2019 検索推奨アルゴリズムフォーラム: さまざまな分野における AI ベースの検索推奨の実用化

6月21日、WOT2019グローバルテクノロジーサミットとグローバル人工知能テクノロジーサミットが北...

ガートナー:世界の AI PC と生成 AI スマートフォンの出荷台数は 2024 年に 2 億 9,500 万台に達すると予測

ガートナーの最新予測によると、人工知能(AI)パーソナルコンピュータ(PC)と生成型人工知能(ジェネ...

医療機器における人工知能:これらは新たな産業アプリケーションです

人工知能により、研究者や製造業者は生活の質を向上させることができます。 [[419960]]人工知能...

...

Python の高度なアルゴリズムとデータ構造: コレクションの高速クエリとマージ

コード設計では、このようなシナリオによく直面します。2 つの要素が与えられた場合、それらが同じセット...

ガートナー:2025年までにベンチャーキャピタル投資の75%がAIを活用して意思決定を行うようになる

海外メディアの報道によると、市場調査会社ガートナーは最近、投資家が人工知能やデータ分析技術をますます...

2021年の産業用ロボットの6つの主要トレンド

産業情報ウェブサイトReportlinkerが2020年11月に発表したレポートによると、産業用ロボ...

...