2015-10-06 13 views
7

私はこのトピックに触れる古い記事を見てきましたが、現代的なアプローチが何であるか知りたかったのです。NodeJSで長期実行プロセスを処理しますか?

使用例は次のとおりです。(1)長時間実行するタスク を60秒間、たとえば 、つまり、60秒間かかることがあります。 (2)タスクを細分することはできません。

その他の要件は次のとおりです。

  • は、タスクが実行中のタスク
  • 安定性を止めることができるように素敵な
  • を完了したときに知っておく必要があります:1つのタスクが死亡した場合、それがダウンすることはありません。サーバー
  • は、私はこれらのソリューションは言及を見てきました

同時要求の数百を処理できるようにする必要があります:

?また、nodejsがこのタイプのタスクに適していない場合、それも有効な答えです。

答えて

9

短い答えは:あなたがnodejs サーバーを意味するならば、答えはこのユースケースにはではありません

を依存します。 Nodejsのシングルスレッドイベントは、CPUバインドされたタスクを処理できないため、別のプロセスまたはスレッドに作業をアウトソースすることは理にかなっています。しかし、CPUバウンドのタスクを長時間実行されます。このユースケースのために、それはタスクをキューイングのいくつかの方法を見つけることは理にかなって...つまり、それは労働者のキューを使用する意味があります。

しかし、JSコード(jspm API)を実行しているのこの特定のユースケースのために、それはnodejsを使用するワーカーキューを使用する意味があります。したがって、解決策は次のとおりです。(1)ワーカー・キュー内のタスクをキューに入れるだけで動作するnodejsサーバーを使用する。 (2)nodejsワーカー・キュー(kueなど)を使用して実際の作業を行います。 clusterを使用して、異なるCPU間で作業を分散します。その結果、何百もの要求を処理できる簡単な、単一のサーバ(W/O窒息)です。 (まあ、ほとんど、下記の注を参照してください...)

注:

  • 上記の溶液がプロセスを使用しています。私はスレッド解決策を調査しなかった。なぜなら、これらのスレッドがノードのために好まれなくなったからだ。
  • ワーカーキュー+クラスタは、あなたにスレッドプールと同等のものを与えます。
  • いや、最悪の場合には、100番目の並列要求は、4コアマシン上で完了するために25分かかります。解決策は、(私は間違っていない場合---これは簡単ですkueのようにDB-裏打ちされた労働者のキューと、ちょうど同じDBへの各ポイントサーバーのポイントを作る)、別のワーカーキューサーバをスピンアップすることです。
4

あなたはCPUバウンドのタスクを言及していて、長時間実行一つは、それは間違いなく、Node.jsのことではありません。何百もの同時作業についても言及します。

あなたはそのようなもののためにGearman job serverのようなものを見てみるかもしれない - それは、専用のソリューションです。

また、Node.jsに依頼を管理しても、実際のジョブの実行はできません。

パフォーマンスが低下し、JavaScriptでコードを保持したい場合、RedisやRabbitMQのような何らかのジョブキューを用意する必要があります。

私は、ジョブキューに関係なく、あなたのランタイムの、長時間実行される、数百/秒のタスクのための必携の要件になると思います。他のサーバ/サービス/マシンでこのジョブを起動できる場合を除いて - Node.js APIはジョブクラスタのフロントおよび管理レイヤーに過ぎません。あなたはその仕事クラスターに集中する必要があり、あなたはより良い質問をすることができます。

ここではnode.jsが役に立つことはありますが、それはどこから来ているのかに応じて、何百ものタスクを管理して保持するのに役立ちます(つまり、特定のユーザーのジョブサーバー、他の人に「一時停止」機能を制限するなど

+0

http://neilk.net/blog/2013/04/30/why-you-should-use-nodejs-for-CPU-bound-tasks/を見ましたか? –

+0

ええ、それは不公平ではありません。それはたいてい生産的ではない。タスクが完了するまでに1分かかる場合、4コアマシンでパラレルで100本のビデオを実行すると、最後の要求が終了するまで25分待つことになります。時々それは大丈夫です、時々そうではありません。パフォーマンスが適切な場合は、よりパフォーマンスの高いツールを使用します。 – Zlatko

関連する問題