ロードバランサーのアルゴリズムと原理を探る

ロードバランサーのアルゴリズムと原理を探る

負荷分散アルゴリズムの種類を分析した後、動的負荷分散について紹介します。この概念は主にロードバランサの導入を通じて理解されます。重み付けポーリングアルゴリズムに基づいて、負荷分散の動的パフォーマンスを拡張できます。より具体的で詳細な説明については、記事を参照してください。

動的フィードバック負荷分散

クライアントがクラスター リソースにアクセスする場合、送信されたタスクに必要な時間とコンピューティング リソースは、多くの要因によって大きく異なります。たとえば、タスクによって要求されたサービスの種類、現在のネットワーク帯域幅、現在のサーバー リソース使用率などです。負荷の高いタスクの中には、計算集約型のクエリ、データベース アクセス、長い応答データ ストリームを必要とするものがありますが、負荷の軽いタスクでは、多くの場合、小さなファイルの読み取りや非常に単純な計算の実行のみが必要です。

タスク要求の処理時間の違いにより、処理ノードの利用率に偏りが生じる可能性があります。つまり、処理ノードの負荷が不均衡になります。一部のノードがすでに過負荷になっている一方で、他のノードは基本的にアイドル状態になっている状況が発生する可能性があります。同時に、一部のノードはすでにビジー状態であり、要求キューが長く、新しい要求を受信し続けます。一方で、これにより顧客は長時間待たされることになり、クラスター全体のサービス品質が低下します。そのため、ロードバランサーが各ノードの負荷状況をリアルタイムで把握し、負荷の変化に基づいて調整できるメカニズムを採用する必要があります。

具体的なアプローチは、ネガティブフィードバックメカニズムに基づく動的負荷分散アルゴリズムを使用することです。このアルゴリズムは、各ノードのリアルタイム負荷と応答能力を考慮し、一部のノードが過負荷になったときに大量のリクエストを受信しないようにタスク分散の割合を継続的に調整し、単一のクラスターの全体的なスループットを向上させます。

クラスターでは、サーバー監視プロセスはロードバランサー上で実行され、クラスター内の各ノードの負荷情報を監視および収集する役割を担います。また、クライアントプロセスは各ノード上で実行され、定期的に自身の負荷状態をロードバランサーに報告する役割を担います。監視プロセスは、すべてのノードから受信した負荷情報に基づいて同期操作を実行し、重みの割合に応じて割り当てるタスクを再分配します。重みの計算は主に、各ノードの CPU 使用率、使用可能なメモリ、およびディスク I/O 状態に基づいて新しい重みを計算します。新しい重みと現在の重みの差が設定されたしきい値より大きい場合、モニターは新しい重みを使用して、次の負荷情報同期が到着するまでクラスター内のタスクを再分配します。ロードバランサーは、動的な重みを持つ重み付きポーリングアルゴリズムを使用して、受信したネットワークサービス要求をスケジュールできます。

加重ラウンドロビンスケジューリング

加重ラウンドロビン スケジューリング アルゴリズムは、対応する重みを使用してノードの処理パフォーマンスを表します。このアルゴリズムは、重みの順序に従って、ラウンドロビン方式で各ノードにタスク要求を分配します。重みが高いノードは、重みが低いノードよりも多くのタスク要求を処理し、同じ重みのノードは同じ割合の要求を処理します。加重ラウンドロビンの基本原理は、次のように説明できます。

クラスター内にノード集合 N={N0,N1,…,Nn-1} があり、W(Ni) はノード Ni の重みを表し、インジケータ変数 i は前回選択されたサーバーを表し、T(Ni) は現在ノード Ni に割り当てられているタスクの量を表すものとします。

∑T(Ni)は、現在の同期サイクルで処理する必要があるタスクの合計量を表します。

∑W(Ni)はノードの重みの合計を表します。

そして、W(Ni)/∑W(Ni)=T(Ni)/∑T(Ni)

これは、各ノードの重みと全体の重みの比率に応じてタスクが割り当てられることを意味します。

重量計算

