2017-09-11 9 views
2

私はフロントエンドクライアントからのリクエストに応答するサーバーサイドnodejs expressアプリを持っています。私は毎時間実行されるバッチジョブを実装する必要があります。同じサービスでバッチジョブを実装すると、cronジョブが完了して要求を処理できなくなるまでサービスが「占有」されていることを意味しますか? 代わりに、バッチジョブを実行する別のサービスを作成する必要がありますか?Nodejsとバッチジョブ

+0

エクスプレスアプリと同じスレッドで実行すると、有効である間にすべてのリクエストをブロックします。ただし、バッチジョブを処理する子プロセスを生成して、メインスレッドに影響を与えることはありません。 – Sirko

+0

ok。それは理にかなっている。 しかし、アプリケーションのインスタンスが複数ある場合は、バッチジョブのインスタンスも複数存在しますか?つまり、実行している同じバッチジョブがいくつか実行されます。これは嫌です。 (バッチジョブは、基本的にファイルからデータを読み取り、それを私のdbに保存しています)。 私の理解は正しいですか? – sand

答えて

2

バッチジョブがCPU 100%を占有していない場合、サーバーは依然として要求を処理します。 async ioを実行するか、タイマーを待つたびに、エクスプレスルートルーチンがリクエストに対処するのに十分な時間があります。

あなたの仕事とサーバーが何をしているのか分かりませんが、それをSeparation of Concernsから見てください。ジョブスケジューラとサーバーが一緒に属している場合は、それらを一緒に実装します。それ以外の場合は、2つのサービスを作成することをお勧めします。

+0

私のサービスは、バッチジョブがそのデータベースに置くデータを使用します。 私はノードがシングルスレッドなので、バッチ/ cronジョブが終了するまでプロセッサが占有されるという印象を受けました。 – sand

+0

たとえば、https://stackoverflow.com/questions/17959663/why-is-node-js-single-threadedをご覧ください。シングルスレッド - 特にES6の非同期/待機で - マルチスレッドよりも開発がはるかに高速です。 – CFrei

関連する問題