1

バックグラウンド:

私は現在、PHPで書かれたデーモンを持っています。私が書いたとき、PHPがこの問題の最善の解決策ではないことを知っていましたが、それは当時私がアクセスできたものであり、私が行っていることはPHPを理想以上のものにします。

実際、私はPHPで2つのデーモンを使用しています。どちらも、set_time_limit(0)を使用した単純なwhile(true)ループです。一方はもう一方よりもクラッシュするのが好きで(クラッシュした場合に再起動するcronがあるので問題ありません)、ネットワークアクティビティが増加したためだと思います。

とにかく、デーモン:

デーモン1:このデーモンは、外部サーバーからの情報を要求し、そのデータ(約10以上のforeach)を非常に激しくループして、データベースに挿入します。これは24時間年中無休で行っています。このデーモンが毎日午後11時59分に実行されていることが重要です。

デーモン2:このデーモンは同じデータを要求します。ただし、これが見つかった特定のデータに作用する場合はそのデータをループし、そうする場合は外部ネットワーク要求を行います。このようなリクエストはかなり頻繁に行われます。正常に実行されている場合は、おそらく数分に1回程度です(クラッシュして再起動またはフリーズする必要がある場合は、要求が蓄積されます。)このデーモンは絶対にクラッシュするのが大好きです。ただし、クラッシュは問題ありません。このデーモンはまた、動作を再開するために強制終了する必要がある場所でフリーズするのが好きです。

問題:

同じデータを2回(現在はスクリプトごとに1秒あたり2回のように)要求するのは非常に非効率的です。両方を1つのデーモンにマージする必要があります。ただし、デーモン1は重要であり、その役割を果たしている必要があります。マージ後にさらにバグのあるデーモンがデーモンをクラッシュさせる場合、問題が発生する可能性があります。

だから、質問:

スクリプトの外部でリクエストを行うための新しいデーモンを作成できると思います。つまり、新しいデーモンがネットワーク要求を行う必要がある場合(スクリプトの速度が大幅に低下し、問題が増える可能性があります)、別のスクリプトを呼び出します(メインスクリプトをブロックしません)。したがって、たとえば、新しいデーモンは20のネットワーク要求を行う必要があり、別のスクリプトを呼び出してそれらを処理することにより、それらの20の要求をすべて同時に送信できます。これはデーモンからの作業を取り、クラッシュが少なくなる可能性が高く、同じデータを2回要求する必要はありません。

4

0 に答える 0