質問

非常に多くのメディア処理 (画像、ビデオ) や電子メール出力などを伴う大規模なプロジェクトが間もなく予定されています。通常、これらのものは "email_queue" というテーブルに入れられ、cron を使用してスクリプトはテーブル内のキューを処理します。

私は Beanstalkd のような Message Queue システムをよく読んでおり、セットアップもしました。使いやすくてよかったですが、問題は何かが足りないかどうかわからないことです。

誰かがテーブルや CRON ではなくキュー システムを使用する利点を詳しく説明してもらえますか?実際には見えないので、それらが何なのかを見ることができません。

ありがとう

役に立ちましたか?

解決

メッセージキュー(分散型1は、少なくとも、例えば RabbitMQののは)あなたの全体の仕事を配布する機能を提供します物理ノード。あなたはまだ仕事をデキューし、それを処理するために、各ノード上のプロセスを持っている必要があります。

これは、私が推測する要件に応じて、最終的に降ります。あなたがメッセージキューを使用してスケールで、より管理しやすいソリューションを実現することができます。あなたがより簡単にノードを切り離すことができます。

もちろん、そこに学習曲線である...ので、それが再びターゲット目標に戻ってきます。

<時間>

あなたは、実装を変更したい(と場合)まで、各ノード上で、あなたがまだあなたのcron / dbテーブルを再利用できることに注意してください。 をするとき、あなたができることは、デカップリングについて何素晴らしいことだの。

他のヒント

違い:

  1. メッセージがキューに追加されると、すぐに配信できます。したがって、cron が通常 5 分ごとに実行される場合は、キューを使用することで処理を高速化できます。

  2. キュー システムがトランザクションをサポートしている場合、処理が失敗した場合にメッセージが自動的に再配信されます。

  3. キューに何が入っているかをクエリするのは難しい場合があります。データベース テーブルには、優れた検索方法 (SQL) があります。

  4. 複数のサーバー、プロセス、スレッドがメッセージを処理している場合、キュー システムはメッセージがそのうちの 1 つにのみ配信されるようにします。DB テーブルの場合、アプリケーション コード (ロック、フラグなど) を介してこれを処理する必要があります。

まず、キューは、多くの場合、実際のDBのテーブルが付いていて、メッセージの耐久性を維持することができます。それはさておき、キューはスタートは非常に強力ですから、あなたはその原理に設計した場合に非同期的に実行する必要がある作業を、オフに突き出すする自然な方法があります。

テーブル(エンティティ)は、ハードの列(属性)のセットがあり、この表の両方がキューと同様に構成するレコードのセットで構成されているあなたが採用されているもののリスト以外の何物でもないという事実以外にキューとして-テーブル正式なキューとして、あなたは定期的(クーロン)に基づきポーリングそれをしているだけのこと。

MQSは、一般的に、メッセージ自体(あなたがまたは次のものを得るためにあなたのSQLでこれをやっていてもいなくてもよい)へのアクセスを同期化するのに、別の気の利いた機能を追加します。

私は、イベントベースとしてPOLLベースとしてクーロン/テーブル機構を検討したいと思うとMQます。

私の意見では、キューののの利点は、それがsync'ing、ステータス更新の世話をするということです。 MQSは、消費者やリスナーのグループにメッセージを(トピック)「を放送する」または利用可能にするように設定することができます。

非同期しかしMQSは、おそらくあなたのcronウィンドウの間で動作します。どのようにあなたがあなたのテーブルに処理するメッセージの数は、次のcronジョブを実行する前に達成し、前の仕事にステップしようとすることができることを知っていますか?

MQのための

複数の消費者は、あなたが合うようにあなたが仕事を拡張することができます。あなたはload average(OS」プロセス・キュー内にちょうど同じ)はあなたが好きよりも大きいことを見た場合は、上記の例では、メトリックの需要として上とオフラインそれを持って来る規定言っ負荷を処理するために別の消費者は、ことができます。

MQSは、(いくつかのキューが他のディスクに永続メモリに残ることができる)、このようなメッセージの優先順位および性能のような異なる動作パラメータを有するように設定することができます。

の欠点は、キューが時々照会とメトリックを取得するためにどののためにするのは難しいことができること(すでに述べたように)ことです。私はいつも、私は自分がSQLでキューを見ることができるように、DBのバッキングストアを持っているMQシステムを見つけます。

これはかなり頻繁に尋ねます、そしてあなたは、データベースに慣れている場合MQを行くために説得力のある理由は、通常はありません。 ここでは一例スレッドですのます。

私のテイクは、あなたのデータ要件は、あなたが事のcronのではなく、タイマーとプロセスならそうである非常に高いボリューム、含まれない限り、あなたは学習曲線を避けたいと思うかもしれないということである(タイマーとはるかに少ない複数のプロセスを。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top