0

私は、Node.js アプリケーションが次のタスクを実行する IOT プロジェクトに取り組んでい

ます
。 Node.js アプリケーションから送信 (API 呼び出しのみが関与するため IO バウンド)
3. Web サービスから機械学習の結果として生成されたパターンを受信 (REST API を使用) 4. パターンをリアルタイム ストリーミング メッセージと比較 (CPUパターン マッチングには複雑なアルゴリズムが含まれるため、負荷が高くなります)。
5. スタック トレースのログ記録 (IO バウンド)

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

この node.js アプリケーションの効果的なアーキテクチャを提案してくれる人はいますか?

4

1 に答える 1

1

CPU を集中的に使用するタスクがある場合は、すべてのリクエストに対してクラスタリングを使用してください。

クラスター化されたプロセスが I/O を集中的に処理しているという事実は問題にはなりませんが、CPU を集中的に使用する処理にはクラスター化されたプロセスが必要になります。したがって、サーバーをクラスター化して、各クラスターがリクエストの全負荷 (I/O と CPU の両方) を処理できるようにします。

一言で言えば、CPU を集中的に使用するものは、クラスタリングの主な原動力です。クラスター化されたプロセスがノンブロッキング I/O を実行している場合でも、問題はありません。実際、使用可能な CPU の数までクラスタ化すると、高負荷の状況で I/O バウンドのプロセスを支援することさえできます (ただし、CPU を集中的に使用するプロセスほどには役立ちません)。


より複雑な実装になる可能性がありますが、別の方法として、子プロセスまたは新しいワーカー スレッドを、リクエスト処理の CPU 集中部分にのみ使用する方法があります。その場合、ある種のワーク キューと、キューで操作を実行するための一連の子プロセスまたはワーカー スレッドを作成し、マスター プロセスがキューから各子プロセスにタスクを分散します。このスキームを使用すると、ワーク キューを介して実行されるコードとメイン プロセスにとどまるコードを正確に決定できますが、何らかのプロセス間通信を使用して 2 つのコードを調整する必要があります。

于 2016-08-21T21:20:50.603 に答える