ホームページ > 記事 > ウェブフロントエンド > Node アプリケーションのパフォーマンスを向上させる 5 つのヒント
関連する推奨事項: 「node js チュートリアル 」
「ノード サーバーの前に nginx がない場合は、何か間違ったことをした可能性があります。」 — Bryan Hughes
Node.js は、最も一般的な言語である JavaScript を使用してサーバーサイド アプリケーションを構築するための主要なツールです。 Node.js は、Web サーバーとアプリケーション サーバーの両方の機能を提供できるため、マイクロサービス ベースの開発と展開のための重要なツールとみなされます。
バックエンド開発では、Node.js は Java や .NET を置き換えたり、拡張したりできます。
Node.js はシングルスレッドのノンブロッキング I/O であり、数千の同時操作をサポートできます。これはまさに NGINX が C10K 問題を解決する方法です。 Node.js は、その効率的なパフォーマンスと開発効率で知られています。
それで、何を間違えたのでしょうか?
Node.js のいくつかの欠陥により、Node.js ベースのシステムは潜在的なパフォーマンスの問題やクラッシュに直面することがあります。これは、システム トラフィックが急速に増加した場合に特に顕著です。 Node.js は Web アプリケーションのロジックを処理するのに適したツールですが、画像や JavaScript ファイルなどの静的ファイルの処理が苦手であり、複数のサーバー間の負荷分散も苦手です。
Node.js をより効果的に使用するには、静的ファイルのキャッシュ、プロキシ、負荷分散、クライアント接続管理などの機能を NGINX に任せる必要があります。
Node.js のパフォーマンスを向上させるための提案をいくつか示します。
リバース プロキシ サーバーを実装する
静的ファイルをキャッシュする
マルチサーバーの負荷分散
プロキシ WebSocket 接続
SSL/TLS および HTTP/2 を実装する
注: Node.js アプリケーションのパフォーマンスを向上させる最も簡単な方法は、マルチコア プロセッサを利用できるように Node.js ファイルを変更することです。 、サーバーのマルチコア CPU を最大限に活用する方法については、この記事をご覧ください。
ほとんどのアプリケーション サーバーと比較して、Node.js は大量のネットワーク トラフィックを簡単に処理できます。しかし、Node.js はそのために設計されたものではありません。
トラフィック量の多いサイトの場合、パフォーマンスを向上させる最初のステップは、Node.js の前にリバース プロキシ サーバーを配置することです。これにより、Node.js サーバーがネットワークに直接公開されないように保護され、負荷分散や静的ファイル キャッシュに複数のアプリケーション サーバーを柔軟に使用できるようになります。
NGINX を既存サーバーの前のリバース プロキシとして使用する NGINX は、NGINX のコア アプリケーションとして、世界中の何千ものサイトで使用されています。
NGINX をリバース プロキシ サーバーとして使用する利点は次のとおりです:
権限処理とポート割り当ての簡素化
静的リソースのより効率的な処理
#注: この記事では、Ubuntu 14.04 または CentOS 環境で NGINX をリバース プロキシ サーバーとして使用する方法について説明します。NGINX を Node.js の前のリバース プロキシ サーバーとして使用するのが効果的です。
2. 静的ファイルのキャッシュ
2. 複数のサーバー間の負荷分散
これは実際には非常に簡単で、NGINX は最初からリバース プロキシ サーバーとして実装されているため、キャッシュと負荷分散を簡単に行うことができます。
Modulus の Web サイトには、NGINX を Node.js リバース プロキシ サーバーとして使用することによるパフォーマンスの向上を紹介する役立つ記事があります。 Node.js のみを使用すると、作者の Web サイトは 1 秒あたり 900 リクエストを処理できます。 NGINX をリバース プロキシ サーバーとして使用して静的ファイルを処理すると、Web サイトは 1 秒あたり 1,600 件を超えるリクエストを処理できるようになり、パフォーマンスがほぼ 2 倍に向上しました。
以下は、上記のパフォーマンスを向上させるための Web サイトの構成コードです:
nginx
server { listen 80; server_name static-test-47242.onmodulus.net; root /mnt/app; index index.html index.htm; location /static/ { try_files $uri $uri/ =404; } location /api/ { proxy_pass http://node-test-45750.onmodulus.net; } }
3. Node.js 負荷分散の実装
NGINX はステートレス ロード バランシングを実装します:
ラウンド ロビン。新しいリクエストはリストの次のサーバーに送信されます。
最小接続数。新しいリクエストは接続数が最も少ないサーバーに送信されますIP ハッシュ: クライアント IP のハッシュ値に基づいてサーバーを指定します。
Node.js アプリケーション サーバーにメリットをもたらすことができるのは、クライアント要求を同じサーバーに確実にプロキシできる方法である IP ハッシュだけです。HTTP のすべてのバージョンは、クライアントがサーバーにアクティブにリクエストできるように設計されていますが、WebSocket を使用すると、サーバーがサーバーにアクティブにリクエストできるようになります。クライアント端末メッセージのプッシュ。
WebSocket プロトコルは、クライアントとサーバー間の安定した対話を簡素化すると同時に、対話の待ち時間を短縮します。全二重通信が必要な場合、つまり、クライアントとサーバーの両方が必要に応じてメッセージ要求をアクティブに開始できる場合は、WebSocket を使用します。
WebSocket プロトコルは健全な JavaScript インターフェイスを備えているため、Node.js をアプリケーション サーバーとして使用するのにもネイティブに適しています。接続数が増えると、静的ファイルのキャッシュと負荷分散のために、クライアントおよび Node.js サーバー上で NGINX をプロキシとして使用することが合理的になります。
情報やり取りのセキュリティを確保するために SSL/TLS を使用する Web サイトが増えています。 Web サイトに追加するかどうかを検討することもできますが、追加することに決めた場合、NGINX にはそれをサポートする 2 つの方法があります:
NGINX を SSL/TLS リバース プロキシとして使用できます。の場合、Node.js サーバーは復号化されたリクエストを使用し、暗号化されていないコンテンツを NGINX に返します。
HTTP/2 を使用すると、SSL/TLS によって生じるパフォーマンスのオーバーヘッドを相殺できます。NGINX は HTTP/2 をサポートしているため、HTTP/2 と SSL プロキシ リクエストを同時に使用できます。あなたのノード .js サーバーを変更する必要はありません。
実装フェーズでは、Node.js 構成ファイル内の URL を更新し、SPDY または HTTP/2 を使用して NGINX 構成ファイル内の接続を最適化する必要があります。 HTTP/2 サポートの追加は、HTTP/2 をサポートするブラウザーが新しいプロトコルを使用してアプリケーションと対話できることを意味しますが、古いブラウザーは引き続き HTTP/1.x を使用します。
このブログでは、主に NGINX と Node の混合使用について、Node.js アプリケーションのパフォーマンスを向上させる主な方法のいくつかについて説明します。 js ウェイ。 NGINX をリバース プロキシとして機能させると、静的ファイルのキャッシュ、ロード バランス、WebSocket 接続のプロキシ、SSL/TLS および HTTP/2 プロトコルの構成が可能になります。
NGINX と Node.js のハイブリッドは、マイクロ アプリケーション サーバーを作成するための使いやすい方法として認識されており、Java や Microsoft.NET プロジェクトなどの既存の SOA ベースのプロジェクトを柔軟に拡張することもできます。この記事は、Node.js アプリケーションの最適化に役立ちます。Node.js を使用する場合は、NGINX と一緒に使用するのが最善です。
元の著者: Floyd Smith
元のリンク: https://www.nginx.com/blog/5-performance-tips-for-node-js-applications/
翻訳リンク: https://blog.maxleap.cn/zh/archives/512
プログラミング関連の知識については、こちらをご覧ください: プログラミング学習コース ! !
以上がNode アプリケーションのパフォーマンスを向上させる 5 つのヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。