3

私は以前、Gearman とスーパーバイザーを使用してジョブを管理していました。

この場合、Amazon SQS を使用しています。

画像処理サーバーとして使用するために、メイン Web サーバーとは別のマイクロ インスタンスをセットアップしました (現時点では純粋にテスト用です。この実装が稼働する前に、アップグレードしてクラスターの一部になる予定です)。

このマイクロ インスタンスには、画像処理を実行するために PHP と ImageMagick をインストールしました。

また、Amazon SQS からメッセージを受け取るワーカー スクリプトも作成しました。

すべてが完全に機能しますが、メッセージを継続的にチェックするには、このスクリプトを何度も実行する必要があります。

私は連続ループを実行するという考えが好きではないので、他の方法を検討し始めましたが、ほとんど成功していません。

だから私の質問は、これを行うためのベストプラクティスの方法と一般的に考えられているものは何ですか?

PHP は実際にはこのように設計されていないため、メモリが心配です。そのため、スクリプトをしばらく実行してから、停止して再起動するのが最善の策かもしれません。

スーパーバイザーを使用した経験があり (ギアマン ワーカーが実行され続けていることを確認するため)、単純な php スクリプトを何度も継続的に実行するためにそれを使用できるかどうか疑問に思っていますか?

私の考えは次のとおりです。

  • スクリプトが 20 秒間チェックするように SQS ロング ポーリングを設定します。
  • このスクリプトを一度に約 1 時間実行し続けるには、20 秒のスリープで while ループを使用します。
  • これをすべてスーパバイザに実行させます。時間になり、ループが完了したら、スクリプトを終了させます。
  • その後、スーパーバイザーは自動的に再起動する必要があります

これは実行可能に聞こえますか?より良い方法はありますか?PHP で SQS メッセージを受信するためのベストプラクティスと一般的に考えられているものは何ですか?

前もって感謝します

4

1 に答える 1

1

で、コマンドを何度も実行するように設定supervisordできます。参照: http://supervisord.org/configuration.html#program-x-section-settingsautorestarttrue

全体として、無限 while ループを使用してもまったく問題ありません。正しく記述されていれば、PHP はオブジェクトを正しく解放し、メモリを抑制します。リークなしで何年も実行できます (リークがある場合は、おそらく自分で作成したので、コードを確認してください)。

制御しているプログラムを強制終了せずに Supervisord プロセスを停止するにはどうすればよいですか? 興味があるかもしれません。OPには自動再起動を備えた同様のセットアップがあり、グレースフルシャットダウンを追加したいと考えていました。

于 2013-11-30T11:17:22.723 に答える