長時間実行される非同期ジョブを管理する際のベストプラクティス


12

私は、エンドユーザーが長時間実行される非同期処理ジョブを生成するWebページから要求を送信するプロジェクトの設計段階にいます。この問題の「ベストプラクティス」はありますか?Webサービスとサービスブローカーは良い方法ですか?Microsoftメッセージングキューはここで適用できますか?


Web上でこれを行う場合、および非常に長い時間がかかる場合は、完了時にテキストメッセージまたは電子メールをユーザーに送信できます。
ジョブ

回答:


6

「ベストプラクティス」については知りません。私は最も一般的な間違いを知っています。

最初の間違い:DOS Yourself

webhandlerを使用して、長時間実行されるジョブを処理します。これは、長時間実行されるジョブになるヒットの割合、実行時間、および維持されるトラフィックの量に応じて、悪い場合もあれば非常に悪い場合もあります。

長時間実行ジョブが完了するまでにかかる時間内に、長時間実行ジョブが1つを超えないようにする必要があります。自分でDOSを実行する場合。また、割合と時間が一貫していると仮定すると、トラフィックが増えると悪化します。これは、トラフィックの増加に制限を課す問題の1つです。

第二の間違い:ウェブハンドラーからのスポーン

長時間実行されているプロセスを処理するためにWebハンドラーからプロセスを生成するのは難しい場合があり、その結果、エラーが発生しやすくなります。

  • 親から正しく分離する必要があります。そうしないと、webhandlerは子が完了するまで待機します。
  • UNIXで子をフォークすると、親から開いたハンドルを継承します。これらは上書きされない限り自動的に閉じられます。これには、データベース接続、ファイルハンドル、その他の開いているネットワーク接続などが含まれます。子プロセスが完了すると、これらはすべて閉じられます。

オプション

私は通常、at(1)フォークせずにwebhandlerからきれいに分離するために使用します。

でポーリング実装を使用することもできcronます。

処理を処理する別のサーバープロセスと通信できます。その通信を用いて行うことができsocketspipesまたはRESTのHTTP呼び出しのような、より高いレベルの抽象化又はキューメッセージをルーティングします。


2

数分以上話していると思います。

数分であれば、バックグラウンドでワーカースレッドを起動し、UIに進行状況を表示できます。多くのWebアプリケーションがその方法を使用しています。

5分を超える場合は、タスクを専用サービスに委任することができます。1つの例は、Googleアナリティクスによって生成されたレポートです。

Microsoft Messagingキューを使用して、システムから別のシステム、またはコンポーネントから別のシステムに情報を送信できます。


PHPのような言語はこれをどのように達成しますか?私はこれを行う
いくつかの

私はPHPの専門家ではありませんが、同じページで起動されるスレッドの代わりに、別のスレッドが呼び出されると思います。これは、AJAXで実際に起こることです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.