増加するクライアントをサポートするためにWebアプリケーションサーバーをさらに追加し、負荷分散と高可用性のためにHAproxyとKeepalivedを展開することを計画しています。
私のサーバーの使用法には次の特徴があります。
このために、
質問
サーバーに接続しているクライアントデバイスXが60,000を超える場合、ロードバランサーまたはルーターのTCPポートが不足します。たとえば、20,000ユーザーにスケールアップするための最良の方法は何ですか?
私のサーバーは、TomcatとJavaサーブレットを使用して、Ubuntuサーバーで実行されています。
私はあなたの60kクライアントが実際の問題ではないと思います。ファイル記述子が不足しているという問題が発生する可能性が高くなりますが、OS構成の一部として簡単に修正できるはずです。
これが、接続が問題にならない理由です。各接続は、送信元IPアドレス、送信元ポート、宛先IPアドレス、および宛先ポートによって特徴付けられます。ネットワークスタック内では、この4つがパケットをファイル記述子に一致させるために使用されます(各ファイル記述子は接続を表します)。サーバーには固定の宛先IPアドレスと宛先ポートがあります(サーバーはクライアントの宛先です)が、送信元IPアドレスと送信元ポートは可変です。ポートは16ビットの数値であるため、1つのクライアントからの接続の最大数は64Kです。 IPv4アドレスは32ビットの数値であり、4,294,967,296の可能な送信元アドレスを提供します。いくつかの基本的な計算を行うと、サーバーは64K * 4,294,967,296の接続を単一のソースIPとポートにマップすることができます。
これが、クライアントの数よりも開いているファイル記述子の最大数に問題が発生する可能性が高い理由です。
最も簡単なアプローチは、DNSレベルで負荷分散を実装することです。
手段:2、3、またはそれ以上の物理ロードバランサーとバランスを取るラウンドロビンDNSエントリがあります。