2011-01-06 12 views
1

を変更するプロダクトマネージャーを説得、我々は機能があります。は、弊社のWebアプリケーションでは、長時間実行同期プロセスの設計

  1. は製品
  2. のリストを取得し
  3. 戻り値をExcelファイルに書き込みますダウンロードのためにユーザーにファイルを転送する

このプロセスは、2分を超えて製品の数に応じてより頻繁にかかる。リクエストによっては5分以上かかることがあります。平均的なユーザーは100〜500の製品をダウンロードし、要求には約1〜5分かかります。

すべてのWebサーバースレッドが1回の要求でアクティブになるには1分が長すぎると思います。それには時間がかかりますが、プロセス自体がサーバーのメモリ不足エラーを引き起こし、クラッシュします。

これは悪い習慣であることを納得させたいと思います。そのため、この状況で何をすべきかに関する推奨事項とともに、記事や書籍、またはソフトウェアアーキテクトの研究を引用してデザインを変更する必要があります。

誰もがこのような本/記事/研究を知っていますか?

1分でWebサーバースレッドが1回のリクエストでアクティブになるには時間がかかりすぎるという前提に同意できない場合は、どうか教えてください。

答えて

2

xlsを生成するロジックを再考しましたか?なぜなら、それがビジネス上の要件であれば、彼らはそれを変える(そこにいた、それを済ませた)のは本当に気にしないかもしれないからです。

私はxlsを生成してレポートを作成し、パフォーマンスを満足できるように(最大数秒でレポートを作成するために)apache-poiを使用しました。我々はデータをキャッシュするためにサーバー側のキャッシュを使用しました。私たちはただxlsを引き出すだろう。

+0

+1データをキャッシュする方法について私に指導してくれますか?この機能ではPOIを使用していますが、それでもプロセスには時間がかかります。 – Jeune

+0

アーキテクチャが何であるかはっきりしていませんが、ehcacheを使ってhibernateを使って複雑なオブジェクトをキャッシュするのにOSCache(http://www.opensymphony.com/oscache/)を使用するのと同じくらい単純なことができます。また、Timerタスクを使用して定期的にデータを抽出し、キャッシュすることができます(OSCacheで)。だからあなたの優れた世代のロジックは最小限の作業をしなければなりません。 – Pushkar

1

ダウンロードされているExcelのリストが修正されている場合は、バックグラウンドスレッドで生成し、ダウンロードのための直接リンクを返すと考えることができます。オンデマンドで生成するのではなく、1時間または2時間に1回変更しても、それを行う価値があります。

他の方法として、ユーザーが製品リストを選択し、ダウンロードリンクを含む電子メールを受信したい場合、またはファイルを電子メールの添付ファイルとして受信する場合にExcelにオプションを要求する場合があります。彼らが受け入れる場合、各要求をキューに提出し、Excelシートを生成するバッチジョブを実行し、それらをメール添付ファイルとして送信します。この方法では、Webサーバーを絞ることはありません。

さらに、私の主な質問は、プロセスのどの部分が時間がかかるのか、1分以上かかるのでしょうか?その領域(DB接続{プールする、サーバーを同じ場所に配置する}、巨大なテーブル{パーティション}、世代を凌駕する)を調べる価値はありますか?

固定グラフィックスを各エクセルに追加していますか?既にヘッダー/フッターなどが入っているテンプレートを使用してください。

悪い設計/アプローチを盲目的に言っているのではなく、ボトルネックを作り出す部分を見直す価値があります。

調査ではおそらく現在の問題が修正されるか、少なくとも今後の設計で同じ誤りが発生することはありません

関連する問題