今年初めにNGINX Plusのパフォーマンスをベンチマークし、 サイズガイド ベアメタル サーバーに展開する場合。 NGINX Open Source と NGINX Plus は、アプリケーション ロード バランシングとも呼ばれるレイヤー 7 ロード バランシングに広く使用されています。
[編集者– NGINX Plus の機能とハードウェアのコストおよびパフォーマンスの変更を反映するために、サイジング ガイドを定期的に更新します。 上記のリンクは常に最新のガイドへのリンクです。
Web サーバーとしての NGINX および NGINX Plus のパフォーマンスについては、 「NGINX および NGINX Plus Web サーバーのパフォーマンスのテスト」を参照してください。
サイジング ガイドでは、さまざまなサーバー サイズで NGINX Plus を実行した場合に期待できるパフォーマンスと、ハードウェアの推定コストについて説明します。 サイジング ガイドを使用すると、NGINX Plus のデプロイメントを適切に指定し、すぐにコストがかかる過剰なプロビジョニングや、パフォーマンスの問題が発生し、長期的にはコストがかかる不足のプロビジョニングを可能な限り回避できます。
お客様や、私たちの結果を再現することに関心のある方々から、サイズガイドへの関心や、使用した方法論に関する質問が数多く寄せられています。 このブログ投稿では、サイズ設定ガイドに示されている結果を達成するために実行したテストの概要を説明します。 使用したトポロジ、実行したテスト、サイズガイドに記載されている価格の算出方法について説明します。
注記: 私たちは NGINX Plus 専用のサイジング ガイドを開発しましたが、NGINX Plus サブスクリプションがなくても誰でもテストを再現できるように、テストには NGINX Open Source を使用しました。 テストでは NGINX Plus の拡張機能は使用されない為、NGINX Open Source と NGINX Plus の結果は同じになります。 NGINX オープンソース バージョン 1.9.7 は、NGINX Plus リリース 7 にほぼ相当します。
ただし、テスト トポロジでリバース プロキシとバックエンド Web サーバーをより適切に区別するために、前者については NGINX Plus、後者については NGINX (オープン ソース) と呼びます。
すべてのテストは、シンプルでフラットなレイヤー 2 ネットワーク内のデュアル 40 GbE リンクで接続された 3 台の個別のマシンを使用して実行されました。
クライアント マシンからトラフィックを生成するために、 ab
(ApacheBench) に似たパフォーマンス テスト ツールであるwrk を
使用しました。 図に示されているように、すべてのトラフィックは NGINX Plusリバース プロキシに送信され、そこから接続が NGINX オープンソースWeb サーバーバックエンドに転送されました。
テストには以下のハードウェアを使用しました。
機械 | CPU | ネットワーク | メモリ |
---|---|---|---|
クライアント | 2x Intel(R) Xeon(R) CPU E5‑2699 v3 @ 2.30GHz、36 実コア (または 72 HT) | 2x Intel XL710 40GbE QSFP+ (rev 01) | 16ギガバイト |
リバースプロキシ | 2x Intel(R) Xeon(R) CPU E5‑2699 v3 @ 2.30GHz、36 実コア (または 72 HT) | 4x Intel XL710 40GbE QSFP+ (rev 01) | 16ギガバイト |
ウェブサーバー | 2x Intel(R) Xeon(R) CPU E5‑2699 v3 @ 2.30GHz、36 実コア (または 72 HT) | 2x Intel XL710 40GbE QSFP+ (rev 01) | 16ギガバイト |
テストには次のソフトウェアを使用しました。
wrk
バージョン 4.0.0 が、NGINX がプロキシするトラフィックを生成しました。 これらの手順に従ってインストールしました。さまざまな数の CPU を使用して、NGINX Plus リバース プロキシ サーバーのパフォーマンスをテストしました。 1 つの NGINX Plusワーカー
プロセスは 1 つの CPU を消費するため、異なる数の CPU のパフォーマンスを測定するために、ワーカー
プロセスの数を変えて、2 つのワーカー プロセス、4 つのワーカー
プロセス、8 つのワーカー プロセスなどでテストを繰り返しました。 NGINX アーキテクチャの概要については、ブログをご覧ください。
注記: ワーカー
プロセスの数を手動で設定するには、 worker_processes
ディレクティブを使用します。 デフォルト値はauto で
、NGINX Plus に CPU の数を検出し、CPU ごとに 1 つのワーカー
プロセスを実行するように指示します。
以下の指標を測定しました。
すべてのクライアント トラフィックを生成するために、次のオプションを指定したwrk を
使用しました。
-c
オプションは、作成する TCP 接続の数を指定します。 テストでは、これを 50 接続に設定しました。-d
オプションは、トラフィックを生成する期間を指定します。 テストはそれぞれ 3 分間実行しました。-t
オプションは、作成するスレッドの数を指定します。 単一のスレッドを指定しました。各 CPU を完全に実行するために、単一のwrk
プロセスを CPU に固定できるタスクセットを
使用しました。 この方法は、 wrk
スレッドの数を増やすよりも一貫した結果をもたらします。
1 秒あたりのリクエスト数 (RPS) を測定するために、次のスクリプトを実行しました。
for i in `seq 0 $(($(getconf _NPROCESSORS_ONLN) - 1))`; do taskset -c $i wrk -t 1 -c 50 -d 180s http://リバースプロキシサーバーのIPアドレス/1kb.bin & done
このテストでは、CPU ごとに 1 つのwrk
のコピーが生成され、クライアント マシンでは合計 36 個のコピーが生成されました。 各コピーは 50 個の TCP 接続を作成し、それらを介して 3 分間 (180 秒) にわたって 1 KB のファイルを継続的に要求しました。
SSL/TLS トランザクション数/秒 (TPS) を測定するために、次のスクリプトを実行しました。
for i in `seq 0 $(($(getconf _NPROCESSORS_ONLN) - 1))`; do taskset -c $i wrk -t 1 -c 50 -d 180s -H '接続: close' https://リバースプロキシサーバーのIPアドレス/0kb.bin & done
このテストでは、前のテストと同じ-c
、 -d
、 -t
の値を使用しますが、SSL/TLS 接続の処理に重点を置いているため、次の 2 つの点で異なります。
-H
オプションはConnection:
close
HTTP ヘッダーを設定します)。スループットを測定するために、次のスクリプトを実行しました。
for i in `seq 0 $(($(getconf _NPROCESSORS_ONLN) - 1))`; do taskset -c $i wrk -t 1 -c 50 -d 180s http://リバースプロキシサーバーのIPアドレス/1mb.bin & done
最初のテストとの唯一の違いは、ファイル サイズが 1 MB と大きいことです。 さらに大きなファイル サイズ (10 MB) を使用しても、全体的なスループットは向上しないことがわかりました。
テストでは複数のネットワーク カードを使用しました。 次のように少し変更したスクリプトにより、トラフィックが 2 枚のカード間で均等に分散されるようになりました。
for i in `seq 0 $((($(getconf _NPROCESSORS_ONLN) - 1)/2))`; do n=`echo $(($i+ number-of-CPUs/2 ))`; taskset -c $i ./wrk -t 1 -c 50 -d 180s http:// Reverse-Proxy-Server-IP-address-1 /1kb.bin & taskset -c $n ./wrk -t 1 -c 50 -d 180s http:// Reverse-Proxy-Server-IP-address-2 /1kb.bin & done
異なるコア数でのパフォーマンス数値がわかったら、最後のステップは、対応する仕様のサーバーのコストを決定することでした。 テストでは、Intel ハードウェアと同様の仕様を持つ Dell PowerEdge サーバーの価格を使用しました。 以下の付録には、各サーバーの完全な部品表と、リバース プロキシとWeb サーバーの完全な NGINX 構成が記載されています。
サイズガイドの価格は、次の Dell ハードウェア構成に対するものです。
注記: 記載されている仕様と価格のサーバー モデルは、テスト実行時点では入手可能でしたが、将来変更される可能性があります。
サーバーモデル | 仕様 | 価格 |
---|---|---|
デルパワーエッジR230 | CPU: 2 コア Intel Core I3 6100 3.7GHz、2C/4T ラム: 4ギガバイト ハードディスク: 500GB ニック: インテル X710 2×10 Gbe |
1,200ドル |
CPU: インテル® Xeon® E3‑1220 v5 3.0GHz、4C/8T ラム: 4ギガバイト ハードディスク: 500GB ニック: インテル XL710 2×40 Gbe |
1,400ドル | |
デルパワーエッジR430 | CPU: インテル® Xeon® E5‑2630 v3 2.4GHz、8C/16T ラム: 4ギガバイト ハードディスク: 500GB ニック: インテル XL710 2×40 Gbe |
2,200ドル |
CPU: 2x Intel® Xeon® E5‑2630 v3 2.4GHz、8C/16T ラム: 8GB ハードディスク: 500GB ニック: インテル XL710 2×40 Gbe |
3,000ドル | |
デルパワーエッジR630 | CPU: 2x インテル® Xeon® E5‑2697A v4 2.6GHz、16C/32T ラム: 8GB ハードディスク: 500GB ニック: インテル XL710 2×40 Gbe |
8,000ドル |
CPU: 2x Intel® Xeon® E5‑2699 v3 2.3GHz、18C/36T ラム: 8GB ハードディスク: 500GB ニック: インテル XL710 2×40 Gbe |
11,000ドル |
NGINX Plusリバース プロキシでは次の構成が使用されました。 keepalive_timeout
およびkeepalive_requests
ディレクティブの 2 つのセットに注意してください。
それ以外の点では、設定は標準的なリバース プロキシ サーバー設定であり、NGINX Plus はproxy_pass
ディレクティブを使用して Web サーバーにプロキシします。
user nginx;worker_processes auto; worker_rlimit_nofile 10240; pid /var/run/nginx.pid; events { worker_connections 10240; accept_mutex off; multi_accept off; } http { access_log off; include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$ssl_cipher" ' '"$ssl_protocol" '; sendfile on; # RPS テスト keepalive_timeout 300s; keepalive_requests 1000000; # SSL/TLS TPS テスト #keepalive_timeout 0; #keepalive_requests 1; アップストリーム webserver { server Web-Server-IP-address ; } server { listen 80; listen 443 ssl backlog=102400 reuseport; ssl_certificate /etc/nginx/ssl/rsa-cert.crt; ssl_certificate_key /etc/nginx/ssl/rsa-key.key; ssl_session_tickets off; ssl_session_cache off; root /var/www/html; location / { proxy_pass http://webserver; } } } }
以下の構成は、NGINX Web サーバーで使用されました。 root
ディレクティブで設定されたとおりに、 /var/www/html/から静的ファイルを提供します。 静的ファイルはdd を
使用して生成されました。この例では、ゼロの 1 KB ファイルが作成されます。
dd if=/dev/zero of=1kb.bin bs=1KB count=1
構成:
user nginx;
worker_processes auto;
worker_rlimit_nofile 10240;
pid /var/run/nginx.pid;
events {
worker_connections 10240;
accept_mutex off;
multi_accept off;
}
http {
access_log off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$ssl_cipher" '
'"$ssl_protocol" ';
sendfile on;
keepalive_timeout 300s;
keepalive_requests 1000000;
server {
listen 80;
root /var/www/html;
}
}
NGINX Plus を実際にお試しいただくには、今すぐ30 日間の無料トライアルを開始するか、弊社にお問い合わせの上、使用事例についてご相談ください。
「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 q。"