我们最近测试了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利用率相加。下图显示了这组测试的结果:




第二组测试模拟了持续时间短但活动频繁的连接。并发连接数保持为500,每个连接发送50条消息,消息之间无延迟。消息大小范围为1至4096字节。
结果表明,在并发连接数固定的情况下,总内存使用量和每个连接的内存使用量都会受到消息大小的影响,但两者的变化幅度都不大,且呈次线性增长,增幅低于15%。




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

相关博客文章
NGINX Plus R26 正式发布
NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。
使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。
Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。
NGINX Plus R19 正式发布
NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。
NGINX现已正式加入F5
NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。
