将NodeJS集群作为工作负载更改

我试图把工人集群分配到最大10,只有当工作负载增加 。 可以这样做吗?

我已经尝试了强大的集群控制的setSize ,但我找不到一个简单的自动分叉方式(例如,如果很多请求正在完成,然后叉),或closures/“自杀”叉(也许有一个timeOut if没有任何事情正在做,就像在这个答案中 )

这是我的回购在GitHub的主要文件

先谢谢你!!

我假设你已经有了一些想法来传播你的负载,所以我不会包含关于这个的详细信息,而是专注于这个所需的进程间通信。

通知主人

要将任意数据发送到主机,可以使用worker的process.send() 。 我会这样做的方式可能是沿着这些步骤:

  1. 应用程序已启动
  2. 产生的工人人数最less
  3. 每个worker每次收到一个新请求时都会发送一个request消息,通过process.send()
  4. 主人跟踪所有工作人员的所有request事件
  5. 如果request事件的数量增加超过预定义的阈值(即> 100个请求/秒),则产生新的工作者
  6. 如果request事件的数量减less到预定义的阈值以下,则要求其中一个工作人员停止处理新的请求并优雅地closures自己(请注意,它不应该简单地终止进程以避免中断正在进行的请求)

主要观点是:不要把重点放在时间上 – 关注速度 。 在一个每秒处理数十至数千个请求的应用程序中, setTimout() (它的任务可能是在工作空闲太久的情况下杀死worker)将永远不会被触发,因为Node.js均匀地分配加载你的工作人员 – 你可以从一个工人开始,但是一旦你达到了最大限度,即使每秒只有一个请求,你也不会在连续的负载下再次下降到一个工人。

应该注意的是,产生更多的工作者比你拥有的CPU核心的数量还要多。 然而,从单个工作人员开始,随着负载的增加,逐步增加所有内核的数量可能是有益的。