之前我们都是使用node app.js直接启动Node服务器,如果在线上我们要考虑使用多核 CPU,充分利用服务器资源,这里就用到多进程解决方案。
前文我们分析了 Node.js 主线程是单线程的,如果我们使用 node app.js 方式运行,就启动了一个进程,只能在一个 CPU 中进行运算,无法应用服务器的多核 CPU。这就会造成性能的浪费,为了解决这个问题,就要引出我们本讲的内容cluster模式。
cluster 模式其实就是我们的一个主进程多个子进程的模式,主进程监听端口,子进程不监听端口,从而形成一个集群的概念。
在 cluster 模式中存在 master 和 worker 的概念,master 就是主进程,worker 则是子进程。
cluster 模块应用 child_process 来创建子进程,子进程通过复写掉 cluster._getServer 方法,从而在 server.listen 来保证只有主进程监听端口,主子进程通过 IPC 进行通信,其次主进程根据平台或者协议不同,应用两种不同模块(round_robin_handle.js 和 shared_handle.js)进行请求分发给子进程处理。接下来我们看一下 cluster 的成熟的应用工具 PM2 的应用和原理。
此文章为6月Day021学习笔记,内容来源于极客时间《Node.js开发实战》,强烈推荐该课程!