2012-02-14 5 views
1

特定の間隔でいくつかのデータフォームWebを収集し、次にそれらのデータを解析し、最後に解析結果の専用サービスを実行するサービスを構築しようとしています。サービスの実行の典型的な概略図:リモートサーバ上のPHPでスクリプト実行のマネージャを実装する方法

  1. 要求項目リストは、列挙された項目の
  2. ダウンロードデータに更新される、まだ更新されていないものを
  3. チェック
  4. アップデートデータベース
  5. アップデートが含まれてい
  6. フィルタデータは、(取得
  7. 更新プログラムを解析するための手順を実行します。
  8. 更新プログラムが含まれているデータをフィルタリングします更新されるので、多くのデータが存在しない場合ウェアITY更新)
  9. 解析するためのいくつかの手順を実行し... ... ...

すべてがシンプルになります。 更新されるデータは非常に多くあり、1秒から8秒(1以外にも)のスクリプトが60秒の実行時間の制限のために失敗するようになります。このオプションを増やすオプションがあったとしても、このプロジェクトの主な目的は最優先のデータを最初に配信することであるため、最適ではありません。情報の優先レベルを定義することは、すべてのデータの大半を取得し、すでに格納されているデータと受信(更新)データを大量に比較することに基づいています。

私はサービスのスピードを辞めて、少なくとも優先度の高い更新を取得し、他のすべての時間はもっと長く待つことができます。 サービスのすべてのステップ(1〜8)を制御する親スクリプト(マネージャ)を作成することを考えました。 マネージャは未完了のステップ(スクリプト)を再開して完了させる必要があります。このようにして、コードの一部を実行し、終了後にSQL DBで行われたようにこの小さな部分をマークするように、すべてのステップを記述することができます。マネージャの再開後、ステップ(スクリプト)は、最大execを超過したためにサーバによって終了されたポイントを形成し続けます。時間。

既知のプラットフォームの制限: リモートサーバー、不変の最大の実行時間は、通常、同時にひとつのスクリプトを解析するために多くのApacheの機能へのアクセスの欠如を制限し、リモートサーバー

に典型的な他のすべての制限要件: 特定のスクリプトを呼び出すだけでなく、この親プロセスは、起動されたスクリプトに関するいくつかのメモを書き込む必要があります。

マネージャはcrulによって呼び出すことができますが、1分間隔で十分です。不運なことに、サービスのすべてのステップへの呼び出しのリストをカールさせることは、ここではオプションではありません。

また、私はサービスのすべてのステップで新しいリモートホストを取得し、それらを呼び出すことができる別のリモートホストによってそれらを制御し、すなわちSOAPを使用してジョブを実行することを考えましたが、このシナリオは、それは最大の実行時間の問題を解決しないし、グローバルネット魔女の上で多くのデータ交換をもたらすため、データを処理する最も遅い方法です。

ソリューションの実装方法についてのご意見はありますか?

答えて

0

手順2と3が60秒以上実行できる方法はありません。手順2でcurl_multi_execを使用すると、秒単位で実行されます。手順3で60秒以上スクリプトを取得している場合は、代わりに「メモリ制限を超過しました」と表示されます。

私は結論に至りました。スクリプトはです。は最適化されていません。そして、解決策は次のようになりまで:

  1. ブレーク中の(a)(何を更新するためのフラグ1、0ものではないと言うために)更新し、データベースにそのを保存するためにどのような仕事。 (b)更新が必要な行を循環させ、フラグを0に設定します。〜50秒でシャットダウンします(スクリプトが数分おきに実行されると仮定すると動作します)。

  2. 2台目のサーバーを用意し、適切な実行時間を設定してスクリプトを何時間も実行してください。最初のデータベースにアクセスできるので(http呼び出しではなく)、トラフィックが大幅に増加することはありません。

関連する問題