【问题标题】:Load balance two separate node.js processes on two servers?在两台服务器上对两个单独的 node.js 进程进行负载平衡?
【发布时间】:2013-01-07 07:47:36
【问题描述】:

我运行一个小的 socket.io node.js 应用程序,它总是有少量并发用户。在大多数情况下,它可以 100% 的时间在单个进程上运行(无论是在我的 Linode 还是 Heroku[1] 上)。

我希望将它宣传几天,在此期间我预计会有相当多的流量。这意味着并发 websocket/xhr-polling 连接。但是,这两个 socket.io 连接不一定必须相互通信。

该应用程序在我的 Linode 上运行了很长一段时间,但我最近将它转移到了一个免费的 heroku dyno 上。即使使用 xhr-polling(heroku 本身不支持 websockets)运行也非常快。

我很好奇如何利用我的 Linode 来运行和负载平衡应用程序。但是,如果它开始变慢,请将用户推到正在运行的 heroku dyno(反之亦然)。这应该可以通过node-http-proxy 之类的方式实现,但我很难让它正常运行。希望我可以对其进行微调,使其达到一个点,或者我可以轻按一个开关,它就会开始平衡用户到第二个站点。

基本上,我只是希望指出正确的方向。代码会很好,但不是必需的。解决方案甚至不必在节点中。

谢谢!

[1] 我也尝试了 nodejitsu 很长一段时间,但发现它还没有准备好用于生产。

编辑:我应该只使用简单的循环,正如here 解释的那样吗?如果我想偏爱一个怎么办?

【问题讨论】:

  • 既然 Heroku 已经有一个有效的负载均衡器,为什么不将它们用于生产应用程序主机呢?如果您的流量超出预期,他们的设置将使您能够轻松快速地扩大规模。
  • 因为第二台测功机的价格为 34 美元,而且我已经拥有一台非常好的 Linode 至少一个月了。我是学生。 :) - 另外,我不确定 Heroku 是否会正确处理多个测功机上的 socket.io。
  • 这是Cluster 的用途,但仍处于实验状态。
  • 集群用于在一台服务器上分叉一个进程。这里我想在两个独立的服务器上对两个独立的进程进行负载均衡。
  • @switz 集群负载平衡多个 Node.js 进程的请求。标题有点误导,建议改一下。

标签: node.js express load-balancing derbyjs


【解决方案1】:

您可以将Foreman 用于此类工作:

过程文件

web: node app.js

然后只需在命令行中调用它:

$ foreman start -c web=4

这将创建您的节点应用程序的 4 个实例,侦听不同的端口。

08:29:41 web.1  | started with pid 2576
08:29:41 web.2  | started with pid 1968
08:29:41 web.3  | started with pid 2712
08:29:41 web.4  | started with pid 5280
08:29:42 web.3  | Express server listening on port 5002
08:29:42 web.1  | Express server listening on port 5000
08:29:42 web.2  | Express server listening on port 5001
08:29:42 web.4  | Express server listening on port 5003

然后您可以使用 nginx 并将它们设置为您的上游。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2012-05-24
    • 1970-01-01
    相关资源
    最近更新 更多