154

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

4

2 回答 2

211

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

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

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

我们在一个 m2.4xlarge 实例上安装了 Lightstreamer 服务器(它是一个 WebSocket 服务器等)。这意味着 8 个内核和 68.4 GiB 内存。

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

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

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

于 2013-07-03T16:45:14.893 回答
79

更新的答案

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

长答案

这个问题不是 WebSockets 独有的,因为 WebSockets 从根本上说是长期存在的 TCP 套接字,具有类似 HTTP 的握手和最小的消息框架。

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

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

请参阅 Alessandro Alinone 关于 500,000 个连接的大致资源使用情况的回答。

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

于 2013-07-03T15:20:51.953 回答