最近、 WebSocket接続の負荷分散における NGINX のスケーラビリティをテストしました。 50,000 のアクティブな WebSocket 接続がある場合でも、NGINX に必要なメモリは 1 Gb 未満、CPU 容量は 1 コア未満で、非常にビジーな接続で負荷がかかった場合でも、メモリ使用量は安定しており、メッセージ サイズよりもゆっくりと増加しました。 ご使用の環境でのパフォーマンスはアプリケーションの性質によって異なりますが、これらのテストの結果から、NGINX が使用すると予想されるリソースの量をある程度把握できます。
このテストには次のマシンが使用されました。
2セットのテストを実行しました。
最初の一連のテストでは、長時間持続し、ほとんどがアイドル状態の接続をシミュレートしました。 接続数は 1,000 ~ 50,000、メッセージ サイズは 10 ~ 4096 バイト、メッセージの頻度は 0.1 ~ 10 秒(低いと判断)でした。
結果は、WebSocket 接続に必要な合計メモリは接続数に依存し、接続ごとに使用されるメモリは一定であることを示しています。 メモリ使用率はメッセージのサイズや頻度の影響を受けません。 CPU 使用率は基本的に接続数に応じて変化し、50,000 接続でも CPU コアが完全に使用されることはありませんでした。 ここで表される CPU 使用率は、すべてのコアの CPU 使用率を合計して、単一のコアに正規化されます。 次のグラフは、この一連のテストの結果を示しています。
2 番目のテスト セットでは、存続期間が短いが非常にアクティブな接続をシミュレートしました。 同時接続数は 500 で一定に保たれ、接続ごとに 50 件のメッセージがあり、メッセージ間に遅延はありませんでした。 メッセージのサイズは1~4096バイトの範囲でした
結果は、同時接続数が固定の場合、合計メモリ使用量は、接続ごとに使用されるメモリと同様にメッセージ サイズの要因であることを示していますが、どちらの場合もメモリの量はあまり変化せず、線形以下で変化し、15% 未満しか増加しません。
これらのテストでは、NGINX は WebSocket サーバーをプロキシする際に予測可能でスケーラブルなパフォーマンスを実現しました。 これらは合成テストであり、必ずしも実際のアプリケーションを代表するものではないため、他のシステムで実行されたテストの結果は異なる場合があります。 詳細については、以下を参照してください。
「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"