私はフリート追跡会社で働いており、この質問は具体的にどのようにレポートを作成する予定かについてのものです。私たちの環境を説明しましょう。1 つのデータベース、1 つの負荷分散プロセス、および 3 つのレポート処理サーバーがあります (これらはすべての点で等しいと仮定しましょう)。顧客がレポートを要求すると、そのレポートのすべてのパラメーターがデータベースに入ります。私は現在、データベースから保留中のレポートを取得し、レポートを作成して電子メールで送信する 3 つのレポート処理サーバーに委任する負荷分散アプリに取り組んでいます。サーバーがレポートを終了する (またはエラーが発生する) と、負荷分散アプリに通知します。レポートは、1 台の車両の 1 日分の GPS データから、数百台の車両の 3 か月分の GPS データまで、あらゆるサイズで提供されます。
ロード バランシングを行う方法はいくつか考えられますが、満足できるものではありません。各サーバーで最大 5 つのレポートしか作成できませんでしたが、1 つのサーバーが 5 つの小さなレポートを取得し、別のサーバーが 5 つの大きなレポートを取得する場合があります。「ラウンド ロビン」アプローチを実行して、サーバー間でレポートを順番に配布することもできますが、それでもサーバーの過負荷を防ぐことはできません。
私が今考えている最善のアイデアは、各レポートに必要な GPS データの量を数えることです (実行するのは簡単な作業です)。サーバーがレポートを終了する (そしてロード バランサーに通知する) と、そのサーバーの現在の合計からそのレポートの GPS データの量を差し引きます。このようにして、作業する GPS データの量が最も少ないサーバーに次のレポートを割り当てることができました。また、サーバーが過剰に機能しないように最大値を設定することもできます (最初にレポート プロセス全体をリファクタリングする原因となっている問題です)。すべてのサーバーが最大に達したときにさらにレポートがある場合は、それらをキューに入れ、後でサーバーがいくつかのレポートを終了したときにそれらを試みることができます。
レポートをできるだけ早く仕上げるための最良のアプローチであるとは確信していません。これらは、これまでに思いついた最高のものです。
複数のサーバー間で異なるサイズのレポートを負荷分散するアプローチを最適化するにはどうすればよいですか?