【问题标题】:How many system resources will be held for keeping 1,000,000 websocket open? [closed]保持 1,000,000 个 websocket 处于打开状态将占用多少系统资源? [关闭]
【发布时间】:2013-07-01 03:31:59
【问题描述】:

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

【问题讨论】:

    标签: websocket


    【解决方案1】:

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

    【讨论】:

    • 我假设这是某种 linux 风格。您能否分享有关如何调整内核的其他信息?最大文件描述符/tcp 窗口大小等?
    • 它是普通的 Amazon Linux。最大文件描述符增加。 TCP 发送缓冲区减少到 1600 字节(默认情况下由 Lightstreamer 完成,但可以手动调整)。 MSS 是默认设置。
    • 这个软件是完全免费的还是需要一些费用才能使用?
    • @AvtandilKavrelishvili:有免费版和付费版。
    • 通常,两种方式的轮询(定期轮询和长轮询)都会给服务器带来比持久的 websocket 连接更多的负载。
    【解决方案2】:

    更新答案

    简答:是的,但是很贵。

    长答案

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

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

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

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

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

    【讨论】:

    • 在单个 JVM 上显然可以有 1200 万个套接字连接。看看他们是怎么做到的mrotaru.wordpress.com/2013/10/10/…
    • @JacquesKoorts thx
    • 我认为仅 websocket 连接的总数不是问题,内核可以处理 10M+ 就好了。问题在于缓冲(例如,如果您需要将大量数据推送到许多套接字并且客户端不刷新套接字,那么您最终会为传出 TCP/IP 缓冲区保留大量 RAM)和服务器上每个套接字的数据。例如,如果您在服务器上运行 Node.js,则每个连接的总 RAM 用于保存与单个连接相关的任何对象。理论上也可以对其进行优化,但它会非常昂贵,因为您需要与 Linux 内核类似的代码质量。
    猜你喜欢
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2010-09-06
    • 2023-02-17
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多