負荷分散のための一般的な戦略は何ですか?

分析と回答


ラウンドロビン

このアプローチでは、受信リクエストをラウンドロビン方式でサーバー クラスター内の各マシン (アクティブ サーバー) に分散します。このアプローチを使用する場合、仮想サービスにタグ付けされたすべてのサーバーは同様のリソース容量を持ち、同じアプリケーションをロードする必要があります。すべてのサーバーのパフォーマンスが同じまたは類似している場合、この方法を選択するとサーバーに同じ負荷がかかります。この前提に基づいて、ラウンドロビン スケジューリングはリクエストを割り当てるためのシンプルかつ効果的な方法です。ただし、さまざまなサーバーの場合、この方法を選択すると、サーバーが現在のリクエストを処理できなくなった場合でも、機能が弱いサーバーでも次のサイクルでラウンド ロビンが受け入れられることになります。これにより、能力の低いサーバーに過負荷がかかる可能性があります。

加重ラウンドロビン

このアルゴリズムは、単純なラウンドロビン スケジューリング アルゴリズムの欠点を解決します。つまり、受信リクエストはクラスター内のサーバーに順番に分散されますが、事前に各サーバーに割り当てられた重みが考慮されます。管理者は、サーバーの処理能力に基づいて各サーバーの重みを定義するだけです。たとえば、最も強力なサーバー A には 100 の重みが与えられ、最も能力の低いサーバーには 50 の重みが与えられます。これは、サーバー B が最初のリクエストを受信する前に、サーバー A が連続して 2 つのリクエストを受信することを意味します。

最小接続数

上記のどちらの方法でも考慮されていないのは、システムが特定の時点で維持されている接続の数を認識できないということです。したがって、サーバー B が受信する接続がサーバー A よりも少ないにもかかわらず、サーバー B のユーザーが長時間接続を開いているため、サーバー B が過負荷になる可能性があります。これは、接続数、つまりサーバーの負荷が累積されることを意味します。この潜在的な問題は、「最小接続」アルゴリズムを使用すると回避できます。受信リクエストは、各サーバーに対して現在開いている接続の数に基づいて分散されます。つまり、アクティブな接続が最も少ないサーバーが、次の受信リクエストを自動的に受信します。基本的には単純なポーリングと同じ原理です。仮想サービスを備えたすべてのサーバーは同様のリソース容量を持つ必要があります。トラフィック レートが低い構成環境では、各サーバーのトラフィックが同じではなく、最初のサーバーが優先されることに注意してください。これは、すべてのサーバーが同じである場合、最初のサーバーへのアクティブなトラフィックが継続的に存在するまでは最初のサーバーが優先され、そうでない場合は常に最初のサーバーが優先されるためです。

送信元 IP ハッシュ 送信元 IP ハッシュ

このメソッドは、リクエスト元 IP のハッシュ値を生成し、このハッシュ値を使用して正しい実サーバーを検索します。これは、同じホストでは対応するサーバーが常に同じであることを意味します。この方法を使用すると、ソース IP を保存する必要はありません。ただし、この方法ではサーバーの負荷が不均衡になる可能性があることに注意してください。

最小接続時間の遅い開始時間

最小接続数と加重最小接続数のスケジューリング方法では、サーバーがオンライン環境に参加したばかりのときに、その期間を設定できます。この期間中、接続数は制限され、ゆっくりと増加します。これにより、起動直後に割り当てられた接続が多すぎてサーバーが過負荷にならないように、サーバーに「ステージング時間」が提供されます。この値は、L7 構成インターフェイスで設定されます。

加重最小接続加重最小接続

サーバーのリソース容量が異なる場合は、「重み付き最小接続」アプローチがより適切です。サーバーの状況に基づいて管理者がカスタマイズした重みによって決定されるアクティブな接続の数は、通常、非常にバランスのとれたサーバーの使用率を提供します。最小限の接続と重量の両方の利点を備えています。一般に、これは接続数とサーバーの重み比率を使用するため、非常に公平な分散方法であり、クラスター内で比率が最も低いサーバーが自動的に次のリクエストを受け取ります。ただし、トラフィックが少ない状況でこの方法を使用する場合は、「最小接続数」方法の考慮事項を参照してください。

エージェントベースの適応型バランシングエージェントベースの適応型バランシング

