在两台服务器上负载均衡两个独立的node.js进程?

时间:2013-01-07 07:47:37

标签: node.js express load-balancing derbyjs

我运行一个小的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很长一段时间了,只是没有为生产使用做好准备。

编辑:我应该使用简单的roundrobin,如here所述吗?如果我想支持一个而不是另一个怎么办?

1 个答案:

答案 0 :(得分:0)

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

<强> Procfile

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并将它们设置为你的上游。