クラスタのノードがシステムで初めて使用されるとき、システム管理者はノードのハードウェア構成に応じて各ノードの初期重み DW(Ni) を設定し (通常はノードのハードウェア構成に応じて定義され、ハードウェア構成が高いノードほどデフォルト値が高くなります)、この重みをロード バランサで使用します。その後、ノードの負荷が変化すると、ロード バランサは重みを調整します。

動的重みは、ノードの実行時にノードのさまざまなパラメータから計算されます。実験では、CPU リソース、メモリ リソース、現在のプロセス数、応答時間などの最も重要な項目を計算式の要素として選択しました。各ノードの現在の重みと組み合わせて、新しい重みのサイズを計算できます。動的重みの目的は、ノードの負荷の状態を正しく反映して、将来のノードの負荷の変化を予測することです。各パラメータの重要性は、システム アプリケーションの種類によって異なります。一般的な Web アプリケーション環境では、使用可能なメモリ リソースと応答時間が非常に重要です。ユーザーが主に長いデータベース トランザクションを使用する場合は、CPU 使用率と使用可能なメモリが比較的重要です。システムの動作中にさまざまなアプリケーションで各パラメータの割合を適切に調整できるようにするために、各パラメータに定数係数 Ri を設定して、各負荷パラメータの重要性を示します (∑Ri=1)。したがって、任意のノード Ni の重み式は次のように記述できます。

LOAD(Ni)=R1*Lcpu(Ni)+R2*Lmemory(Ni)+R3*Lio(Ni)+R4*Lprocess(Ni)+R5*Lresponse(Ni)

ここで、Lf(Ni) はノード Ni のパラメータの負荷値を表します。上記の式は、CPU 使用率、メモリ使用量、ディスク I/O アクセス率、プロセスの合計数、および応答時間を表します。

たとえば、Web サーバー クラスターでは、係数 {0.1、0.4、0.1、0.1、0.3} を使用します。ここでは、サーバーのメモリと要求応答時間が他のパラメーターよりも重要であると考えています。現在の係数 Ri がアプリケーションの負荷を適切に反映していない場合、システム管理者は、現在のアプリケーションに近い係数のセットが見つかるまで係数を継続的に変更できます。

また、収集重みの周期値については、非常に短い周期の方が各ノードの負荷をより正確に反映できますが、頻繁な収集(1 秒に 1 回以上など)はロードバランサとノードに負担をかけ、不要なネットワーク負荷も増加する可能性があります。また、コレクターは収集時に負荷計算を実行するため、実験では、ロードバランサによって反映される各ノードの負荷情報に深刻なジッタが見られ、ロードバランサはノードの真の負荷変化の傾向を正確に捉えることができないことがわかりました。したがって、これらの問題を解決するには、一方では、負荷情報の収集周期を適切に調整する必要があり、通常は 5 ~ 10 秒です。他方では、ジッタを回避するために移動平均またはスライディング ウィンドウを使用できます。これにより、ロードバランサによって収集された負荷情報が平均スライディング カーブとして提示され、負のフィードバック メカニズムの調整効果がより高くなります。

ロードバランサーの動的重み収集プログラムは定期的に実行されます。デフォルトの重みが 0 でない場合、ノードの負荷パラメータが照会され、動的重み LOAD(Ni) が計算されます。ノードの初期重みと収集された動的重みを組み合わせて、最終的な重みの結果を計算する次の重み計算式を導入します。

Wi=A*DW(Ni)+B*(LOAD(Ni)-DW(Ni))1/3

式では、動的重みが初期重みと正確に等しく、最終重みが変化しない場合は、システム負荷状態がちょうど理想的な状態に達し、初期重み DW (Ni) に等しいことを意味します。動的重みの計算結果が初期重みよりも高く、最終重みが高くなる場合は、システム負荷が非常に軽いことを意味し、ロードバランサはノードに割り当てるタスクの比率を増やします。動的重みが初期重みよりも低く、最終重みが低くなる場合は、システムが過負荷になり始めていることを意味し、ロードバランサはノードに割り当てるタスクを減らします。実際の使用では、すべてのノードの重みが DW (Ni) よりも小さいことが判明した場合、現在のクラスターが過負荷であり、負荷の一部を処理するためにクラスターに新しいノードを追加する必要があることを意味します。逆に、すべてのノードの重みが DW (Ni) よりもはるかに高い場合は、現在のシステム負荷が比較的軽いことを意味します。

