50.000 个并发连接的 Node.js 系统要求
Posted
技术标签:
【中文标题】50.000 个并发连接的 Node.js 系统要求【英文标题】:Node.js system requirements for 50.000 concurrent connections 【发布时间】:2014-02-14 14:33:28 【问题描述】:情况是每分钟大约有 50.000 台电子设备将连接到在 node.js 中创建的 Web 服务一次。每个人都将发送一个包含一些 JSON 数据的 POST 请求。 所有这些数据都应该得到保护。 Web 服务将接收这些请求,将数据保存到数据库中。 读取请求也可以从数据库中获取一些数据。
我想建立一个基于以下基础设施的系统:
Node.js + memcached +(mysql 集群或 Couchbase)
那么,我需要为我的 Web 服务器分配哪些内存要求才能处理所有这些连接?假设在悲观的情况下我会有 50.000 个并发请求。
如果我使用 SSL 来保护连接会怎样?我是否会为每个连接增加太多开销? 我应该扩展系统来处理它们吗?
你有什么建议?
非常感谢!
【问题讨论】:
【参考方案1】:当然,不可能提供任何有价值的计算,因为它总是非常具体。我建议您从一开始就开发可扩展和可扩展的系统架构。 并使用 JMeter https://jmeter.apache.org/ 进行负载测试。然后,您将能够从 1000 个扩展到无限连接。 这是一篇 1 000 000 连接文章http://www.slideshare.net/sh1mmer/a-million-connections-and-beyond-nodejs-at-scale
【讨论】:
【参考方案2】:请记住,您的 nodejs 应用程序将是单线程的。这意味着当您增加并发请求的数量时,您的性能会严重下降。
为了提高性能,您可以做的是为您机器上的每个核心创建一个节点进程,所有这些核心都在代理(比如 nginx)后面,您还可以为您的应用程序使用多台机器。
如果您只向 memcache 发出请求,那么您的 api 不会降级。但是一旦你开始查询 mysql,它就会开始限制你的其他请求。
编辑: 正如 cmets 中所建议的,您还可以使用集群来分叉工作进程,并让它们相互竞争传入请求。 (工作人员将在单独的线程上运行,从而允许您使用所有内核)。 Node.js on multi-core machines
【讨论】:
抱歉,-1 因为这不是使用 Node.js 部署的正确方法。要使用更多进程,您应该使用cluster core module,它允许您启动可能共享一个套接字或端口的工作进程。即不需要反向代理。 虽然阿里说节点单线程是对的,但还是有希望的。请注意:JXcore 通过增加libuv threadpool 来利用多线程。 Web workers 也在通往核心的路上。此外,如果您没有使用服务器正确配置事件循环(错误的 conf 设置)或不使用池,mysql 只会开始限制您的事件循环。我推荐felixge的司机。 :)以上是关于50.000 个并发连接的 Node.js 系统要求的主要内容,如果未能解决你的问题,请参考以下文章