4

への移行を検討している約 150 の Web サイト (おそらく 300 以上にスケーリング) をホストしていnode.jsます。ほとんどのサイトのトラフィックはかなり少なく、月間ページビュー数は 100 万未満です。

各 Web サイトを独自の node.js プロセスにするか、同じ node.js プロセス (または負荷分散プロセスの小さなセット) を使用してすべての Web サイトを提供する必要があります。サーバーあたりのノード プロセス数に技術的な制限または合理的な制限はありますか?

サイトごとのプロセス:効率が悪いように感じますが、実際に効率が悪いかどうかはわかりません。1 つのバグのあるサイトが他のサイトに影響を与えないようにします。

コアごとのプロセス/プロセスの小さなセット:パフォーマンスが向上する可能性がありますが、サイトのコードベースを更新する必要がある場合、他のサイトがダウンすることはありませんか? また、1 つのサイトでコード エラーが発生すると、他のサイトに影響を与える可能性があります。

理想的には、各ワーカー サーバーからすべてのサイトをホストできるように、サイトごとに 1 つのプロセスを希望します。こうすることで、負荷が増加したときに、SiteA が ServerA に移動し、SiteB が ServerB に移動することを恣意的に言わなくても、別の同一のワーカー サーバーをスピンアップして、2 つのサーバー間で負荷を分散できます。知恵node.jsを提供してくれる教祖はいますか?

すべての静的ファイル リクエストは、おそらく Nginx または Varnish などによって処理されます。

4

2 に答える 2

1

ここには多くの問題があります。全体像の答えは、場合によって異なります...「パフォーマンス」の議論全体を持ち込むときはいつもそうです。そうは言っても、堅固な Node をセットアップする最も簡単な方法は、NodeJS に関する次の基本的な事実に注意することです。また、質問に関連するので、それらの意味についてもコメントします。

  • Node で得られる同時実行性は、特定の状況、つまり IO 負荷の高い操作で非常にうまく機能します。ここで本当に話しているのは、次のリクエストを待つダウンタイムの量を最小限に抑えることです。このため、ノードは、マシンのコアごとに 1 つのプロセスがある環境で非常にうまく機能します。ノードは、負荷が高い状況でリクエストを処理するために使用できる CPU の量を最大化することに非常に優れています。これは、偶数ループで文字通りゼロの他の作業が行われている場合、コアごとに複数のノードプロセスを持つことで、パフォーマンスがわずかに向上することを確認できます (最大リクエスト/秒/プロセッサコアの観点から)。しかし、この数を 3 を超えて増やすことによる利点は見たことがありません。イベント ループ全体が文字通り単なるファイル サーバーである状況でも。

  • サイトのコメントごとのプロセスについて。これは多くの理由から悪い考えです。1 つには、適切に構成されたノード サーバーは、1 秒あたり数千の要求を処理できます。中程度のクラスター (多数の RAM、中間の CPU クロック、4 コア) で Amazon EC2 を介してホストされている当社 (会社名は省略) のサーバーは、通常、1 クラスターあたり 1 秒あたり約 3000 リクエストで失敗します。私たちのサーバーはかなりの量の CPU 作業を行います。単純なファイル サーバーの場合は、もっとうまく処理できると確信しています。厳密に言えば、サイトごとに、ここで迅速に独自のプロセス/コア/エスカレーションで各サイトを起動することで、より多くのリクエストを処理できるようになります! ただし、コストとアーキテクチャの観点からすると、必要ではありません。私がお勧めするのは、大量の RAM を備えたセットアップに投資することです。

  • RAM全体について。特定のコアに対して起動するプロセスの数は、2 つの要因に依存します。1 つは、イベント ループで実行される同期作業の量です。同期作業が多いほど、特定のリクエストが着信してから、イベント ループが次のリクエストに対応する準備が整うまでの時間が長くなります。ビジーなイベント ループがある場合は、より多くのプロセス/CPU コアが必要な状況になります。これに影響を与える可能性のあるもう 1 つのことは、特にファイル サーバーに関連して、RAM の量です。Node は RAM の高い環境でよりよく動作しますが、これはどのファイル サーバーについても言えることです... これに関係するのは、アクティブな非同期操作の数です。ノードの動作方法の欠点の 1 つは、負荷が高いことです。一度に多数のイベント ハンドラーをアクティブにすることができます。これは並行性/単純性には優れていますが、サーバーが大量の非同期ディスク/IO の発生を待機している場合、十分な RAM がある場合よりもはるかに早く速度が低下し、クラッシュします。これらすべてのイベント ハンドラーを処理するのに十分な RAM がない場合は、1 つのプロセス/コアの配置を維持する必要があります。そうしないと、ノードが多数のイベント ハンドラーを同時に起動しやすくなり、そうでない場合よりも早くクラッシュする原因になります。

あなたが何をすべきかを伝えるのに十分な情報がありません。これは、特定のサーバーのアーキテクチャ、サイト、サイトのサイズ、データ量などに大きく依存します。しかし、これら 3 つの知識は、Node サーバーを最大限に活用するのに役立つ基本的なものです。正直なところ、上記の考慮事項を組み合わせた負荷分散に関するアイデアは、うまくいくはずです。確かに、マイクロ最適化は可能ですが、これらのことを行うと、DDOS タイプの条件が原因でクラッシュが発生し始める前に、1 秒あたりのリクエストが数千単位で簡単に表示されるはずです。

于 2013-08-21T19:29:22.837 に答える