154

Websocket は優れていますが、1,000,000 の同時接続を処理できるでしょうか?
1,000,000 個の WebSocket を開いたままにしておくと、いくつのシステム リソースが保持されるでしょうか?

4

2 に答える 2

211

今日のシステムでは、100 万の同時 TCP 接続を処理することは問題ではありません。

私たち自身のテストに基づいて断言できます (完全な開示: 私は Lightstreamer の CTO です)。

一部の顧客に対して、1 台のボックスで 100 万接続に到達できることを何度か実証する必要がありました (スーパーモンスター マシンである必要はありません)。ただし、500K の同時接続をテストした構成を要約してみましょう。これは、Amazon EC2 で実行されたはるかに最近のテストです。

m2.4xlarge インスタンスに Lightstreamer Server (特に WebSocket サーバー) をインストールしました。これは、8 コアと 68.4 GiB メモリを意味します。

ライトストリーマー サーバーへの 500,000 の同時接続を作成するために、11 台のクライアント マシンを起動しました。テストは、サーバーからのアウトバウンド スループットの合計が 90,000 更新/秒になるように構成され、450 Mbit/秒のアウトバウンド帯域幅のピークが得られました。

サーバーは 13 GiB を超える RAM を使用することはなく、CPU は約 60% で安定していました。

少なくとも 30 GiB RAM を使用すると、100 万の同時ソケットを処理できます。必要な CPU は、必要なデータ スループットによって異なります。

于 2013-07-03T16:45:14.893 に答える
79

更新された回答

短い答え: はい、しかし高価です。

長い答え:

WebSocket は基本的に長寿命の TCP ソケットであり、HTTP のようなハンドシェイクとメッセージの最小限のフレーミングを備えているため、この質問は WebSocket に固有のものではありません。

本当の問題は、1 つのサーバーで 1,000,000 の同時ソケット接続を処理できるか、そしてこれがどのサーバー リソースを消費するかということです。答えはいくつかの要因によって複雑になりますが、適切なサイズのシステム (大量の CPU、RAM、および高速ネットワーク) と、調整されたサーバー システムと最適化されたサーバー ソフトウェアを使用すると、1,000,000 の同時アクティブ ソケット接続が可能です。

接続の数は主要な問題ではなく (これは主に、カーネルのチューニングと十分なメモリの問題です)、それらの接続のそれぞれとの間でデータを処理および送受信することです。着信接続が長期間にわたって分散し、それらがほとんどアイドル状態であるか、静的データの小さなチャンクを送信する頻度が低い場合、おそらく 1,000,000 の同時接続よりもはるかに高くなる可能性があります. ただし、これらの条件 (ほとんどアイドル状態の低速接続) でも、多数の接続を処理するように構成および設計されていないネットワーク、サーバー システム、およびサーバー ライブラリで問題が発生します。

500,000 接続のおおよそのリソース使用量については、Alessandro Alinone の回答を参照してください。

サーバーを構成し、多数の接続をサポートするようにサーバー ソフトウェアを作成する方法については、古いもののまだ適用可能なリソースを次に示します。

于 2013-07-03T15:20:51.953 に答える