Node.js 是一个开放源代码、跨平台、事件驱动的 JavaScript 运行时环境,常用于 Web 应用程序的开发。在实际应用中,我们可能需要部署多个 Node.js 实例来满足高并发、高可用等要求。
PM2 是一款基于 Node.js 的进程管理工具,它可以帮助我们管理多个 Node.js 实例,并提供了 Load Balance 功能来实现负载均衡。本文将介绍 PM2 的 Load Balance 功能的使用方法。
安装 PM2
PM2 可以通过 npm 安装,在终端中输入以下命令即可:
npm install pm2 -g
启动 Node.js 实例
首先,我们需要启动多个 Node.js 实例。在本文中,我们使用一个简单的 Node.js Web 服务器作为示例。
下面是一个简单的 Node.js Web 服务器代码,保存为 app.js:
// javascriptcn.com 代码示例 const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello, World!\n'); }); server.listen(3000, () => { console.log('Server running at http://localhost:3000'); });
通过以下命令启动 Node.js 实例:
node app.js
启动多个 Node.js 实例时,可以修改端口号,例如:
node app.js 3001 node app.js 3002
使用 PM2 管理 Node.js 实例
启动多个 Node.js 实例后,我们可以使用 PM2 来管理它们,并实现负载均衡。
首先,进入项目目录,然后通过以下命令使用 PM2 启动 Node.js 实例:
pm2 start app.js -i 2
其中,“-i 2” 表示启动 2 个 Node.js 实例。此时,你将看到类似如下输出:
[PM2] Starting /path/to/app.js in cluster_mode (2 instances) [PM2] Done. ┌──────────┬────┬─────────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐ │ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ ├──────────┼────┼─────────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤ │ app │ 0 │ 1.0.0 │ fork │ 46230 │ online │ 0 │ 0s │ 2% │ │ app │ 1 │ 1.0.0 │ fork │ 46231 │ online │ 0 │ 0s │ 3% │ └──────────┴────┴─────────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘
此时,“pm2 ls” 命令可以查看当前管理的进程列表:
pm2 ls
输出:
┌──────────┬────┬─────────┬───────┬────────┬─────────┬────────┬─────────────┬──────────┐ │ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ ├──────────┼────┼─────────┼───────┼────────┼─────────┼────────┼─────────────┼──────────┤ │ app │ 0 │ 1.0.0 │ fork │ 46230 │ online │ 0 │ 5m │ 3% │ │ app │ 1 │ 1.0.0 │ fork │ 46231 │ online │ 0 │ 5m │ 2% │ └──────────┴────┴─────────┴───────┴────────┴─────────┴────────┴─────────────┴──────────┘
使用 PM2 Monitor 监控各个实例的状态:
pm2 monit
在 PM2 Monitor 界面,输入“t”切换到 Process View,然后可以看到各个实例的 CPU、内存、连接数等信息。
使用 PM2 Log 查看日志:
pm2 log
使用 Load Balance 实现负载均衡
使用 PM2 的 Load Balance 功能,可以将请求分发到多个 Node.js 实例中,从而实现负载均衡。
在启动 Node.js 实例时,可以指定端口号,例如,“node app.js 3000”。为了实现负载均衡,我们需要修改 Node.js Web 服务器代码,获取请求端口号并返回响应,例如:
// javascriptcn.com 代码示例 const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(`Hello, World! (port ${req.socket.localPort})\n`); }); server.listen(process.env.PORT, () => { console.log(`Server running at http://localhost:${process.env.PORT}`); });
修改完代码后,保存为 app_lb.js。然后使用 PM2 启动多个 Node.js 实例:
pm2 start app_lb.js -i 2 --name myapp
此时, PM2 的 Load Balance 功能已自动启用。
使用 curl 工具测试负载均衡:
for i in {1..10}; do curl http://localhost:3000; done
输出:
// javascriptcn.com 代码示例 Hello, World! (port 3002) Hello, World! (port 3001) Hello, World! (port 3002) Hello, World! (port 3001) Hello, World! (port 3002) Hello, World! (port 3001) Hello, World! (port 3002) Hello, World! (port 3001) Hello, World! (port 3002) Hello, World! (port 3001)
可以看到,请求被分发到了不同的 Node.js 实例中。
总结
本文介绍了 PM2 的 Load Balance 功能的使用方法,通过启动多个 Node.js 实例并实现负载均衡,可以提高 Web 应用程序的并发处理能力和可用性,从而更好地满足用户需求。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654445627d4982a6ebe274c3