ホームページ  >  記事  >  ウェブフロントエンド  >  Node アプリケーションのパフォーマンスを向上させる 5 つのヒント

Node アプリケーションのパフォーマンスを向上させる 5 つのヒント

青灯夜游
青灯夜游転載
2020-12-03 18:05:402770ブラウズ

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 を最大限に活用する方法については、この記事をご覧ください。

1. リバース プロキシ サーバーの実装

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

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

Node アプリケーションのパフォーマンスを向上させる 5 つのヒント

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

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

  • 権限処理とポート割り当ての簡素化

  • 静的リソースのより効率的な処理

  • #Node.js クラッシュのより適切な処理

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

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

トラフィックが増加すると、ノードベースのサーバーに負荷がかかり始めます。現時点では、次の 2 つのことを実行するとよいでしょう: 1. より多くの Node.js サーバーを使用します。

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 負荷分散の実装

最終目標 — Node.js は複数のアプリケーション サーバーを実行し、それらのサーバー間で負荷を分散します。 Node.js で負荷分散を実装するのは困難です。Node.js ではブラウザ側の JavaScript とサーバー側の 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 サイトに追加するかどうかを検討することもできますが、追加することに決めた場合、NGINX にはそれをサポートする 2 つの方法があります:

  1. NGINX を SSL/TLS リバース プロキシとして使用できます。の場合、Node.js サーバーは復号化されたリクエストを使用し、暗号化されていないコンテンツを NGINX に返します。

  2. 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 を使用します。

Node アプリケーションのパフォーマンスを向上させる 5 つのヒント

概要

このブログでは、主に 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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。