博客 | NGINX

NGINX WebSocket 性能

NGINX-F5-horiz-black-type-RGB 的一部分
里克·尼尔森缩略图
里克·尼尔森
2014 年 6 月 24 日发布

我们最近测试了 NGINX 对WebSocket连接进行负载均衡的可扩展性。 即使有 50,000 个活动的 WebSocket 连接,NGINX 所需的内存也不到 1 Gb,CPU 容量也不到 1 核,而且当加载非常繁忙的连接时,内存使用量保持稳定,并且增长速度比消息大小慢。 您环境中的性能将取决于您的应用的性质,但这些测试的结果可以提供您预期 NGINX 将使用的资源量的某种指示。

测试环境

本次测试使用了以下机器:

  • 负载生成器 - 6 核 Xeon EX5645 @ 2.40 GHz、48 GB RAM 上的thor
  • NGINX - 版本 1.7.0,x86_64,在 6 核 Xeon E5645 @ 2.40 GHz、48 GB RAM 上有 6 个工作器
  • WebSocket 后端 - 4 核 Xeon E5-2660 0 @ 2.20 GHz、8 GB RAM 上的 Node.js 回显服务器

测试

我们进行了两组测试。

第一组测试模拟了长期且大部分处于空闲状态的连接。 连接数从 1,000 到 50,000 不等,消息大小从 10 到 4096 字节不等,消息频率从 0.1 到 10 秒(我们认为较低)。

结果表明,WebSocket 连接所需的总内存取决于连接数,并且每个连接使用的内存是一致的。 内存利用率不受消息大小或频率的影响。 CPU 利用率基本上与连接数呈趋势关系,即使有 50,000 个连接,也不会使用完整的 CPU 核心。 此处表示的 CPU 利用率通过将所有核心的 CPU 利用率相加而标准化为单个核心。 下图显示了这组测试的结果:

连接1


CPU1


内存1


内存1

第二组测试模拟了短暂但高度活跃的连接。 并发连接数保持恒定为 500,每个连接 50 条消息,消息之间没有延迟。 消息大小范围为 1 至 4096 字节

结果表明,在并发连接数固定的情况下,总内存利用率是消息大小的一个因素,每个连接使用的内存也是如此,但在这两种情况下,内存量变化不大,且以亚线性方式变化,增幅不到 15%。

尺寸2


中央处理器


内存2


记忆库

概括

在这些测试中,NGINX 在代理 WebSocket 服务器时提供了可预测且可扩展的性能。 这些是综合测试,不一定代表真实世界的应用,因此在其他系统上进行的测试结果可能会有所不同。 更多信息请参阅:


“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”