保持1,000,000个Websocket开放时将占用多少系统资源?[关闭]


122

Websocket很好,但是它能够处理1,000,000个并发连接吗?
保持1,000,000个Websocket开放时,将占用多少系统资源?

Answers:


65

更新的答案

简短的回答:是的,但是很贵。

长答案

这个问题并不是WebSocket独有的,因为WebSocket从根本上讲是寿命很长的TCP套接字,具有类似HTTP的握手功能,并且消息的帧最少。

真正的问题是:单个服务器可以处理1,000,000个并发套接字连接,这将消耗哪些服务器资源?答案由于多种因素而变得复杂,但是对于适当大小的系统(大量的CPU,RAM和快速联网)以及经过调整的服务器系统和优化的服务器软件,可以同时进行1,000,000个活动套接字连接。

连接的数量不是主要问题(主要只是内核调整和足够的内存问题),它是处理数据以及向/从每个连接发送/接收数据的问题。如果传入的连接分散很长一段时间,并且它们大部分处于空闲状态,或者不经常发送小块静态数据,那么您获得的连接数可能甚至超过1,000,000个。但是,即使在这种情况下(连接处于低速状态的慢速连接),您仍然会遇到未配置和设计为处理大量连接的网络,服务器系统和服务器库的问题。

有关500,000个连接的大约资源使用情况,请参阅Alessandro Alinone的答案。

以下是一些较旧但仍适用的资源,以阅读如何配置服务器以及编写服务器软件以支持大量连接的信息:


1
单个JVM上大约有1200万个套接字连接。看看他们是如何做到的mrotaru.wordpress.com/2013/10/10/...
雅克Koorts

@JacquesKoorts thx
BG BRUNO

159

在当今的系统上,处理100万个并发TCP连接已不是问题。

我可以根据我们自己的测试确认这一点(完全公开:我是Lightstreamer的CTO)。

我们不得不向我们的一些客户演示几次,证明在一个盒子上(不一定是超级怪兽机器)可以达到100万个连接。但是,让我回顾一下测试500K并发连接的配置,因为这是在Amazon EC2上执行的最新测试。

我们在m2.4xlarge实例上安装了Lightstreamer Server(其中包括WebSocket服务器)。这意味着8核和68.4 GiB内存。

我们启动了11台客户端计算机,以创建与Lightstreamer Server的500,000个并发连接。对测试进行了配置,以使服务器的总出站吞吐量为90,000个更新/秒,从而导致450 Mbit / s出站带宽的峰值。

服务器从未使用超过13 GiB的RAM,CPU稳定在60%左右。

使用至少30个GiB RAM,您可以处理100万个并发套接字。所需的CPU取决于所需的数据吞吐量。


7
我假设这是某种Linux风格。您能否分享有关内核如何调整的其他信息?最大文件描述符/ TCP窗口大小等?
quixver 2014年

14
那是原始的Amazon Linux。最大文件描述符增加了。TCP发送缓冲区已减少到1600字节(Lightstreamer默认完成,尽管可以手动调整)。MSS是默认设置。
亚历山德罗·阿利诺内

这个软件是完全免费的还是使用它需要一些费用?
Avtandil Kavrelishvili

@AvtandilKavrelishvili:有免费版和付费版。
亚历山德罗·阿利诺内

如果我使用常规轮询代替websocket,在服务器上会更容易吗?
mFeinstein '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.