Node.js群集 - 什么决定负载平衡?

dth*_*ree 6 cluster-computing node.js

我已经非常彻底地阅读了这篇文章,并且花了几个小时研究Node.js中的聚类(分叉过程)主题.

我在文章中似乎无法理解的是,如果它们都在同一个端口上侦听,那么是什么决定了哪个工作进程获得请求X?

主进程是否有办法引导请求,还是只是随机的?

Aar*_*our 6

有一个很好的解释在这里。长话短说,根据您的节点版本,有两种不同的行为:

节点 0.8-0.10(以及 Windows 上的 0.12+):每个进程都侦听端口。操作系统决定在新连接进入时唤醒哪个。在某些操作系统下的某些应用程序中,这不能很好地工作,并且会留下少数进程拥有绝大多数连接;在大多数情况下它工作得很好。

节点 0.12+(Windows 除外):主进程侦听端口。当他们进来时,它以循环方式将他们交给工人。

在这两种情况中的任何一种情况下,您的应用程序都应该将其视为随机的(尽管您可以假设合理的负载平衡特性)。但是,如果你出于某种原因需要更精细的控制,那篇文章中的一句话(注意是一个node.js核心贡献者写的,所以这里有一定的权威):

将选择算法转变为开发人员可配置或可插入的东西是一个正在考虑的变化。

说你可能会得到你要找的东西。Github 上似乎存在与此选项有关的问题

  • 不知道 0.12,但我认为它是 0.11.2 中的 RR。这是相关的[提交](https://github.com/joyent/node/commit/e72cd41) (3认同)