我遇到了使用PM2创建Node.js集群的情况。向工作人员发出的单个请求将花费大量时间(2分钟以上),因为它正在执行密集的计算(分步执行),并在不同阶段进行了一些I / O操作(步骤1是“通过HTTP下载”,中间和最后一步是“写入磁盘”)。向群集发送请求的客户端通过两个因素来限制其发送的请求:
例如,如果集群有10个节点,则客户端将仅以每秒1个的速度向集群发送10个请求,并且直到一个或多个请求成功返回或成功返回之前,它不会再发送任何请求。失败,这意味着一个或多个工作人员现在应该有空做更多的工作,然后客户端将向集群发送更多的工作。
在监视服务器上的负载时,负载均衡器似乎并没有像传统的轮询分配方案所期望的那样平均分配工作。发生的事情是,当集群中有免费的工作人员时,单个工作人员(通常是第一个)会收到很多请求。最终这将使工人赚钱,以进行故障处理。
我们实施了一种机制,以防止工作人员仍在处理前一个请求时继续处理新请求。这样可以防止出现故障,但是尽管群集中有空的工作人员,但是仍然拒绝了许多请求!
您能想到这种现象发生的原因吗,或者如何改善PM2的工作方式?