上記の方法に加えて、ロード ホストには、サーバーのステータスとサーバーの重みを定期的に監視するための適応ロジックが含まれています。非常に強力な「プロキシベースの適応負荷分散」方式の場合、ロード マスターは次の方法ですべてのサーバーの負荷ステータスを定期的に検出します。各サーバーは、0 ~ 99 の数字を含むインクルード ファイルを提供する必要があります。実際の負荷を示すために使用されます。サーバーの負荷 (0 = 前例のない、99 = 過負荷、101 = 失敗、102 = 管理者が無効)、サーバーは http get メソッドを使用してこのファイルを取得します。同時に、クラスター内のサーバーの場合は、これは、独自の負荷ステータスをバイナリ ファイルの形式で提供するサーバーのジョブの一部ですが、サーバーが独自の負荷ステータスを計算する方法には制限がありません。サーバーの全体的な負荷に応じて、次の 2 つの戦略から選択できます。 通常の動作では、スケジューリング アルゴリズムは、収集されたサーバー負荷値とサーバーに割り当てられた接続数の比率に基づいて重み付け比率を計算します。したがって、サーバーが過負荷になった場合、重みはシステムを通じて透過的に調整されます。重み付きラウンドロビン スケジューリング方法と同様に、異なるサーバーに異なる重みを効果的に割り当てることができるように、誤った割り当てをログに記録することができます。ただし、トラフィックが非常に少ない環境では、サーバーによって報告される負荷値は代表的なサンプルを確立できず、これらの値に基づいて負荷を割り当てると、制御の喪失やコマンドの発振が発生します。したがって、この場合、静的重量比に基づいて荷重分散を計算する方が合理的です。すべてのサーバーの負荷が管理者が定義した下限よりも低い場合、負荷ホストは自動的に加重ラウンドロビン モードに切り替えてリクエストを分散します。負荷が管理者が定義した下限を超えると、負荷ホストは自動的に切り替えます。適応モードに戻ります。

固定加重

最高の重みは、他のサーバーの重み値が低い場合にのみ使用されます。ただし、最も重みの高いサーバーがダウンした場合は、次に優先度の高いサーバーがクライアントにサービスを提供します。このアプローチでは、各実サーバーの重みをサーバーの優先順位に基づいて構成する必要があります。

重み付けされた応答重み付けされた応答

トラフィックは重み付けされたラウンドロビン方式でスケジュールされます。加重ラウンドロビンで使用される重みは、サーバーの有効性チェックの応答時間に基づいて計算されます。各有効性チェックのタイミングは、正常に応答するまでにかかった時間をマークします。ただし、この方法はサーバーのハートビート検出がマシンの速度に基づいていることを前提としていますが、この前提が常に真実であるとは限らないことに注意してください。仮想サービス上のすべてのサーバーの応答時間の合計が合計され、この値は個々のサービスの物理サーバーの重みを計算するために使用されます。この重み値は約 15 秒ごとに計算されます。

反映と拡張

Dubbo で使用される 5 種類の負荷分散:

  1. RandomLoadBalanceは実装が比較的簡単な負荷分散戦略であり、Dubbo で使用されるデフォルトの負荷分散戦略でもあります。重み付けされたランダム性と負荷分散を通じてリクエストを分散します。
  2. LeastActiveLoadBalance最小アクティビティ ポーリング。つまり、呼び出しのアクティビティが最も小さいサービスを優先します。アクティビティは単にサービス コールの数です。サービス コールの数は、最小のコールを取得するために ConcurrentHashMap を介して保存されます。最小のコールが複数ある場合は、呼び出し 上記のランダムなメソッドを通じて呼び出されます。
  3. ConsistentHashLoadBalance Consistent Hash は、リクエスト パラメータを通じてサービスを特定する方法です。Dubbo は、Consistent Hash アルゴリズムを通じて特定のサービス アドレスを取得します。リソース チルトを防ぐために、仮想ノードが追加されます。
  4. RoundRobinLoadBalance は、重み付けを通じてポーリングをシミュレートする重み付けポーリング アルゴリズムです。各サービスは、静的な重みと変化する動的な重みを維持します。各サービスは、最大の動的重みを持つサービスを選択し、合計の重みからサービスの動的重みを取り除きます。次に動的重みが計算されるとき、それは [元の重み] + [動的重み] によって取得されます。つまり、最も高い重みを持つサービスを選択した後、重みは低くなり、選択されていないサービスの重みは徐々に高くなり、重み付けとポーリングの役割を果たします。
  5. ShortestResponseLoadBalanceは、最も短い応答ロード バランシングです。つまり、最も長いロード バランシング応答時間でサービスを呼び出します。複数ある場合は、重み付けされたランダム性によって選択されます。LeastActiveLoadBalance と同様に、ConcurrentHashMap から値を取得し、平均を取得します。以前の応答時間を調べてから比較します。

ニャー インタビュー アシスタント:面接の質問に対するワンストップ ソリューション WeChat アプレット[ニャー インタビュー アシスタント]を検索するか、[ニャー インタビュー アシスタント] -> インタビュー アシスタントに従って無料で質問に答えることができます。面接に関する優れた知識やスキルをお持ちの方は、ぜひ共有してください。

おすすめ

転載: blog.csdn.net/jjclove/article/details/124924011