NGINX WebSocket 性能

NGINX | 2014年6月24日

我们最近测试了NGINX在对WebSocket连接进行负载均衡时的可扩展性。即使有50,000个活跃的WebSocket连接,NGINX所需的内存也不到1 GB,CPU容量不到1个核心。即使连接非常繁忙,内存使用量也保持稳定,且增长速度低于消息大小的增长速度。实际环境中的性能取决于应用的性质,但这些测试结果可以大致说明NGINX预计会占用多少资源。

测试环境

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

  • 负载生成器:thor,配置为6核Xeon EX5645 @ 2.40 GHz、48 GB RAM
  • 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至4,096字节,消息发送间隔为0.1至10秒(我们认为这是较低的频率)。

结果表明,WebSocket连接所需的总内存取决于连接数,且每个连接的内存用量基本一致。内存利用率不受消息大小或频率影响。CPU利用率基本随连接数变化,即使达到50,000个连接,也未占满一个CPU核心。此处所示的CPU利用率已归一化为单个核心,即将所有核心的CPU利用率相加。下图显示了这组测试的结果:

连接1


CPU 1


内存1


memk1

第二组测试模拟了持续时间短但活动频繁的连接。并发连接数保持为500,每个连接发送50条消息,消息之间无延迟。消息大小范围为1至4096字节。

结果表明,在并发连接数固定的情况下,总内存使用量和每个连接的内存使用量都会受到消息大小的影响,但两者的变化幅度都不大,且呈次线性增长,增幅低于15%。

大小2


CPU 2


mem2


memk2

总结

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


分享

关于作者

Rick Nelson
Rick Nelson解决方案工程区域副总裁

Rick Nelson 的更多博客文章

相关博客文章

NGINX Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。