どんな種類の負荷分散アルゴリズムがありますか


32

HTTPのさまざまな負荷分散アルゴリズムを調査していたところ、3。Random、Round Robin、Weighted Round Robinが見つかりました。他のオプションはありますか?

おかげでポール

回答:


33

HTTPロードバランサーの最も一般的な負荷分散アルゴリズムは、IMHOです。

  • ラウンドロビン(「Next in Loop」とも呼ばれます)。

  • 重み付きラウンドロビン - ラウンドロビンとして。ただし、一部のサーバーは全体のトラフィックの大きなシェアを取得します。

  • ランダム

  • ソースIPハッシュ。接続は、送信元IPアドレスに基づいてバックエンドサーバーに配信されます。Webノードに障害が発生し、サービスを停止すると、配布が変更されます。すべてのサーバーが特定のクライアントIPアドレスを実行している限り、常に同じWebサーバーにアクセスします。

  • URLハッシュ。ソースIPハッシュによく似ていますが、ハッシュはリクエストのURLで行われます。特定のオブジェクトに対するリクエストは常に1つのバックエンドキャッシュにのみ送信されるため、プロキシキャッシュの前で負荷分散を行う場合に便利です。これにより、キャッシュの重複が回避され、同じオブジェクトが複数/すべてのキャッシュに保存され、バックエンドキャッシュの有効容量が増加します。

  • 最小接続、加重最小接続。ロードバランサーは、各サーバーの開いている接続の数を監視し、最も負荷の少ないサーバーに送信します。

  • 最小トラフィック、重み付き最小トラフィック。ロードバランサーは各サーバーからのビットレートを監視し、送信トラフィックが最も少ないサーバーに送信します。

  • 最小遅延PerlbalはバックエンドサーバーにHTTP OPTIONSリクエストをすばやく送信し、最初のサーバーにリクエストを送信して応答します。

おそらく、上記は厳密なコンピューターサイエンスの意味でのアルゴリズムではなく、一般的なアプローチのより一般的な説明です。ここに、Ciscoが使用するアルゴリズムのいくつかをより詳細に説明したシスコからの1つの小さなペーパーがあります。他のベンダーの実装はわずかに異なります。

よりエキゾチックなアルゴリズムが役立つエッジケースがあります。たとえば、ビデオストリーミングは「トラフィックが最も少ない」場合に適しています。しかし、一般的に言えば、ほとんどのWebアプリケーションおよびWebサイトにとって、最適なソリューションは次のとおりです。

  • 共有/分散セッションシステムは、任意のwebnodeは、任意のユーザーの要求に答えることができるように(例えばセッションクッキーなどつまり、ユーザセッションデータは、すべてのサーバーにも同様に利用可能です)。

  • ラウンドロビン(オプションで重み付けラウンドロビン)またはランダム分散を使用した負荷分散。ラウンドロビンとランダムは、「ホットスポット」問題のないシンプルで回復力のあるアルゴリズムです。つまり、バックエンドへの負荷分散はすべての状況で公平なままです。


5

質問は不完全です:

ロードバランス

CPUは飽和状態になる場合があります。通常の見方は後方であり、リソースにプルするのではなく、リソースをプッシュします。

ディスクには、スペース、読み取り速度、書き込み速度、スループットなど、バランスを取るためのさまざまな種類の負荷があります。

ネットワークは、待ち時間または合計スループットに基づいて負荷分散できます...

個々のキャパシティに基づいて負荷を分散できます。一部のマルチタスクはうまくいきますが、そうでないものもあり、品質と量があります。多くの要因に基づいて、異なる属性に異なる重みを与えて、人的資源を最適化できます。

上記は完全なものではありません。要は、リソースが異なれば、負荷分散の種類もまったく異なります。利用可能な属性と能力のうち、バランスを取ることに関心があることを述べなければなりません。

バランスをとろうとしているのは、優れたバランスアルゴリズムを作成するための最初の基準です。そして、3つしかないという提案は...未開拓です。「負荷のバランスをとる」すべての方法を説明しようとする適切な仕事をすることは、博士号に値するでしょう。

RT


2
リチャード質問がありません、アルゴリズムはあらゆる方法や実装の基礎です。
単神話

2
申し訳ありません単神話、私はのろわれたものを見逃していませんでした。心を開きます。
リチャードT

@ monomyth、@ Richardは正しい-アルゴリズムの選択は、負荷分散の対象によって異なります。ディスクスペースの使用量を負荷分散するアルゴリズムを開発できますが、これはHTTPリクエストのような他のものにはまったく適用されない場合があります。
ジョシュ

@ Josh、@ Richard、負荷分散の概念は同じです。ディスク使用量、iSCSI、HTTP、CPU、その他のバランスを取るためにラウンドロビンを使用することもできます。
マークヘンダーソン

@Farseeker同意します、ラウンドロビンはかなり普遍的です。しかし、タスクに固有の負荷分散アルゴリズムはありませんか?
ジョシュ

0

あなたの質問に対する直接的な答えではありませんが、実際に役立つ解決策です。LVSとパルスデーモンを使用して、HTTPロードバランシングは、単純なSSH接続とuptimeの呼び出しを介して「実サーバー」の負荷を決定するカスタムbashスクリプトを呼び出すように構成されています

次に、サーバーの負荷平均に基づいて、サーバーごとに重み付けが設定されます。負荷平均は必ずしもHTTP接続またはそれらの接続によって引き起こされるCPU負荷を示すものではないため、最も科学的なアプローチではありません。それにもかかわらず、驚くほど効果的な結果が得られました。

私の2c。YMMV。

PS:LVSプロジェクトを見てください-負荷分散スケジューリングの実装に関する情報は間違いなく見つかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.