0

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

  • 表示
  • 套接字.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;
}

那么,将节点作为服务运行以便我可以轻松重新启动它的正确方法是什么?我可以自己创建一个简单的脚本(处理启动/停止/重启,...),但也许我可以使用已经可用的东西吗?

  • 我应该使用节点集群吗?

我的应用程序目前在单线程中运行,但从我所读到的内容中,我知道我可以使用 pm2/nodemon/forever 等解决方案进行多线程或分叉我的进程,但不确定哪一个最适合。

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

谢谢,

4

1 回答 1

0

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

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

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

如果这不是你要问的,我很抱歉。

于 2013-11-08T18:36:23.663 回答