2011-09-05 4 views
5

Node.jsで長時間実行されるタスクを処理する最善の方法を理解しようとしています。 Node.jsで長時間実行されているプロセスは、ノードの単一スレッドの性質のため、良い考えではありません。RabbitMQとNode.jsを長時間実行するプロセスで使用したことがありますか?

私はので、私は間にウサギを持つ2台のノードサーバを有していると考えていたのRabbitMQの大ファンです:

Node.js Web Server <--> RabbitMQ <--> Node.js Backend Worker 

当然の考え方は、これまでのWebサーバーを遅くしないことです。私は通常、バックエンドサーバーをJavaに置き換えますが、私はそれをすべてJSにしています。

私はNodeプログラマではないので、これが良いアイデアか、それとも可能なのか分かりません。誰かがこれのような何かを試しましたか?

+0

私はちょうどバックエンドのワーカーJavaを作ったが、フロントにノードがあり、中央にウサギがある。 –

答えて

0

「長期実行プロセス」が意味することは、Node.JSをブロックするために、一度に多くの計算を行う必要があることです。 I/O(大まかに、コールバック引数をとるものを呼び出す)を実行すると、イベントループが発生します。

ほとんどの場合、I/Oをほとんど含まないWebサイトで行うことはほとんどありません。たとえば、データベースとの対話(I/O)。ファイルシステムからテンプレートを読み込む - I/O。

ダイアグラムのようにNode.JSプロセスが2つしかない場合は、各クライアントへの応答は次のようになります(ノードからのデータは、I/OではなくOKです)。とにかく(I/O時間に計算時間を加えた)長くかかるだろう。ただし、着信要求をシリアル化しないので、スループットが向上する可能性があります。一方、リクエストはRabbitMQでバックアップするだけで、より高いスループットをより高いレイテンシにすることができます。

また、/ more/moreバックエンドワーカーを実行して、リクエストをより速く処理する機会もあります。 Webサーバーだけで作業をしているが、Webサーバープロセスを実行し、nginxといっしょに負荷分散を行っても同様の効果が得られます。

+1

私が長時間走っているということは、バッチのインポートや処理に数時間かかって数時間かかることを意味します。これらはプロセスではなく、通常のユーザー要求によって必ず開始されます。私はJavaがより良い選択肢の原因だと思う:私は本当にうまくそれを知っている:)、Hadoop、そしてJavaは、JVMを吸う間、このようなもので良いです。私はRabbitMQがうまくいくのが好きです。なぜなら、後でNodeJSに戻すことができるからです。 –

関連する問題