2013-06-05 7 views
21

node.jsスケーラブル、その意味は? node.jsサーバーのどの部分がスケーラブルであるか。私はそれがCPUリソースの多くを必要とするアプリケーションには適していないシングルスレッド技術だと読んでいます。これらの事実はスケーラビリティに適合しないので、それはどういう意味ですか?Node.jsをスケーラブルにするのはなぜですか?

+0

Duplicate of:[Scaling node.js](http://stackoverflow.com/questions/4710420/scaling-node-js) –

+0

@ Jasonテクニカルコーディングの回答を探しているわけではありません – vuvu

+1

この投稿は、負荷分散とレディスを含むスケーラビリティを強調しています。 –

答えて

15

ノードが実行するjavascriptはシングルスレッドですが、ネットワークやファイルなど、ノードで呼び出すことの多くがバックグラウンドスレッドで実行されます。基本的な概要については、この記事を参照してください。 Node is not single threaded

あなたがザラザラの詳細が必要な場合は、libuvになりますイベントにスレッドを変換する「魔法」の部分がループしている: http://nikhilm.github.io/uvbook/basics.html#event-loops

また、あなたが必要な場合はノード自体にCPUを多用するには、これを子プロセスに簡単に送ることができます - 詳細はhttp://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_optionsを参照してください。

+0

データベースからの読み取りや更新、ブロッキング、ノンブロッキングなどの操作ですか?これはRDBMSと同じです。あなたは、そのようなアプリケーションのためのNodeをお勧めしますか? – LearningToCode

2

ロードバランシングのためにスケーラビリティがあります。基本的には、ノードごとに複数のジョブを処理することができ、重大な負担をかけることなく処理できます。これによりスケーラビリティが向上します。

+6

ロードバランシングはどのように実現されていますか? – vuvu

3

これはスケーラブルではありません。 あなたがしているのは、何も特別なことをせずに(I/O)スケーラブルであることだけです。

I/Oは、実行スレッド間でデータを共有しないため、より安全で簡単に並列処理できます。 Node.jsを使用すると、シンプルでエレガントで使いやすいイベントプログラミングを使用して行うことができます。 GUIやゲームなどのグラフィカルなアプリケーションが長年に渡って使用されてきた、古いかつ証明されたプログラミングのパラダイムです。

実際、完全なマルチスレッドの使用によってはるかに優れたスケールアウトが可能な、C++、c、javaなどの本格的な言語よりもスケーラビリティが劣ります。これにより、CPUの規模を拡大することができますが、ワームの可能性もあります。 CPUを共有するには、データを共有する必要があります。これは別の話です(セマフォ、ロックなど)

上記のいずれの言語でもnode.jsと同じことができますが、あなた自身でロールを張るか、それを提供するライブラリを使用する必要があります。 これは難しいことではありませんが、node.jsよりも確かに難しいです

ほとんどのWebサービスはIOバインドなので、Node.jsはよく適合し、ほとんどの場合OKです。しかし、CPU集約型作業を使用し始めると、イベントは処理されず、すべて停止します。 その場合、別の言語を使用することをお勧めします。そのためにNodeには本当に良い解決策はありません。複数のプロセスを起動できますが、プロセス間でデータを共有することはできません。データを共有しないと、CPUを効率的に拡張する方法がないので、試してみることはできません。

IOにはNode.jsを使用し、CPU集約的な作業には適切なマルチスレッドで適切な言語を使用してください。

0

NodeのすべてのAPIは、コールバックをサポートするような方法で記述されています。

たとえば、ファイルを読み込む関数は、ファイルの読み込みを開始し、実行環境に即座に戻り、次の命令を実行することができます。ファイルI/Oが完了すると、ファイルの内容をパラメータとしてコールバック関数を渡しながらコールバック関数を呼び出します。したがって、ファイルI/Oがブロックされたり、待機したりすることはありません。これにより、Node.jsのスケーラビリティが向上します。これは、関数が結果を返すのを待つことなく、多数の要求を処理できるためです。 - チュートリアルのポイント。

関連する問題