ホームページ  >  記事  >  ウェブフロントエンド  >  Node.jsのパフォーマンスを向上させる方法のまとめ

Node.jsのパフォーマンスを向上させる方法のまとめ

php中世界最好的语言
php中世界最好的语言オリジナル
2018-04-19 10:37:241313ブラウズ

今回はNode.jsのパフォーマンスを向上させる方法と、Node.jsのパフォーマンスを向上させるための注意点についてまとめてお届けします。実際の事例を紹介しますので、見てみましょう。

Node.js はシングルスレッドのノンブロッキング I/O であり、数千の同時操作をサポートできます。これは、NGINX が C10K 問題を解決する方法とまったく同じです。 Node.js は、その効率的なパフォーマンスと開発効率で知られています。

1. リバースプロキシサーバーを実装する

Node.js は、ほとんどのアプリケーション サーバーよりも大量のネットワーク トラフィックを簡単に処理できますが、これは Node.js が行うように設計されたものではありません。

トラフィックの多いサイトの場合、パフォーマンスを向上させる最初のステップは、Node.js の前にリバース プロキシ サーバーを配置することです。これにより、Node.js サーバーがネットワークに直接公開されることがなくなり、負荷分散や静的ファイル キャッシュに複数のアプリケーション サーバーを柔軟に使用できるようになります。

NGINX を既存のサーバーの前のリバース プロキシとして使用する NGINX は、NGINX のコア アプリケーションとして、世界中の何千ものサイトで使用されています。

NGINX をリバース プロキシ サーバーとして使用する利点は次のとおりです:

権限の処理とポートの割り当てが簡素化されました

静的リソースをより効率的に処理します

Node.js のクラッシュ状況の処理が改善されました

DoS 攻撃の影響を軽減する

注: この記事では、Ubuntu 14.04 または CentOS 環境で NGINX をリバース プロキシ サーバーとして使用する方法について説明します。NGINX を Node.js の前のリバース プロキシ サーバーとして使用するのが効果的です。

2. 静的ファイルのキャッシュ

トラフィックが増加すると、ノードベースのサーバーに圧力がかかり始めます。現時点では、次の 2 つのことを実行するとよいでしょう:

より多くの Node.js サーバーを使用します。

複数のサーバー間の負荷分散

これは実際には非常に単純です。NGINX は最初からリバース プロキシ サーバーとして実装されているため、キャッシュとロード バランシングを簡単に行うことができます。

Modulus の Web サイトには、NGINX を Node.js リバース プロキシ サーバーとして使用することによるパフォーマンスの向上を紹介する役立つ記事があります。 Node.jsのみを使用する 当時、作者の Web サイトは 1 秒あたり 900 件のリクエストを処理できました。 NGINX をリバース プロキシ サーバーとして使用して静的ファイルを処理した後、Web サイトは 1 秒あたり 1600 以上を処理できるようになりました 要求が増加し、パフォーマンスがほぼ 2 倍向上しました。

以下は、上記のパフォーマンスを向上させるための Web サイトの構成コードです:

nginx
server {
listen 80;
server_name static-test-47242.onmodulus.net;
root /mnt/app;
index index.html index.htm;
loction /static/ {
try_files $uri $uri/ =404;
}
location /api/ {
proxy_pass http://node-test-45750.onmodulus.net;
}

3. Node.js の負荷分散を実装する

最終目標 — Node.js は複数のアプリケーション サーバーを実行し、それらの間で負荷のバランスをとります。

Node.js ではブラウザ側の JavaScript とサーバー側の Node.js の受け渡しが許可されているため、Node.js で負荷分散を実装するのは困難です。 json はデータのやり取りに使用されるため、同じクライアントが特定のアプリケーション サーバーに繰り返しアクセスでき、複数のアプリケーション サーバー間で セッション を共有することも困難です。

NGINX がステートレスな負荷分散を実装する方法:

ラウンドロビン。新しいリクエストはリストの次のサーバーに送られます

最小接続数: 新しいリクエストは接続数が最も少ないサーバーに送信されます

IPハッシュ。クライアントIPのハッシュ値に基づいてサーバーを指定します

Node.js アプリケーション サーバーにとって、クライアント要求を同じサーバーに確実にプロキシする方法として役立つのは、IP ハッシュだけです。

4. プロキシ WebSocket 接続

HTTP のすべてのバージョンは、クライアントがアクティブにサーバーを要求できるように設計されていますが、WebSocket を使用すると、サーバーがメッセージをクライアントにアクティブにプッシュできます。

WebSocket プロトコルにより、クライアントとサーバー間の安定した対話が容易になり、対話の待ち時間も短縮されます。全二重通信が必要な場合、つまり、クライアントとサーバーの両方が必要に応じてメッセージ要求をアクティブに開始できる場合は、WebSocket を使用します。

WebSocket プロトコルは健全な JavaScript インターフェイスを備えているため、Node.js をアプリケーション サーバーとして使用するのにもネイティブに適しています。接続数が増えると、静的ファイルのキャッシュと負荷分散のために、クライアントおよび Node.js サーバー上で NGINX をプロキシとして使用することが合理的になります。

5. SSL/TLS と HTTP/2 を実装する

情報交換のセキュリティを確保するために SSL/TLS を使用する Web サイトが増えています。Web サイトに SSL/TLS を追加するかどうかを検討することもできますが、追加することに決めた場合、NGINX には 2 つの方法でそれをサポートできます。 NGINX を SSL/TLS リバース プロキシとして使用できます。この場合、Node.js サーバーは復号化されたリクエストを使用し、暗号化されていないコンテンツを NGINX に返します。

HTTP/2 を使用すると、SSL/TLS によって生じるパフォーマンスのオーバーヘッドを相殺できます。NGINX は HTTP/2 をサポートしているため、Node.js サーバーに変更を加えることなく、HTTP/2 と SSL の両方を使用してリクエストをプロキシできます。

実装フェーズでは、NGINX 構成ファイルで SPDY または HTTP/2 を使用して、Node.js

構成ファイル

内の URL を更新する必要があります。 接続を最適化します。 HTTP/2 サポートの追加は、HTTP/2 をサポートするブラウザーが新しいプロトコルを使用してアプリケーションと対話できることを意味しますが、古いブラウザーは引き続き HTTP/1.x を使用します。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:


以上がNode.jsのパフォーマンスを向上させる方法のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。