我们在Windows Server 2012上部署了一个简单的快速节点服务器,仅使用3个参数即可收到GET请求。它对这些参数进行了一些小的处理,有一个非常简单的内存中节点缓存,用于缓存其中一些参数组合,与外部许可证服务器接口以获取请求用户的许可证并将其设置在cookie中,然后是它通过负载均衡器(与zmq一起运行)与一些工作者连接,以下载一些大文件(以块为单位,解压缩并提取它们,将它们写入某些目录)并将其显示给用户。在部署这些文件时,还会启动对工作程序的一些其他调用。
节点服务器不与任何数据库或磁盘通信。它只是等待来自其他一些机器上运行的负载均衡器的响应(这些是长时间操作,通常需要2-3分钟才能发送响应)。因此,基本上,计算和数据库交互发生在其他机器上。节点服务器只是一个简单的消息传递/握手服务器,它等待事件处理程序中的响应,启动其他请求并呈现响应。
目前我们还没有使用'集群'模块或nginx。使用裸骨节点服务器,是否可以同时接受和处理至少16个请求?像http://adrianmejia.com/blog/2016/03/23/how-to-scale-a-nodejs-app-based-on-number-of-users/这样的页面提到一个简单的节点服务器一次只能处理2-9个请求。但即使使用我们的裸机实现,一次也不会接受超过4个请求。
即使在这种情况下,是否还需要使用群集模块或nginx?如何为几百个用户开始扩展此应用程序?
答案 0 :(得分:1)
Express服务器一次可以处理超过9个请求,特别是如果它不与数据库通信。
您所引用的文章假定每个请求都有一些数据库访问权限,并通过节点本身而不是CDN提供静态资产。所有这些都发生在具有1GB RAM的单个CPU上。这是一个数据库和Web服务器都运行在一个内核最小的内核上。
在这种事情上真的没有硬数字;您构建它并查看它的执行情况。如果它不能很好地执行,请在其前面放置一个反向代理,如nginx或haproxy,以进行负载平衡。
但是,根据您的问题,如果您确实遇到了一次只能连接4个连接的瓶颈,听起来您可能会将这些连接打开太长时间并阻止其他连接。最好让节点启动那些长时间运行的进程,关闭连接,然后让这些服务器在它们完成时以某种方式回调。