2011-10-11 12 views
12

最近、私はPHPでBeanstalkdの使用を研究してきました。私はBeanstalkdと(例えばlibeventなど)すべての依存関係をインストールPHPでBeanstalkdを設定する方法

  1. :私はここに

    が、私はそれが働いて見る方法であるなど、かなりのことを学びましたが、サーバー上のセットアップに関するいくつかの質問を持ってきました私のUbuntuサーバーで。私はBeanstalkdデーモンを起動します(これは基本的には常に実行する必要があります)。

  2. 私のウェブサイトのどこか(ユーザーが何らかの行動をするときなど)は、Beanstalkdキュー内のさまざまなチューブに追加されます。
  3. 私は基本的にPHPスクリプトを実行するデーモンとして実行されるbashスクリプト(以下のようなもの)を持っています。

    #!/bin/sh 
    php worker.php 
    

4)労働者のスクリプトがキューに入れられたタスクを実行するために、このような何かを持っているでしょう。今ここに

while(1) { 
    $job = $this->pheanstalk->watch('test')->ignore('default')->reserve(); 
    $job_encoded = json_decode($job->getData(), false); 
    $done_jobs[] = $job_encoded; 
    $this->log('job:'.print_r($job_encoded, 1)); 
    $this->pheanstalk->delete($job); 
} 

は、(上記の設定に基づいて、私の質問です私なら、私を修正しました私はそれについて間違っている):

  1. 私はRSSフィードをデータベースなどにインポートする作業があります。 10人のユーザーがこれを一度に行うと、それらはすべて「テスト」チューブにキューイングされます。しかし、彼らは一度に1つだけ実行されます。同時に10個の異なるチューブをすべて実行する方が良いでしょうか?

  2. さらにチューブが必要な場合は、10個のワーカースクリプトが必要になることもありますか? watch()関数内の文字列リテラルを除いて、基本的に同じコードで同時に実行される各チューブ用のものです。

  3. このスクリプトをデーモンとして実行すると、どのように動作しますか?それは常にworker.phpスクリプトを実行していますか?そのスクリプトは、キューが理論的に空になるまでループします。デーモンはworker.phpの実行頻度をどのように決定しますか?それは単なる設定ですか?

ありがとう!

答えて

5
  1. 作業者がフィードを取得するのに時間がかかりすぎない場合は、問題ありません。一度に複数のプロセスを処理する必要がある場合は、複数のワーカーを実行できます。私はシステムを持っています(現在はAmazon SQSを使用していますが、以前はBeanstalkDと似ていました)。
  2. 1つのワーカースクリプト(同じスクリプトが複数回実行されている)はうまくいくはずです - スクリプトは複数のチューブを同時に見ることができ、利用可能な最初のものが予約されます。 job-statコマンドを使用して、特定の$ジョブがどこから来たのか(チューブ)を知ることができます。また、それぞれのタイプを別のメッセージと区別する必要がある場合は、メタ情報をメッセージに追加することもできます。
  3. 労働者を雇う良い例はdescribed hereです。また、supervisord(また、useful post)を追加して、マシンごとに多数のワーカーを簡単に起動して実行できるようにしました(シェルスクリプトはfirst linkのように実行します)。私はそれがループする回数を制限し、また、数秒間待つか、または次の仕事が停止しないタイトなループで制御不能にならずに利用できるようにするために、数字をreserve()に入れますたとえ何もすることがなかったとしても。

補遺:あなたが必要として

  1. シェルスクリプトを何回も実行されます。 (リンクには、exec [email protected]で必要に応じて再実行する方法が示されています)。 PHPスクリプトが終了するたびに、PHPが再実行されます。
  2. 明らかにいくつかの統計情報を表示するDjanjoアプリがありますが、デーモンに接続してチューブの一覧を取得し、各チューブの統計情報を取得するだけでも問題ありません。
+0

リンクありがとうございます!私は間違いなくそれらを調べます。 #2についての質問:そのスクリプトはどれくらいの頻度で実行されますか?これは、デーモンによってbashスクリプトが実行される頻度に完全に基づいていますか? – joshholat

+0

また、Beanstalkを使って実行していることを確認するための便利な方法(コードスニペットや「ダッシュボード」タイプのもの)がありますか? – joshholat

+1

ほとんどの/すべてのライブラリは、stats、list-tubes、およびstat-tubesコマンドを呼び出す必要があります。他にもいくつかあります。私はhttps://github.com/andreisavu/django-jackが走っているのを見たことがありませんでしたが、それもいくつかのことをすることができます。 –

関連する問題