2016-06-17 17 views
0

独立した子プロセスで時間のかかるWebサービスを実行する方法の理解とコードアーキテクチャが必要です。より長い時間稼働するような種類のWebサービスを別の子プロセスで実行するとよいでしょうか。 Webサービスは、2000個のネストされたjsonオブジェクトのような最大の有料ロードを受け取り、数字はそれよりも少なくても少なくてもよく、データをフェッチしてデータベースに挿入します。以下は、アイデアを伝えるためのコードスニペットです。webserviceのコードをnode.jsの別の子プロセスで実行する

router.post('/longRunningWebservice', function (req, res) { 
    //for loop to iterate 2000 json objects 
    //it has some queries to insert data 
    //it has some if conditions to check 
    //and finally res.send() 
}); 

私が理解する必要があり、それは、よりスケーラブルに、また、他のコアを利用するために別の子プロセスでコードを実行したいです。

答えて

0
  1. 「{...} {...}他の場合(cluster.isMaster)」あなたのコード内のコード
  2. の初めにいくつかの労働者が別々の作業者の作業とマスタータスクを書くフォーク
  3. 作業者がデータを処理した後、IPCメッセージまたはredis pub/subメッセージを使用して、処理する必要のあるデータを作業者に送信します。

その他の注意事項:IPCその後、IPCとのcuzをあなただけのマスターと通信することができ、より良い場合

  • あなたは複数の労働者を設定し、ビジー状態であるかを決定することができますし、
  • Redisのパブ/サブではありません - あなたはマスターワーカーとワーカーとコミュニケーションをとることができます。
  • ベストプラクティスは、エラーや何かが発生した場合に労働者をフォークして迂回するだけのマスターをセットアップすることです。httpリクエストを処理する1人のワーカーとデータを処理する3人のワーカーを作成することもできます。 4つのプロセッサコアがある場合

さらなるアプローチ:すべて同じタスクを フォーク労働者(HTTPおよびデータ処理を扱う)、クラスタは自動的に、その代わりにforループの負荷ballanceを処理する単一のJSONオブジェクトを処理して自分自身を呼び出す再帰関数を作成しますデータ処理はイベントループをブロックせず、1人のワーカーが複数の要求を処理できます。簡単な方法

+0

Kailniris、説明のためにありがとう、Webサービスの一部の労働者をフォークし、別の労働者の仕事を書いたり、3点目に書いたような例を挙げてください。あなたが4つのプロセッサーコアを持っている場合など、データを処理する3つのワーカーを処理します。 "という例があれば、より明確な画像が得られます。ありがとう –

+0

私は、少し複雑すぎるアプローチを考えていますが、それはもっと複雑です。レディスや単にIPCメッセージングの使用を検討していますか? – kailniris

+0

私はredisを使用することを検討しましたが、この段階ではなく、私はredisとIPC、そしてこのクラスタリング/フォークにおいて非常に新しいです。私に例を教えてもらえればいいですね。もう一度ありがとうございます:) –

関連する問題