私は、各顧客の要求に関連付けられた長時間実行されるバックグラウンド プロセスを実行する必要があるコンシューマー Web アプリに取り組んでいます。長時間実行とは、1 分から 3 分の間のどこかを意味します。
フローの例を次に示します。オブジェクト/ウィジェットはあまり重要ではありません。
- 顧客がサイトにアクセスし、探しているオブジェクト/ウィジェットを指定します。
- いくつかの初期基準に一致するウィジェットを検索/クリーンアップ/フィルタリングします。<-- 長時間実行されるプロセス
- 顧客は、探しているウィジェットに関する詳細をさらに構成します。
- 長期にわたるプロセスが完了すると、顧客は変換前の最後のいくつかのステップを完了することができます。
ステップ 3 と 4 はあまり重要ではありません。長期にわたるプロセスを実行している間に時間を稼ぐことができるので、それらについて言及しただけです。
私たちが取り組んでいる環境は LAMP スタックで、現在は PHP を使用しています。mod_php (または fastcgi プロセス) で実行時間の長いプロセスに apache スレッドを使用させるのは、良い設計とは思えません。アプリの apache レイヤーは、データ処理 IMO ではなく、コンテンツの提供に重点を置く必要があります。
いくつかの質問:
- この「長時間実行」部分を apache/web アプリ レイヤーから分離する必要があるという点で、私たちの考えは正しいでしょうか?
- Linux/Apache/MySQL/PHP でこれを解決する標準/典型的な方法はありますか (適切な場合、処理に別の言語を使用することは可能です)。
- それを打破する方法について何か提案はありますか?たとえば、FIFO キューをかき回すデーモンを作成しますか?
編集: 明確にするために、長時間実行されるプロセスの約 1/4 のみがデータベース中心です。その部分の最適化に取り組んでいます。できることはありますが、今できることは限られています。
ありがとう!