ホームページ >ウェブフロントエンド >jsチュートリアル >Node.jsのパフォーマンスを向上させる方法のまとめ
今回は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 サイトの他の関連記事を参照してください。