运行多个nodejs服务器实例进行缩放

我在端口8080上运行nodejs服务器,所以我的服务器一次只能处理一个请求。 我可以看到,如果我一次发送多个请求,则新的请求会一个接一个地排队并执行。

我试图find的是,我如何运行此过程的多个实例/线程。 例如像python服务器的gunicorn。 有没有类似的,而不是在每个实例的多个端口上运行nodejs服务器。

我已经放置了nginx的infront节点进程。 这是足够和推荐的方法。

worker_processes auto; worker_rlimit_nofile 1100; events { worker_connections 1024; multi_accept on; use epoll; } pid /var/run/nginx.pid; http { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; server { listen 80; server_name localhost; access_log /dev/null; error_log /dev/null; location / { proxy_pass http://localhost:8080; } } } 

首先,确保你的node.js进程只使用asynchronousI / O。 如果它不是计算密集型的并且使用asynchronousI / O,它应该能够同时有许多不同的请求“在飞行中”。 如果你的代码devise正确的话,node.js的devise特别适合。 如果您向我们展示了其中一个请求正在做什么的症结所在,我们可以更具体地build议您的服务器代码是否devise得当,以获得最佳吞吐量。

二是仪器和措施,措施,措施。 了解现有node.js服务器中的瓶颈位置,以及导致延迟或sorting的原因。 在开始添加更多的集群或服务器之前,有时候有办法可以大大地修复/改进瓶颈。

第三,使用node.js集群模块 。 这将创build一个主节点.js进程,在多个subprocess之间自动进行平衡。 您通常希望为您的服务器计算机中的每个实际CPU创build一个集群子集,因为这将最有效地利用您的CPU。

第四,如果需要扩展到多个实际的服务器计算机,则可以使用负载均衡器或反向代理(如nginx)在多个主机间共享负载。 如果您的服务器中有四核CPU,则可以在每台服务器计算机上运行一个具有四个node.js进程的集群,然后使用nginx在您所拥有的多个服务器盒之间进行平衡。

请注意,添加nginx负载均衡的多个主机是最后一个选项,而不是第一个选项。

像@poke说的那样,你会在前面使用一个反向代理和/或一个负载平衡器。

但是,如果你想要一个软件运行多个节点的实例,平衡和其他东西,你应该检查pm2

http://pm2.keymetrics.io/