結論

ネットワーク負荷分散は、クラスタージョブスケジューリングシステムの具体的な実装です。処理するジョブ単位は TCP/IP プロトコルのネットワーク接続であるため、ネットワーク接続の集中型基本スケジューリングアルゴリズムを使用できます。クラスター負荷の不均衡の可能性を考慮して、サービスノードの重みを動的に取得し、負のフィードバックメカニズムを使用して、ロードバランサーによるネットワークサービス要求の分散を調整し、操作中のサービスノードのリソースの変化に適応します。実践により、動的バランシングを使用するとクラスターシステムの全体的なスループットが向上することが証明されています。特に、クラスター内の各ノードのパフォーマンスが異なり、クラスターが提供するネットワークサービスプログラムがアクセスするリソースが多様である場合、負のフィードバックメカニズムの効果が特に顕著です。他のタイプのクラスターでも、負のフィードバックメカニズムを使用した動的負荷分散を適切に適用できますが、ロードバランサーが処理するジョブ単位はネットワーク接続とは異なり、特定の負荷アルゴリズムも異なります。

<<:  LVS セットアップノート: 負荷分散アルゴリズム

>>:  6種類の負荷分散アルゴリズムの概要

ブログ    
ブログ    
ブログ    

推薦する

行列の乗算は乗算を必要とせず、100倍高速化、MITが近似アルゴリズムをオープンソース化

[[421266]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...

まだ気づいていないかもしれませんが、AIが人間を助けているアプリケーショントップ10

人工知能 (AI) 技術を使用すると多くのメリットがもたらされますが、その 1 つは、社会問題を別の...

機械学習アルゴリズムの実践 - Platt SMO と遺伝的アルゴリズム最適化 SVM

[[206589]]序文以前、SVMの双対問題を最適化するために、単純なSMOアルゴリズムを実装し...

12以上の学習リソースを検討した後、このAI学習パスをまとめました。

[[276295]]タグ: AI、機械学習、ディープラーニング一言でまとめると、AI の分野に参入...

機械学習に必須: TensorFlow を使用するための 11 のヒント

[[326623]] TensorFlow 2.x は、モデルの構築と全体的な使用において多くの利便...

Python はとても使いやすいです! AI初心者でもすぐに顔検出を体験

[[423040]] Pythonを使用してAI認識テストを実行します。具体的な方法は、リアルタイム...

4つのニューラルネットワークシーケンスデコードモデルとサンプルコードの説明

[[189448]]以下は、ニューラル ネットワーク モデルにおける 4 つのシーケンス デコード ...

顔スキャンの時代、顔認識起業家の進むべき道

[[205201]] 9月26日、北京市内の中学校で、顔認証システムで本人確認がされた受験者が模擬試...

AIを使えばITの運用と保守が簡単になる

[[437499]]この記事はWeChatの公開アカウント「Computer World」から転載し...

人工知能の新たなブレークスルー:ニューラルネットワークが画像内の物体を自律的に識別できる

海外メディアの報道によると、フィンランドのコンピューター科学者は神経生物学的手法を用いて人工知能研究...

医療業界におけるAIアプリケーションは「ゴミを入れればゴミが出る」という状況を避けるべき

ヘルスケア業界における人工知能と機械学習の価値と将来についての認識には大きな変化がありました。業界は...

データセンター: ジェネレーティブ AI 経済の推進

しかし、こうした大騒ぎのなか、生成 AI の可能性を最大限に引き出すために必要なインフラストラクチャ...

Google、新しいオープンソース圧縮アルゴリズム Brotli を発表

Zopfli に続いて、Google の公式ブログでは新しいオープンソース圧縮アルゴリズム Brot...

ベンチャーキャピタル企業がAIについて知っておくべきこと

タレスのグローバル副社長であるアシュヴィン・カマラジュ氏は、AI リスクに関する懸念の高まりについて...

...