Node.jsサーバーを使用して、メインプロセスではなく、委任されたワーカープロセスです。これらのワーカープロセスは、Node.jsサーバ自体でも、Node.jsのIPC経由で通信する子プロセスでもかまいません。"Node.jsによるダイレクトレスポンス" - 異なるNode.jsプロセスによるHTTPレスポンスの送信(メインプロセスと異なる)
クラスタコアモジュールhttps://nodejs.org/api/cluster.htmlは、そのモデルではすべてのワーカーが同じポートでリッスンしているため、マスタープロセスに代わってすべての要求を処理するので、私がやりたいことはできません。私が探しているのは、すべてのHTTPリクエストに応答し、認証を行い、いくつかのリクエストを処理するNode.jsプロセスですが、データ集約型またはCPU集中型のリクエストをワーカー・プールに委任することもできます。
大量のデータ、たとえば2〜3MBのGETリクエストがあるとします。
- メインプロセスは、要求を受信した大量のデータのためのデータベースを要求し、その後リクエスタに戻ってデータを送信する:
我々は、少なくとも3つの可能なシナリオを持っています。
- メインプロセスは要求を受信し、IPCを使用してワーカープロセスにデータを送信し、ワーカーはDBからデータを取得して重い操作を行い、次にワーカーはIPCを使用して3MBのデータをすべてメインに戻しますプロセスは、応答を返送します。
- メインプロセスが要求を受信し、要求ストリームに関する情報をできるだけ少量でワーカーに送信します。ワーカーはすべての作業を行い、ワーカーはHTTP応答を返します。
私は特に#3を作ることに興味があります。
シナリオ3の簡単な描写は以下の通りです:
(ただ、明確にするために、私は1つの要求のために3つの応答をしたくない、私はちょうどおそらく労働者ができたことを示すためにしようとしていますメインプロセスの代わりに応答を送信する)。
これはNode.jsでどのように動作するのでしょうか。どのように他の言語で動作する可能性がありますか?通常、Node.jsの同時実行モデルには問題はありませんが、いくつかのタイプのデータでは、クラスタモジュールを使用することはおそらく最高レベルの並行性を実現する最良の方法ではありません。
このモデルの用語の1つは「直接応答」です。これは、作業者が要求に直接応答することを意味します。そしておそらく、単にクラスタコアモジュールhttps://nodejs.org/api/cluster.htmlをこのために使用することは可能です。
私は多少似たようなアイディアを持っていましたが、広範囲の検索の後に、これを使って達成しようとしているが、アプリ全体を回転させることなく、ロードバランサとしてnginxを使用しました。私は誰にも何かがある場合、ソリューションについても知っていることに興味があります。 – shriek
確かに、cluster.setupMasterは私がしたいことをすることができるかもしれませんが、私はまだ分かりません、https://nodejs.org/api/cluster.html#cluster_cluster_setupmaster_settings –
を参照してください。受け入れられた答えはこちら:http://stackoverflow.com/questions/23771516/using-cluster-in-a-node-module/24463511#comment59142347_24463511 –