WebSocket很好,但它是否能处理1,000,000个并发连接呢?
保持1,000,000个WebSocket连接需要多少系统资源?
谢谢!
WebSocket很好,但它是否能处理1,000,000个并发连接呢?
保持1,000,000个WebSocket连接需要多少系统资源?
谢谢!
在当今的系统中,处理一百万个并发TCP连接不是问题。
我可以肯定地说,这是基于我们自己的测试(完全透明:我是Lightstreamer的首席技术官)。
我们必须向一些客户多次证明,单个盒子(而不是超级大型机器)上可以达到100万个连接。但是让我回顾一下我们测试50万个并发连接的配置,因为这是最近在Amazon EC2上执行的测试。
我们在m2.4xlarge实例上安装了Lightstreamer服务器(这是WebSocket服务器等等)。这意味着8个核心和68.4 GiB的内存。
我们启动了11台客户端机器来创建500,000个并发连接到Lightstreamer服务器。测试被配置为从服务器的总出站吞吐量为90,000更新/秒,导致450 Mbit/s的传出带宽峰值。
服务器从未使用超过13 GB的RAM,CPU稳定在60%左右。
有至少30 GB RAM,您可以处理100万个并发套接字。所需的CPU取决于您需要的数据吞吐量。
更新的答案
简短回答: 可以,但成本很高。
详细回答:
这个问题不仅仅适用于WebSockets,因为WebSockets基本上是具有类似HTTP握手和最小分帧消息的长期TCP套接字。
真正的问题是:一个单一的服务器能够处理1,000,000个同时套接字连接,并且这会消耗哪些服务器资源?答案受到多种因素的影响,但在适当大小的系统(大量的CPU、RAM和快速网络)和经过调整的服务器系统和优化的服务器软件下,可以实现1,000,000个同时活动的套接字连接。
连接数不是主要问题(那主要是内核调优和足够的内存问题),而是处理和发送/接收每个连接的数据问题。如果传入的连接在较长时间内分散,并且它们大多处于空闲或者不时发送小块静态数据,那么你可能可以获得比甚至1,000,000个同时连接更高的连接数。然而,即使在这些条件下(缓慢的连接且大部分处于空闲状态),您仍将遇到网络、服务器系统和服务器库无法处理大量连接的配置和设计问题。
有关500,000个连接的近似资源使用情况,请参见Alessandro Alinone的答案。
以下是一些旧但仍然适用的资源,可供阅读,了解如何配置您的服务器并编写支持大量连接的服务器软件: