web-dev-qa-db-ja.com

同じマシンで複数のインスタンスを実行する場合のNginxのパフォーマンス

異なるサーバーブロックを使用してすべてを単一のインスタンスにロードするのではなく、同じマシンで複数のnginxインスタンス(マスター)を実行することによるパフォーマンスへの影響を理解しようとしています。 nginxの複数のインスタンスの使用は、worker_processやworker_connectionsの最適化などにどのように影響しますか?

Worker_processはコアの数を反映する必要があり、最大でもコアの数の2倍にする必要があることを示すアドバイスがたくさんあります。また、worker_connectionsがulimitと一致するか、ulimitより少し下にある必要があることも理解しています。使用可能な接続が多すぎたり、コアあたりのワーカーが多すぎたりすると、パフォーマンスが低下する可能性があります。

2つのコアと1024のulimitがありますが、nginxのインスタンスが4つあり、それぞれに次の設定があります。

worker_processes 4;
worker_connections: 1024;

これには、worker_processes 16;worker_connections 4069;を使用した場合と同じ効果がないのですか

注:nginxインスタンスと言うときは、4つの独立したマスターnginxプロセスがあり、それぞれが同様の設定を持つ異なる構成ファイルを供給し、それぞれに独自のワーカーがあることを明確にしておきます。

注2:このシナリオは私が継承したものであり、すでに実施されています。 nginxの構成方法を変更する必要があるかどうかを判断しようとしていますが、その理由を説明しています。

5
eddiemoya

システムの観点からは、4つのサーバーセクションを持つ4つのマスター、または16のサーバーセクションを持つ単一のマスターの実行に固有の違いはありません。同じアーキテクチャを実装しています:並列化されたイベントベースのプロセス。

複数のマスターがいる場合は、すべてのマスターのワーカーの合計に対してワーカー/コアの比率を考慮する必要があります。これはいくつかの制約から来ています:

  • cPUが過負荷にならないようにしてください。したがって、ワーカーの数はコアの数以下にする必要があります
  • 並列化とOSスケジューリングが最大限に使用されていることを確認してください。したがって、ワーカーの数はできるだけ多くする必要があります。
  • HTTPサーバーワーカーはCPU使用率が低く、ほとんどの場合I/Oを待機します。したがって、実際には、コア数の2倍から4倍の範囲で何かを割り当てるのが安全です。

MIMEマップなどのいくつかのリソースは1回しか読み込まれないため、単一のマスターを使用する方が少し効率的です。しかし、それはマイナーなポイントです。

すべてのサーバーで共有されるワーカーの単一の大きなプールがあるため、単一のマスターを使用するとより効率的になるはずです。単一のサーバーが一時的にほとんどのワーカー(たとえば16)を必要とする場合、それらを取得する可能性があります。マルチマスター構成(たとえば、4人のマスターと4人のワーカー)では、最大で4人のワーカーしか使用できません。一方、それは望ましい効果である可能性があります。厳密に4つのインスタンスに分割して、それぞれが常にホストの4分の1以上の注意を確実に得るようにします。しかし、それ以上はありません。

1つのマスターで構成および保守する方が簡単なはずです(セキュリティ更新を考えてください)。

4つのマスターを使用すると、より回復力が高くなるはずです。他の3つのマスターに触れることなく、1つのマスター構成をクラッシュまたは完全に混乱させることができます。

4つのマスターが異なるNginxバージョンを使用しない限り、マスターごとにモジュールの正確なセットをコンパイルするなどの超最適化のメリットはありません。

2
zerodeux