2012-02-22 9 views
6

数十台のマシンの分散ビデオエンコーディングクラスタを構築しようとしています。以前はメッセージング・キューを使ったことはありませんでしたが、私が始めたのはGearmanとBeanstalkdでした。分散ビデオエンコーディング - Gearman vs Beanstalkd

Beanstalkは、Gearmanよりもはるかに簡単で使いやすいと思われますが、豊富な機能ではありません。

私が理解していないことは、どのようにすべてのサーバーに新しいワーカーを育てるのですか?私はPHPを使用する予定です。 CLIでworker.phpを "&"で実行するだけで簡単ですか?仕事を待っていますか?

ジョブが完了した後、gearmanが実際にプロセスを強制終了しないことに気付きましたが、Beanstalkはそうしています。したがって、すべてのサーバーのすべてのジョブの後でスクリプトを再起動する必要があります。

現在豆の木を使用してイムは、より傾斜、私は計画的なものの一般的な流れをした

ラン実行されている労働者の事前定義された量があるかどうかをチェックし、各サーバー上で細かくcronを。それ以下であれば、新しいワーカープロセスを生み出すことができます。各プロセスはおよそ2〜30分かかります。

おそらく私はここに私の論理に欠陥がありますか?これを行う「より良い」または「適切な」方法は何かを教えてください。

+0

Pheanstalkを必ずチェックしてください:https://github.com/pda/pheanstalk –

+0

私の考えは否定できないが、これらの2つのメッセージングフレームワークのどちらを使っても、「サーバー」はどこにインストールされますか?オフロードされたプロセスを処理するリモートマシン、またはリモートマシンに新しいジョブを通知するマシンでは、 – ariestav

+0

これらのサービスを使用するには高価すぎます。 –

答えて

0

用語私はちょっと試してみてください... プロデューサーとコンシューマーのコンセプトがあります。プロデューサは、キューに置かれたジョブ(すなわち、ビーンストーク・サービス)を生成し、その後、消費者によって読み取られる。

消費者に書き込む方法は複数あります。タスクを実行するcronジョブを介してx時間フレームごとに行うこともできますし、php(または何を持っているか)を介して消費者をwhileループで実行させることもできます。

サービスをインストールする場所は、実際にあなたが行っていることに依存しています。私にとっては、通常、コンシューマーまたは別のボックスにサービスをインストールします(必要に応じて後者が過度に使用されることがあります)。

キュー側で耐久性が必要な場合は、Beanstalkのbinlogパラメータ(-b)を使用する必要があります。 Beanstalkサービスに何か問題が発生した場合、キュー内のデータが最小限に失われた状態で再起動できます(情報がない場合)。プロデューサ側の耐久性は、複数のキューを試してみることになります。