より高速なベンチマークまたは比較はありますか:ノードの前にnginxを配置して静的ファイルを直接提供するか、ノードのみを使用して静的ファイルを提供するようにしますか?
nginxソリューションは私にとってより扱いやすいようです、何か考えはありますか?
回答:
ここで答えに同意しないといけない。Nodeは問題なく動作しますが、nginxは正しく構成されていれば間違いなく高速になります。nginxは、小さなメモリフットプリントで同様のパターンに従って(必要な場合にのみ接続に戻る)Cで効率的に実装されます。さらに、ファイルを提供するsendfile syscallをサポートします。これは、OSカーネル自体がジョブを実行しているため、ファイルの提供で可能な限り高速です。
現在では、nginxはフロントエンドサーバーとして事実上の標準になっています。静的ファイル、gzip、SSL、さらにはロードバランシングを提供する際のパフォーマンスに使用できます。
PS:これは、ファイルが要求時にディスク上で静止している場合と同様に、実際に「静的」であることを前提としています。
sendfile
していますが、コードを記述する必要があるようです。例を参照してください。blog.std.in/2010/09/09/using-sendfile-with-nodejs
nginx、Express.js(静的ミドルウェア)、クラスター化されたExpress.jsを比較ab -n 10000 -c 100
して、静的な1406バイトをすばやく提供しましたfavicon.ico
。お役に立てれば:
残念ながら、私のマシンでnginxがエラーをスローし始めるので、1000または10000の同時リクエストをテストすることはできません。
編集:artvolkによって提案されたように、ここにクラスター+ static
ミドルウェア(遅い)の結果があります:
static
ミドルウェアが本番環境で行うため、それは信じられないほどの違いをもたらすからです。
@gremoのチャートの解釈が異なります。私と同じように、ノードとnginxの両方が同じ数のリクエスト(9-10kの間)でスケーリングしているように見えます。nginxの応答のレイテンシは常に20ミリ秒低くなりますが、ユーザーがその違いを必ずしも認識できないと思います(アプリが適切に構築されている場合)。マシンの数が決まっている場合、ノードマシンをnginxに変換する前にかなりの負荷がかかります。そのノードがほとんどの負荷が最初に発生する場所であることを考えると、これに対する1つの対抗点は、負荷分散のためにマシンをnginx専用にしている場合です。その場合は、静的コンテンツを提供することもできます。
どちらの方法でも、静的ファイルをキャッシュするようにNginxを設定します。そこには大きな違いがあります。次に、ノードからサービスを提供するかどうかにかかわらず、ノードアプリで基本的に同じパフォーマンスと同じ負荷軽減が得られます。
私は個人的に、ほとんどの場合、静的アセットを提供するNginxフロントエンドのアイデアが好きではありません。
1)プロジェクトは同じマシン上にある必要があります-または、アセット(nginxマシン上)とWebアプリ(複数のマシン上でスケーリング用)に分割する必要があります
2)Nginx設定は、静的アセットのパスの場所を維持する必要があります/変更された場合は再読み込みします。
これは答えるのが難しい質問です。静的ファイルを提供するだけの非常に軽量なノードサーバーを作成した場合、nginxよりもパフォーマンスがよくなる可能性が高いですが、それほど単純ではありません。(これは、nodejsファイルサーバーとlighttpdを比較する「ベンチマーク」です。静的ファイルを提供するときのパフォーマンスはngingxに似ています)。
静的ファイルの提供に関するパフォーマンスは、多くの場合、作業を行うWebサーバーだけにとどまりません。可能な限り最高のパフォーマンスが必要な場合は、CDNを使用してファイルを提供し、エンドユーザーのレイテンシを削減し、エッジキャッシュのメリットを活用します。
それについて心配していなければ、ほとんどの場合、nodeは静的ファイルを問題なく提供できます。ノードは非同期コードに適しています。これは、シングルスレッドであり、すべてのブロックI / Oがプロセス全体をブロックし、アプリケーションのパフォーマンスを低下させる可能性があるため、これにも依存しています。多くの場合、非ブロッキング方式でコードを記述していますが、同期的に何かを実行している場合、ブロッキングが発生し、他のクライアントが静的ファイルを処理する速度が低下する可能性があります。簡単な解決策は、ブロッキングコードを記述しないことですが、それが不可能である場合や、必ずしも強制できない場合があります。
純粋にnode.jsが多くの面でnginxよりも優れていると確信しています。
NginXには組み込みのキャッシュがあるので、node.jsには工場出荷時にインストールされていません(自分でファイルキャッシュを作成する必要があります)。カスタムファイルキャッシュは、非常にシンプルであるため、nginxや市場の他のサーバーよりも優れています。
また、Nginxは複数のコアで実行されます。ノードの潜在能力を最大限に活用するには、ノードサーバーをクラスター化する必要があります。興味がある方は午後にどうぞ。
ノードでパフォーマンスニルヴァーナを実現するには、ディーパーを掘る必要があります。それが唯一の問題です。いったん地獄うん...それはNginxを打ち負かします。