2016-08-21 3 views
0

私はのNode.jsアプリケーションは、次のタスクを実行IOTプロジェクトに取り組んでいます:非同期メッセージングライブラリを使用してメッセージの

1.読書ストリームを(IOバウンド)
2.機械学習、Webサービスへのメッセージの送信Node.jsアプリケーションによって送信されたメッセージに基づいて発生します(APIコールのみが関与するIOバウンド)3. Webサービスから機械学習の結果として生成されたパターンを受信します(REST APIを使用) 4.複雑なアルゴリズムがパターンマッチングに関わっているため、CPUは集中的です。
5.スタックトレースのロギング(IOバウンド)IOバインドされたタスクとCPUバインドタスクを持つNode.jsアプリケーションのクラスタリング/スポーリングの子プロセスのテクニックを適用するにはどうすればよいですか?

node.jsアプリケーションは、デフォルトではシングルスレッドで実行される別々のタスクとしてこれらの機能を持つように開発されています。実際には、子プロセスを生成することはCPU集中型タスクにのみ有効です。node.jsプロセスのクラスタリングを行う方法はIOタスクとCPUバインドタスクの両方を処理しますか?このnode.jsアプリケーションでクラスタリングを部分的に実行する必要がありますか?

誰でもこのnode.jsアプリケーションの効果的なアーキテクチャを提案できますか?

答えて

1

CPUを大量に使用するタスクがある場合は、すべての要求に対してクラスタリングを使用します。

クラスタ化されたプロセスもI/Oを集中的に処理しているという事実はあなたを傷つけることはありませんが、CPUを集中的に使用するためのクラスタ化プロセスが必要です。だから、サーバーをクラスタ化して、各クラスタに要求の全負荷(I/OとCPUの両方)を処理させてください。

CPU集約型のものは、クラスタリングの主なドライバです。クラスタ化されたプロセスが非ブロッキングI/Oも実行している場合は、何も問題ありません。実際には、使用可能なCPU数までクラスタリングすることで、負荷の高い状況でもI/Oバウンド処理を支援することができます(ただし、CPU集約的な処理ほどほとんど助けられません)。


これは、複雑な実装でも可能ですが、リクエスト処理のCPU集約部分のみに子プロセスを使用することです。その場合、キュー内で操作を実行するための作業キューと子プロセスのセットを作成し、マスタープロセスはタスクをキューから各子プロセスに配布します。このスキームを使用すると、作業キューを介して実行されるコードとメインプロセスに残るコードを正確に決めることができます。ただし、プロセス間通信を使用して2つのコードを調整する必要があります。

関連する問題