私たちは第三者の報告ツールを使用しています。レポート ツールは、active-x を使用します。まず、フィルターに従ってクエリを生成して実行します。次に、データ (クエリの結果) を含む 1 つのレポート ファイルが作成されます。その後、クライアントはレポート ファイルをダウンロードします。しかし、ファイル書き込み操作は私たちにとって大きな問題です。私たちは何ができる?ファイル書き込み操作を別のアプリケーションに取り込んで、このアプリケーションを別のアプリケーション プールに取り込むことで解決できますか? 何か提案はありますか?そして、ウェブサーバーはどのように動作し、実行されますか? たとえば、Web サーバーに接続する 100 のクライアントがあり、いくつかのレポートを実行しようとしているとします。したがって、Web サーバーはこれらのクライアント用に 100 個のファイルを作成する必要があります。では、レポート データが非常に巨大で、他のユーザーがその完了を待っている場合はどうなるでしょうか。
2 に答える
あなたの問題はあまり明確ではありません。ファイルの書き込みは大きな問題だとおっしゃいましたが、それはどういう意味ですか? それは遅いですか、それとも何ですか?
アプリケーションは、一度に 1 つのクライアントにサービスを提供するように設計されていますか? そうでない場合、他の人がその完了を待つとあなたが言うのはなぜですか?
あなたのアプリケーションは一度に複数のクライアントにサービスを提供できると思います。負荷が高い場合、IO が遅くなるため、ファイルの書き込みが影響を受けます。負荷がインスタンス間で分割されるアプリケーションの負荷を分散する必要があり、その方法で IO を改善できます。もちろん、問題は IO であるため、インスタンスは別のマシン上にある必要があります。ロジックが CPU を集中的に使用し、メモリを大量に消費するという問題が他にもある可能性があります。すべての問題を見つけるには、アプリをプロファイリングする必要があります。
大規模なレポートの場合、リクエストを処理キューに入れ、準備が整うまで顧客に数分間待たせることができます。大規模なデータ セットのレポートを即座に生成すると、システムに大きな負担がかかり、負荷分散が難しくなります。
おそらく、Web サイトで要求をキューに転送し、最終的に別のレポート生成サーバーによって処理されるようにします。これらのサーバーをさらに追加して、キュー内のアイテムを処理することができます。この処理は、Web サイトのユーザーに影響を与えることはありません。レポートが即時ではないことに対処する必要があります。
また、すべての処理が「オンデマンド」にならないように、事前に実行できる処理についても考えてください。毎日同じレポートがある場合は、クライアントがレポートを長時間待っていると感じないように、スケジュールを設定できるようにします。
重い IO は、クライアントの Web 要求を処理していないサーバーにオフロードする必要があります。