2013-06-03 3 views
6

ノードのクラスタAPIとmongooseを使用して、ノードのワーカーキューを書き始めています。nodejsのワーカーキュー?

私は、既にこれを行うが、redisとフォークを使用して、多くのlibsが存在することに気付きました。クラスターAPIを使用するのと比べて、フォークするのが良い理由はありますか?

を編集していますが、これもわかります:https://github.com/xk/node-threads-a-gogo - あまりにも多くのオプション!

私はすでにmongoを使用しているので、私は混合物にredisを追加しません。また、私の要件は非常に緩い、私は永続性が欲しいですが、最初のバージョンのためにそれなしで行くことができます。

質問の第2部: 今日最も安定した/使用されているのはnodejsワーカーキューライブラリですか?

+1

これらの多くは、おそらくClusterが利用できないときに開始されたか、まだ「実験的」とマークされているため、使用しないことを好みます。クラスタとドメインを持つワーカー・キューの実装は、forkメソッドよりも優れている可能性があります。 –

+0

stable/usedワーカーキュー:zeroMQ –

+0

zeromqのnodejsバインディングはありません。ノードサポート付きのlibを探しています。理想的には別のサーバーは必要ありません。軽いもの。 – mkoryak

答えて

5

これに従うことを望んでいました。私の解決策は、私のクラスター労働者の一部が雇用労働者に専念している(つまり、仕事に取り組むためのコードを持っている)、あなた自身のクラスターインプットを巻き起こすことになった。

ジョブスケジューリングにagendaを使用します。

Cronタイプのジョブは、クラスタマスターによってスケジュールされます。残りのジョブは、必要に応じて非ワーカークラスタで作成されます。

これまで私はkueを使っていましたが、私のアプリケーションの残りの部分はmongodbを使用していたので、それを削除しました。ジョブスケジューリングのためだけにredisを使用する必要はありませんでした。

4

私は個人的にクラスタマスターに部分的です。

https://github.com/isaacs/cluster-master

、それは非常に少ないのほかに、あなたのプロセスをフォークするためのロジックを追加し、あなたが実行しているプロセスの数を管理する能力、そして少しを与えないので、私はクラスタマスターが好きな理由がありますロギング/回復のブート!私は過度に肥大化したプロセス管理ライブラリが不安定になる傾向があり、場合によっては処理が遅くなることもあります。

以下に該当する場合、このライブラリはあなたのために良いだろう。

  • あなたのモジュールは、あなたが
  • イベントをトリガするイベントの異なる種類の膨大な量を持っていない
  • 大部分は非同期ですその火災には少量の作業がありますが、同様のイベント(Webサーバなど)がたくさんあります。

上記の理由のために、threads-ag逆の理由から、あなたのために良いことがあります。あなたのコードにいくつかのスポットがあり、あなたのイベントループの中でたくさんの作業が必要な場合は、thread-a-gogoのようなものが、この作業のために特に「スレッド」を起動するようなものです。事前にどれくらい多くの労働者が産卵するのだろうか。注:多くのプロセスを起動すると、実際にはうまくいかないかもしれませんが、私は逃げ出します。

要約すると、モジュールが既にほとんど非同期である場合、本当に必要なのはワーカー・プールです。プロセスがイベントをリッスンしていないときの停止時間を最小限に抑え、使用できるプロセッサの量を最大限にする。あなたが非常にビジーな同期呼び出しを持たない限り、単一のノードイベントループは、プロセッサの単一のコアでさえも問題を抱えます。このような状況下では、クラスタマスターを使うのが最良です。私がお勧めするのは、少しベンチマークを行い、あなたのプログラムが "最悪のシナリオ"の下でどれくらいのコアを使用できるかを見ることです。これが1つのコアの33%であるとしましょう。クアッドコアマシンを使用している場合は、クラスタマスターに12人のワーカーを立ち上げるように指示します。

これが役に立った!

+1

私の現在のユニークな状況にはかなり基本的で完璧ですが、将来のサーチャーのために...それは放棄されました。 –