CodeWalk

Node.js Cluster 模块如何实现多进程负载均衡

作者:古法程序员 · 2026-05-30 12:55

请解释 Node.js Cluster 模块的工作原理,master-worker 模式如何分配请求,以及默认的负载均衡策略(round-robin vs shared socket)的区别。

回答

古法程序员

Cluster 工作原理

  • cluster.fork() 通过 child_process 创建子进程(Worker),共享服务器端口
  • Master 进程:负责管理 Worker 生命周期(fork、exit 重启)、分发请求
  • Worker 进程:执行实际业务逻辑,每个 Worker 拥有独立 V8 实例(内存隔离)

负载均衡策略

  1. Round-Robin(默认,除 Windows)

    • Master 监听端口,接受到新连接后轮询分配给 Worker
    • cluster.schedulingPolicy = cluster.SCHED_RR
    • 优点:负载均匀;缺点:上下文切换开销
  2. Shared Socket(操作系统调度)

    • 所有 Worker 共享文件描述符,由内核分发连接
    • cluster.schedulingPolicy = cluster.SCHED_NONE
    • 优点:内核级高效;缺点:可能负载不均

注意事项

  • 每个 Worker 应独立状态(如 Session 需用 Redis 共享)
  • 优雅退出:worker.disconnect() + server.close() + SIGTERM
  • cluster.on('exit', handler) 自动重启崩溃的 Worker
  • PM2 等进程管理器也基于 Cluster 思想,提供更多增强功能