XML-RPCAPIとWebフロントエンドを介してアップロードされたファイルを処理するCakePHPでWebサイトを構築しています。ファイルはClamAVでスキャンする必要があり、サムネイルを生成する必要があります。ユーザーが待つ必要のない、ある程度の時間がかかるすべてのリソース集約型の作業。そこで、PHP全般、特にCakePHPを使用した非同期処理について検討しています。
有望に見えるCakePHP用のMultiTaskプラグインに出くわしました。また、 droprやbeanstalkdなどのさまざまなメッセージキューの実装にも出くわしました。もちろん、ある種のバックグラウンドプロセスも必要になります。おそらく、ある種のCakeShellを使用して実装されます。PHP_Forkを使用してマルチスレッドPHPデーモンを実装するMultiTaskを見ました。
これらすべての部品を最良の方法で組み合わせる方法について、いくつかのアドバイスが必要です。
- 長時間実行されるデーモンをPHPで作成するのは良い考えですか?何に気をつけるべきですか?
- 外部メッセージキューの実装の利点は何ですか?MultiTaskプラグインは、外部メッセージキューを使用しません。MySQLテーブルを使用してタスクを格納するために独自にロールします。
- どのメッセージキューを使用する必要がありますか?ドロッパー?豆の木?他に何かありますか?
- バックエンドプロセッサをどのように実装する必要がありますか?PHPデーモンをフォークするのは良い考えですか、それとも単にトラブルを求めるだけですか?
私の現在の計画は、MultiTaskプラグインを使用するか、独自のMySQLテーブル実装の代わりにbeanstaldを使用するようにプラグインを編集することです。キュー内のジョブは、タスク名とパラメーターの配列で構成できます。PHPデーモンは、着信ジョブを監視し、それらを子スレッドの1つに渡します。は、指定されたパラメーターを使用してCakePHPタスクを実行するだけです。
これに関する意見、アドバイス、コメント、落とし穴、炎はありますか?