web-dev-qa-db-ja.com

100万のWebSocket接続を処理する方法(Nginx / HAProxy / Amazon / Google)

nginxまたはhaproxyターゲットに対して推奨される設定100K同時Websocket接続?私が思うに、単一のnginxはそのようなトラフィックと同時接続を受け入れることができません。 nginx/haproxyへのトラフィックはどのように分割する必要がありますか(DNS lvlまたは利用可能なAmazon/Googleオプション)。 1つのnginxで同時に処理できるWebSocketの数はどれくらいですか?

Google検索とSO投稿から関連情報を収集しようとしました。

3
Ravi Kumar

さらに高い負荷でhaproxyロードバランサーの背後でチャットサーバーを実行している人がいます。プライベート電子メール(統計ページのコピーを含む)で私に報告された最大の負荷は、プロセスごとに約30万接続(したがって、600ソケット)でした。 Linuxのデフォルトでは、プロセスは1Mのファイル記述子に制限されている(したがって、500kのエンドツーエンド接続)が、/ procで微調整できることに注意してください。

そのような負荷で考慮すべき最も重要なことは、必要なRAMの量です。カーネル側のソケットバッファーは、常に、片側の方向ごとに少なくとも4kBを必要とするため、エンドツー-end接続。HAProxy1.5以下では、接続ごとに2つのバッファーがあります(例:4kBバッファーはWebSocketには十分です)1.6はこれらのバッファーなしで実行でき、データとのまれな接続にのみ割り当てられます。少なくとも16 GBですRAM接続100万あたり、または古いバージョンでは約24 GB。これをSMPマシン上の複数のプロセスに分散して待ち時間を減らすことは価値があるかもしれません。単純に1Mを確立するために、 100k conns/sで10秒かかる可能性があります。これらすべての接続は、それぞれ数バイトの処理を誘発し、1Mのアクティブな接続を処理すると、重要な処理とシステムの高負荷が確実に誘発されます。

8
Willy Tarreau