8

私は大量のトラフィックを受信するPHPWebインターフェースに取り組んでいます。一部の挿入/更新リクエストには、さらに取得を高速化するためにいくつかの一般的なサイズにサイズ変更する必要がある画像が含まれます。

これを行う1つの方法は、おそらくサーバー上に非同期キューを設定することです。例えば。PHPリクエストが入力されるタスクキューを使用してデータベースにテーブルを設定し、サーバー上の他のプロセスがテーブルを監視し、待機中のタスクを処理できるようにします。どのようにそれをしますか?その長時間実行されるプロセスに適した環境は何でしょうか?Java、または多分もっと軽い何かがするだろうか?

4

5 に答える 5

14

あなたがしていることが本当に大量であるなら、あなたが探しているのはbeanstalkdのようなものです。分散型ワークキュープロセッサです。あなたはただ仕事を待ち行列に入れて、それからそれを忘れます。

もちろん、もう一方の端でキューを読み取って作業を処理するものが必要です。これを行うには複数の方法があります。

最も簡単なのは、ワークキューを読み取って要求を処理するのに十分な頻度で実行されるcronジョブを用意することです。または、作業が利用可能になることによってウェイクアップされる、ある種の永続デーモンプロセスを使用することもできます。

この種のアプローチの利点は、実行する必要のある作業量に合わせてワーカーの数を調整でき、beanstalkdが分散処理を処理できることです(リスナーが異なるマシン上にいる可能性があるという意味で)。

于 2009-04-04T15:23:25.137 に答える
2

キューテーブルをチェックするcronタスクを設定できます。キューで待機しているアクションを処理するスクリプトは、たとえばphpで記述できるため、実装言語を変更する必要はありません。

于 2009-04-04T15:25:45.320 に答える
2

一定期間「スリープ」し、データベースで処理するアイテムをチェックするデーモンを作成する必要があります。処理するアイテムが見つかると、それらを処理し、完了したらすぐに再度チェックし、それ以上ない場合はスリープします。PHP を含む任意の言語でデーモンを作成できます。

または、PHP にスクリプトを実行させて続行することもできます。続行する前に PHP がスクリプトの終了を待たないように、スクリプトをバックグラウンドで実行します。

exec("nohup /usr/bin/php -f /path/to/script/script.php > /dev/null 2>&1 &");

キューイングがないため、バックグラウンドで実行されているプロセスが多すぎる可能性があるため、注意する必要があります。

于 2009-04-04T23:10:58.773 に答える
2

私はbeanstalkdと組み合わせて長時間実行するプロセスにPerlを使用しています。良い点は、Perl 用の Beanstalkd クライアントにはブロッキング予約メソッドがあることです。このようにして、何もすることがないときはほとんど CPU 時間を使用しません。ただし、ジョブを実行する必要がある場合は、自動的に処理を開始します。非常に効率的です。

于 2009-04-07T01:22:37.537 に答える
1

IronWorkerのようなサービスを使用してバックグラウンドで画像処理を行い、サーバーの負荷を軽減できます。これはサービスであるため、何も管理したり設定したりする必要はなく、成長に合わせてスケーリングされるため、1 つの画像を処理できれば、手間をかけずに何百万もの画像にスケーリングできます。

一連の画像処理変換を行う方法に関する記事は次のとおりです。

http://dev.iron.io/solutions/image-processing/

例は Ruby で書かれていますが、PHP でも同じことを簡単に行うことができます。

于 2012-05-31T21:36:13.817 に答える