PM2集群模式下轮询连接分发机制的疑问
PM2集群模式调度行为的原因解析
你观察到的现象并非PM2对请求处理时长的管控机制导致,核心原因在于Node.js cluster模块的原生轮询逻辑+操作系统TCP连接复用特性,具体拆解如下:
连续调用时的请求分配逻辑
当你连续发起API请求时,客户端会通过HTTP Keep-Alive特性复用已建立的TCP连接。而Node cluster的round-robin调度仅在新TCP连接建立阶段生效——一旦连接分配给某个worker(比如实例13),后续复用该连接的所有请求都会直接发往这个worker,只要它处于空闲状态,就会持续处理这些请求。间隔调用后的请求分配逻辑
当请求间隔超过HTTP Keep-Alive的超时时间(通常为几分钟,由客户端/服务器配置决定),原有TCP连接会被关闭。再次发起请求时,会创建新的TCP连接,此时cluster模块会按照轮询规则分配下一个worker实例(比如实例14),哪怕之前的所有worker都处于空闲状态。
PM2默认完全沿用Node.js cluster模块的原生调度策略,没有额外添加针对请求处理时长的管控机制。如果需要自定义负载均衡逻辑,可以选择:
- 使用PM2的
fork模式替代cluster模式,自行实现请求分发逻辑 - 引入外部负载均衡工具接管请求调度
内容的提问来源于stack exchange,提问作者Bennison J
相关产品推荐
相关产品推荐

