2017-02-27 5 views
0

PHPを使用してwebappモニタリングWebアプリケーションを作成しようとしています。私は、ウェブサイトの状態が変わったとき(例えば、「アップ」していたサイトが「ダウン」した場合)、異なるWebサイトからヘッダーを収集し、MySQLデータベースを更新するためにカールを使用しています。phpとcronによるスケールカール

私はcurl_multi(Rolling Curl Xのクラスを使用しています)を並列に20個のサイト(最速の結果が得られるようです)を処理するために使用しています.CURLOPT_NOBODYはヘッダーのみを収集しています。できるだけ速くするためにスクリプトを合理化します。

正常に動作しており、約40サイトを処理できます。 2〜4秒。私の計画は、毎分cronを使ってスクリプトを実行することでした...だから、毎分約600のWebサイトを処理できるように見えます。これは分では問題ありませんが、長期的には十分ではありません。

これをどのようにスケールすることができますか?複数のcronを並行して実行することは可能ですか?これはボトルネッキングの問題につながりますか?

私の頭の上では、データベースを400のグループに分割し、これらのグループに対して別々のスクリプトを実行できると思っていました(例えば、ids1-400,401-800,801-1200などを実行できます別々のスクリプト)、データベースの破損の危険はありません。この方法で、各スクリプトは1分以内に完了します。

しかし、curl_multiを実行している1つのスクリプトが20個の要求を同時に並列処理できるため、このように動作しない可能性があります。それでは、これはうまくいくのでしょうか?

答えて

0

はい、単純な解決策は、同じPHP CLIスクリプトを使用して、args 1と2を渡します。つまり、dbレコードを処理する最小範囲と最大範囲が各サイト情報を含んでいることを示します。

Ex。 crontabのリスト
* * * * * PHP 401 800

または単一のスクリプトを使用して/user/script.php /user/script.php 1 400
* * * * * PHP、あなたはマルチスレッドをトリガすることができます(PHPのpthreadsによるマルチスレッド化)。しかし、cronの間隔は、800サイトの完了のベンチマークに基づいている必要があります。

Ref:How can one use multi threading in PHP applications

Ex。スクリプトのマルチスレッドは3分で完了します。 その後、間隔を*/3として指定します。

+0

ありがとう - これは大きな助けです。私は "pthreads拡張子はWebサーバー環境では使用できません"という理由でpthreadsを使用できるとは思っていません。これはWebサーバー上にあります。 – Ryan