サーバー負荷分散を行う際には、ラウンドロビン、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 実装について非常に簡潔に説明しています。
|
>>: Java でアルゴリズムを実装する場合は、再帰に注意してください。
社会が人工知能の時代に入り、機械が生活のほぼあらゆる側面に浸透する中、攻撃者が AI をどの程度悪用...
10月12日、全米レコード協会(RIAA)は、人工知能(AI)による音声複製が著作権侵害の潜在的な脅...
人工ニューラル ネットワークは、人工知能 (人間の認知能力を模倣するプログラム) を作成する方法です...
北京ビジネスデイリー(陳偉記者) 知能ロボットは記者、シェフ、囲碁の達人になった後、最近は生放送業界...
[[280913]] Jiwei.comニュース(文/Jimmy)によると、北京軌道交通指揮センター...
Andrej Karpathy は、ディープラーニング コンピューター ビジョン、生成モデル、強化学...
生成型検索エンジンは、入力クエリとオンライン引用に対する応答を直接生成することで、ユーザーの情報ニー...
[[397136]]自動化と人工知能が急速に進歩する時代において、2030年までに仕事は消滅するで...
OpenAI の新しい GPT-4V バージョンは画像のアップロードをサポートしており、これにより...
2021 年が始まりました。過去 1 年間で機械学習コミュニティでは多くの出来事がありました。時間...
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
最近、2020年中国(青島)芸術博覧会の期間中、青島の「ダブル募集・ダブル紹介」特別イベントが開催さ...
テキサス州に拠点を置くラックスペース テクノロジーズが実施した調査によると、公共部門の IT 意思決...