一般的な非同期ジョブを開始するユーザー要求を受け入れ、ジョブを実行するためのワーカープロセス/スレッドを作成することを目的としたPHPWebアプリケーションについて考えてみます。ジョブは特にCPUやメモリを集中的に使用しませんが、I/O呼び出しをかなり頻繁にブロックすることが予想されます。1秒間に開始するジョブは1つか2つまでですが、実行時間が長いため、一度に多くのジョブが実行される場合があります。
したがって、ジョブを並行して実行することが最も重要です。また、各ジョブは、ハングしたワーカーの強制終了、ユーザーの要求に応じたワーカーの中止などを担当するマネージャーデーモンによって監視される必要があります。
このようなシステムを実装するための最良の方法は何ですか?私は見えます:
- マネージャーからワーカーをフォークする-これは最低レベルのオプションのようであり、私は自分で監視システムを実装する必要があります。ApacheはWebサーバーであるため、このオプションでは、PHPワーカーをFastCGI経由で起動する必要があるようです。
- ある種のジョブ/メッセージキューを使用します。(gearman、beanstalkd、RabbitMQなど)-当初、これは当然の選択のように思われました。いくつかの調査の後、私はすべてのオプションと多少混乱しています。たとえば、Gearmanは、ワーカーの固定プールがある巨大な分散システム用に設計されているように見えます...したがって、必要なもの(ジョブごとに1人のワーカー)に適しているかどうかはわかりません。