Multithreading 使用nginx运行Node.js应用程序的正确方法

Multithreading 使用nginx运行Node.js应用程序的正确方法,multithreading,node.js,nginx,Multithreading,Node.js,Nginx,我使用node.js编写了一个web应用程序,使用: 快车 socket.io redis用于会话存储和一些缓存内容 用于持久数据的mysql 这在独立模式下运行良好,我现在想让它在“生产”模式下运行。 实际上,我想让nginx在前面将请求重定向到正在运行的节点服务器 目前,我使用一台物理服务器(i5-4内核)来处理所有事情,但这在将来可能会发生变化(因此可能只针对mysql使用另一台物理服务器,等等) 在这种情况下: 我应该在上游之间使用nginx负载平衡吗?(即使用不同端口运行我的应用

我使用node.js编写了一个web应用程序,使用:

  • 快车
  • socket.io
  • redis用于会话存储和一些缓存内容
  • 用于持久数据的mysql
这在独立模式下运行良好,我现在想让它在“生产”模式下运行。 实际上,我想让nginx在前面将请求重定向到正在运行的节点服务器

目前,我使用一台物理服务器(i5-4内核)来处理所有事情,但这在将来可能会发生变化(因此可能只针对mysql使用另一台物理服务器,等等)

在这种情况下:

  • 我应该在上游之间使用nginx负载平衡吗?(即使用不同端口运行我的应用程序)
nginx配置如下所示:

upstream my_app {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}
那么,什么是将节点作为服务运行的正确方法,以便我可以轻松地重新启动它? 我可以自己创建一个简单的脚本(处理start/stop/restart…),但是我可以使用一些已经可用的东西吗

  • 我应该使用节点集群吗
我的应用程序目前只能在一个线程中运行,但据我所知,我可以使用pm2/nodemon/forever等解决方案来处理多线程或分支进程,但不确定哪一个最适合

我刚刚尝试过pm2,它可以很好地进行集群或分叉节点过程,只是不确定这是使用nginx的方式


谢谢,

我不是100%确定你在问什么,但我会试一试

  • 为了充分利用您的机器,您应该使用群集模块。如果您有4个内核,使用集群将产生应用程序的4个进程;每个芯1个。这是将应用程序运行4次的首选方法,在不同的端口上侦听,并在实例之间实现nginx负载平衡。集群模块的另一个优点是它将重新启动死亡的子模块

  • 正如我在1中提到的,集群模块将在一台机器上的进程之间平衡请求,因此在nginx中只需要1个上游。如果您太想添加第二个(或第三个)服务器,那么应该为每个服务器添加一个上游服务器。同样,每个服务器只有一个上游,因为集群模块应该从那里委派


  • 如果这不是你所要求的,我很抱歉。

    关于将你的应用程序作为服务运行的部分,请看一下这一点。如果这一点没有像我所要求的那样清楚,那么很抱歉。是的,这正好回答了我不同的问题!实际上我想确保做正确的事情。我来看看集群模块。