Websocket很好,但它能够处理1,000,000个并发连接吗? 将保留多少系统资源以保持1,000,000个websocket打开?
答案 0 :(得分:137)
在今天的系统上,处理100万个并发TCP连接不是问题。
我可以根据自己的测试确认(完全披露:我是Lightstreamer的首席技术官)。
我们必须多次向一些客户证明,在一个盒子上可以达到100万个连接(并不一定是超级怪物机器)。但是,让我回顾一下我们测试500K并发连接的配置,因为这是在Amazon EC2上执行的更新近的测试。
我们在m2.4xlarge实例上安装了Lightstreamer Server(其中包括WebSocket服务器)。这意味着8个核心和68.4 GiB内存。
我们推出了11台客户端计算机,以创建与Lightstreamer服务器的500,000个并发连接。配置测试时,服务器的总出站吞吐量为90,000次/秒,导致出站带宽达到450 Mbit / s。
服务器从不使用超过13 GiB的RAM,CPU稳定在60%左右。
使用至少30 GiB RAM,您可以处理100万个并发套接字。所需的CPU取决于您需要的数据吞吐量。
答案 1 :(得分:55)
更新了答案
简短回答:是的,但价格昂贵。
答案很长:
这个问题并不是WebSockets特有的,因为WebSockets基本上是长寿命的TCP套接字,具有类似HTTP的握手和最小的消息框架。
真正的问题是:单个服务器可以同时处理1,000,000个套接字连接以及这会占用哪些服务器资源?答案因多种因素而变得复杂,但对于适当大小的系统(大量CPU,RAM和快速网络)以及经过调整的服务器系统和优化的服务器软件,可以同时进行1,000,000个活动套接字连接。
连接数不是主要问题(主要只是内核调优和足够内存的问题),它是处理和发送/接收来自每个连接的数据。如果传入的连接长时间分散,并且它们大多是空闲的或不经常发送小块的静态数据,那么你可能会获得远高于1,000,000个并发连接的连接。但是,即使在这些条件下(大多数空闲的慢速连接),您仍然会遇到网络,服务器系统和服务器库的问题,这些网络,服务器系统和服务器库没有配置和设计来处理大量连接。
请参阅Alessandro Alinone关于500,000个连接的近似资源使用情况的答案。
以下是一些较旧但仍然适用的资源,可以阅读有关如何配置服务器和编写服务器软件以支持大量连接的信息: