将保留多少系统资源以保持1000000个websocket处于打开状态?

将保留多少系统资源以保持1000000个websocket处于打开状态?,websocket,Websocket,Websocket很好,但它能处理1000000个并发连接吗? 将保留多少系统资源以保持1000000个websocket处于打开状态?更新的答案 简短回答:是的,但是很贵 长答案: 这个问题不是WebSocket独有的,因为WebSocket基本上是长寿命的TCP套接字,具有类似HTTP的握手和最小的消息帧 真正的问题是:单个服务器能否同时处理1000000个套接字连接,这将消耗哪些服务器资源?答案是复杂的,有几个因素,但对于一个适当大小的系统(大量CPU、RAM和快速网络),以及一个经过调优

Websocket很好,但它能处理1000000个并发连接吗?

将保留多少系统资源以保持1000000个websocket处于打开状态?

更新的答案

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

长答案

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

真正的问题是:单个服务器能否同时处理1000000个套接字连接,这将消耗哪些服务器资源?答案是复杂的,有几个因素,但对于一个适当大小的系统(大量CPU、RAM和快速网络),以及一个经过调优的服务器系统和优化的服务器软件,1000000个同时活动的套接字连接是可能的

连接的数量不是主要问题(这主要是内核调优和足够内存的问题),而是处理和向每个连接发送/接收数据。如果传入的连接分布在很长的一段时间内,并且它们大多处于空闲状态,或者很少发送小块静态数据,那么您可能会获得比1000000个同时连接多得多的连接。但是,即使在这些条件下(连接速度慢,大部分处于空闲状态),您仍然会遇到网络、服务器系统和服务器库的问题,这些网络、服务器系统和服务器库没有配置和设计为处理大量连接

请参阅Alessandro Alinone关于500000个连接的近似资源使用率的回答

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


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

根据我们自己的测试,我可以肯定这一点(完全披露:我是Lightstreamer的首席技术官)

我们曾多次向我们的一些客户演示,一台机器(不一定是超级怪物机器)可以连接100万个连接。但让我回顾一下我们测试500K并发连接的配置,因为这是在AmazonEC2上执行的一个更为近期的测试

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

我们启动了11台客户端机器,以创建到Lightstreamer服务器的500000个并发连接。该测试的配置使服务器的总出站吞吐量为90000次更新/秒,导致出站带宽峰值为450 Mbit/s

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


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

我假设这是某种linux风格。你能分享一下内核是如何调整的吗?最大文件描述符/tcp窗口大小等?这是普通的Amazon Linux。增加了最大文件描述符。TCP发送缓冲区减少到1600字节(默认情况下由Lightstreamer完成,但可以手动调整)。MSS是默认的。这个软件是完全免费的还是需要一些费用才能使用?@AvtandilKavrelishvili:既有免费版也有付费版。通常,轮询有两种类型(定期轮询和长轮询)比持久的websocket连接给服务器带来更多的负载。显然,单个JVM上可能有1200万个套接字连接。看看他们是怎么做到的@JacquesKoorts thxI认为websocket连接的总数本身并不是一个问题,内核可以处理1000万个以上的连接。问题在于服务器上的缓冲(例如,如果需要将大量数据推送到多个套接字,而客户端没有刷新套接字,则最终会为传出TCP/IP缓冲区保留大量RAM)和每个套接字的数据。例如,如果在服务器上运行Node.js,则每个连接的总RAM将包含与单个连接相关的任何对象。从理论上讲,我们也可以对其进行优化,但这将非常昂贵,因为您需要与Linux内核类似的代码质量。