ロードバランサは、実行中のプラットフォームに基づいて同時に使用できるtcpポートにいくつかの制限を設けます(たとえば、Linuxは最大65535個のTCPポートを同時に開くことができます) 。これは、バランサがボトルネックになり、バックエンドサーバーファームがより多くの要求を同時に処理できる場合でも、多数の同時要求を超えてサービスすることができないことを意味します。この問題を克服する方法はありますか?ロードバランサのスケーラビリティと最大#tcpポート
4
A
答えて
8
TCPとUDPのポート番号は16ビットなので、特定のIPには65535個しかありません(ポート0は私が信じると無効です)。しかし、TCP接続は4タプル(送信元IP、送信元ポート、宛先IP、宛先ポート)によって識別されます。 (詳細はwikipediaのように見えます)
クライアント - バランサ要求の場合:各インバウンド接続に固有の(送信元IP、送信元ポート)がある限り、問題はありません。クライアントは通常これを保証します。この側面の唯一の問題は、ごくわずかなIPv4アドレスの後ろに顧客をNATする膨大なISPからアクセスすると、ページあたり多くのイメージを持つ非常に人気の高いWebサイトであるということでした。それはおそらくあなたの状況ではありません。
上記のNAT問題と同様の状況が発生している可能性があるので、balancer-> backendリクエストが面白いです。私はLinuxが普通は別のソケットephemeral portを割り当てようとしていると思いますが、デフォルトでは28,233しかありません。また、IIRCではTIME_WAIT
状態のものを使用しないので、実際には多くの接続を同時に開くことなく範囲を使い果たすことができます。 IIRCこの制限に達するとconnect
(または接続する前に明示的にソケットをバインドする場合はbind
)にEADDRINUSE
のエラーが発生します。
- が永続balancer->バックエンド接続を維持するのではなく、新規の作成:私は助けるかもしれないいくつかのことを、私は前にこの問題を回避得ている正確にどのようにはるかに少ない絶対最善の方法を覚えているが、ここではありません(おそらく短命の)クライアント - >バランサー接続ごとに1つです。
bind
/connect
より前のソケットにSO_REUSEADDR
を設定してください。- sysctl
net.ipv4.tcp_tw_reuse
および/またはnet.ipv4.tcp_tw_recycle
をオンにします。 - カーネルに
connect
を自動的に割り当てさせるのではなく、bind
経由で使用するソースIPおよび/またはポートを明示的に選択します。あなたは同じ4タプルで2つの同時接続を持つことはできませんが、それ以外のものは問題ありません。 (例外:私は、同じ4組のためのTIME_WAIT
再利用が大丈夫であるかどうかによって考えにパントよ、私はいくつかのTCPのRFCを読んでTIME_WAIT
についての私の記憶をリフレッシュする必要があると思います。)
おそらくよ少しの実験をしなければならない。良いことは、問題を理解したら、それを再現してテストして、それを修正したかどうかをテストすることです。
関連する問題
- 1. スレッドプールのスケーラビリティとブースト::アシストのTCPサーバー
- 2. ロードバランサのスケーラビリティを備えたWebソケット
- 3. GCE:1 IP上のTCPとHTTPロードバランサ
- 4. 違いbtw Gcloud TCPとHTTPロードバランサ
- 5. TCP接続が最大65000〜
- 6. 大量アップロードのサーバー負荷とスケーラビリティ
- 7. ADF 12c - 最大ルート・ビュー・ポート
- 8. TLS/SSLエンドポイントの前にTCPロードバランサ
- 9. 80/443ポート以外のElasticBeanstalkロードバランサ?
- 10. AWS Beanstalk非HTTPポートへのロードバランサ
- 11. 春のカフカ、TCPポートをプロデューサーとして
- 12. TCP ReceiveBufferSize .Net Frameworkの最大サイズ
- 13. Windows Server 2008の最大tcp/ip接続
- 14. NginxをTCPロードバランサに設定する
- 15. TCPポートへの連続リッスン
- 16. MATLAB TCP/IPポートでのリッスン
- 17. TCP/IPパケットのポート番号
- 18. TCPの許容ポート範囲
- 19. RaspbianのTCPポートを開く
- 20. Java TCPポートがEclipseと接続する
- 21. Cloudfoundry TCP接続(ポート4443)
- 22. GoogleロードバランサとApacheのロードバランサとの比較
- 23. TCPポートに基づいたTCPフローの一致リュウコントローラ
- 24. Graphqlとリレーのスケーラビリティ
- 25. ブロックチェインとスケーラビリティ
- 26. TCPポートCのデータをリッスンするC#
- 27. DHCP用のTCPポート67および68
- 28. c#.net外部のtcpポートを開く
- 29. WebサーバーがSQL Server Expressと通信するときのTCPポート
- 30. スケーラビリティの最も高いPython web-framework + db?