独自の単純な負荷テストを作成することを考えています。このテストでは、複数のリクエスト(100〜1000の同時ユーザーなど)でWebサイトにアクセスして、そのパフォーマンスを確認できます。Node.jsを試してみたいのですが、Node.jsはスレッドを使用しないため、それがジョブにとって間違ったテクノロジーであるかどうかわかりません。Node.jsが使用する非同期モデルを使用して、多くのユーザーリクエストをシミュレートできますか、それともRuby / .NET / Pythonなどの別の言語で実行する方が適切ですか?
3 に答える
Nodeは、必要な数のリクエストを実行できます(ただし、のデフォルトを変更する必要がある場合がありますhttp:Agent
)。ノードに固有のものよりも、OSが実行できることによって制限される可能性が高くなります(もちろん、このような制限は、使用する他の言語にも適用されます)。
Node.jsはこのタスクに最適である必要があります。私は仕事でこれをします。変更する必要がある重要な部分の1つは、httpソケットプールです。次のコードを抜粋すると、プーリングが完全に無効になり、必要に応じてNode.jsプロセスを枯渇させることができます。
var http = require('http');
var req = http.request(..., agent: false)
これについて詳しくは、http.Agentのドキュメントをご覧ください。
スレッドに関する懸念は鋭敏ですが、その制限に達した場合でも(ノードはリソースの効率を維持するのに非常に優れています)、解決策は単純です。負荷テストの複数のインスタンス(プロセス)を開始します。現状では、負荷を正しくシミュレートするために、複数のマシンを完全に使用する必要がある場合があります。
いずれにせよ、これにRubyまたはPythonを使用しても自動的に勝つことはありません。非同期プログラミングはI/Oおよびネットワークにバインドされたタスクに理想的であり、ノードはこれに優れています。同様に、RubyとPythonにはサードパーティの非同期フレームワークがありますが、定義上、Nodeで提供されている標準の非同期フレームワークよりもあいまいです。
nodeloadを使用して負荷テストを作成するのは簡単です。