将NodeJS群集作为工作负载变化

时间:2015-04-22 12:32:47

标签: node.js

我正在尝试将工作人员群集分配到最大值10,并且仅在工作负载增加时。可以吗?

我尝试过使用strong-cluster-control's setSize,但是我找不到一种简单的自动分叉方式(例如,如果有许多请求正在进行分叉),或者关闭/“自杀”分叉(可能是timeOut如果没有做任何事情,比如this answer

This is my repo's main file at GitHub

提前谢谢!!

1 个答案:

答案 0 :(得分:0)

我认为你已经对如何扩展负载有了一些了解,所以我不会包含有关它的详细信息,而是专注于此所需的进程间通信。

通知主人

要向主人发送任意数据,您可以使用工作人员的process.send()。我会采取的方式可能就是这些步骤:

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

    要点是:不要专注于时间 - 关注率。在一个应该每秒处理数十到数千个请求的应用程序中,setTimout()(如果它已经空闲太长时间可能会杀死该工作人员的任务)永远不会触发,因为{{3}在你的工人之间 - 你可以从一个工人开始,但是一旦达到最大值,即使每秒只有一个请求,你也不会在连续负载下再次降到一个工人。

    应该注意的是,产生更多的工作人员比你拥有的CPU核心数量更适得其反。但是,从单个工作人员开始,随着负载的增加逐渐增加所有核心的数量,这可能是有益的。