【发布时间】:2017-07-03 07:23:23
【问题描述】:
我们在 windows server 2012 上部署了一个简单的 express 节点服务器,它只接收 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 吗?如何为几百个用户扩展这个应用程序?
【问题讨论】:
-
如果一次接受的请求不超过 4 个,听起来您的应用程序遇到了某种强加的限制(例如连接池已用完连接并等待连接释放向上)。您的故事中有太多活动部分无法确定罪魁祸首,但首先要删除请求处理程序的部分内容,以查看可能导致阻塞的部分(此外,您链接到的博客文章实际上并未说明单个节点服务器一次只能处理 2-9 个请求)。
标签: node.js express nginx scalability