web-dev-qa-db-ja.com

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

HTTPのさまざまな負荷分散アルゴリズムを調査していたところ、3。ランダム、ラウンドロビン、および重み付けラウンドロビンが見つかりました。他のオプションはありますか?

ありがとうポール

33
Paul Sheldrake

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

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

  • 加重ラウンドロビン-ラウンドロビンと同じですが、一部のサーバーは全体的なトラフィックのより大きなシェアを取得します。

  • ランダム

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

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

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

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

  • 最小レイテンシPerlbal は、HTTP OPTIONSリクエストをバックエンドサーバーにすばやく作成し、そのリクエストを最初のサーバーに送信して応答します。

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

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

  • 共有/分散セッションシステム。これにより、任意のWebノードが任意のユーザー要求に応答できます(つまり、セッションCookieなどのユーザーセッションデータは、すべてのサーバーで等しく利用できます)。 。

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

37
Jesper M

質問は不完全です:

ロードバランスWHAT?

CPUが飽和する可能性があります。通常の視点は後方です-リソースにプルするのではなく、リソースをプッシュします。

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

ネットワークは、レイテンシまたは合計スループットに基づいて負荷分散できます...

個人は、個々の容量に基づいて負荷を分散できます。マルチタスクがうまくいくものもあれば、そうでないものもあるので、質と量の違いがあります。多くの要因に基づいて、異なる属性に異なる重みを付けて、人的資源を最適化する場合があります。

上記は完全ではありません。重要なのは、リソースごとにまったく異なる種類のロードバランシングをとることです。それらの利用可能な属性と容量のうち、バランスをとることに関心があるのはどれかを明記する必要があります。

バランスをとろうとしているのは、適切なバランスアルゴリズムを作成するための最初の基準です。そして、3つしかないという提案は...無知です。 「負荷のバランスをとる」すべての方法を説明しようとする適切な仕事をすることは、PhDの価値があります。

RT

4
Richard T

あなたの質問への直接の答えではなく、私たちが有用であるとわかった実際の解決策。 LVSとPulseデーモンを使用して、HTTPロードバランシングは、シンプルなSSH接続とuptime

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

私の2c。 YMMV。

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

0
Zayne S Halsall