将保留多少系统资源以保持1,000,000个websocket打开?

k.k*_*lou 112 websocket

Websocket很好,但它能够处理1,000,000个并发连接吗?
将保留多少系统资源以保持1,000,000个websocket打开?

Ale*_*one 147

在今天的系统上,处理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取决于您需要的数据吞吐量.

  • 这是香草亚马逊Linux.最大文件描述符增加了.TCP发送缓冲区减少到1600字节(Lightstreamer默认完成,但可以手动调整).MSS是默认的. (13认同)
  • 我假设这是一些Linux的味道.你能否分享关于如何调整内核的其他信息?最大文件描述符/ tcp窗口大小等? (7认同)
  • 通常,轮询它的两种风格(定期轮询和长轮询)比持久的 websocket 连接给服务器带来更多的负载。 (3认同)

kan*_*aka 61

更新的答案

简短的回答:是的,但它很昂贵.

答案很长:

这个问题并不是WebSockets独有的,因为WebSockets基本上是长寿命的TCP套接字,具有类似HTTP的握手和最小的消息框架.

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

连接数不是主要问题(这主要只是内核调优和足够内存的问题),它是处理和发送/接收每个连接的数据.如果传入的连接长时间分散,并且它们大多是空闲的或不经常发送小块的静态数据,那么你可能会获得远高于1,000,000个并发连接的连接.但是,即使在这些条件下(大多数空闲的慢速连接),您仍然会遇到未配置和设计用于处理大量连接的网络,服务器系统和服务器库的问题.

请参阅Alessandro Alinone关于500,000个连接的近似资源使用情况的答案.

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

  • 显然,单个 JVM 上可能有 1200 万个套接字连接。看看他们是如何做到的 https://mrotaru.wordpress.com/2013/10/10/scaling-to-12-million-concurrent-connections-how-migratorydata-did-it/ (2认同)