Node.js 的高效性和可扩展性已经让它成为了 Web 开发中广受欢迎的技术。不过,在实际的应用中,我们还需要考虑如何实现 Node.js 进程的横向扩展,以应对高并发的请求。PM2 和 Nginx 可以帮助我们实现 Node.js 进程的横向扩展,本文将为大家详细介绍。
PM2 的使用
PM2 的介绍
PM2 是一个 Node.js 进程管理工具,它可以自动监控 Node.js 进程的运行状态,如果进程崩溃或者停止了,PM2 可以自动重启进程,并且提供了多进程部署和负载均衡等功能。
安装 PM2
使用以下命令可以安装 PM2:
npm install pm2 -g
添加进程启动脚本
在项目根目录下创建一个 app.js
文件,内容如下:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - ----------------------- ---- -- - -- ---- --- ------------------- -- -- - ------------------- -- ------- -- ---- ------- ---
然后创建一个 start.js
文件,用于启动多个进程,内容如下:
-- -------------------- ---- ------- ----- --- - --------------- ----------------- -- - -- ----- - ------------------- - ---- - ----------- ------- --------- ---------- ------ ---------- ---------- -- ----- ----- -- - ----------------- -- ----- - ------------------- - ---- - ---------------- ------- -- ----------- ------------- - --- - ---
这里我们通过 instances: 'max'
来指定最大实例数,exec_mode: 'cluster'
表示使用多进程模式运行应用。
启动进程可以使用以下命令:
node start.js
使用 PM2 监控进程状态
可以使用以下命令来查看当前进程状态:
pm2 list
可以使用以下命令来查看 CPU 和内存使用情况:
pm2 monit
可以使用以下命令来重启或停止某一个进程:
pm2 restart app pm2 stop app
Nginx 的使用
Nginx 的介绍
Nginx 是一个高性能、高可靠性的 Web 服务器,可以实现反向代理、负载均衡、动态内容缓存等功能。
安装 Nginx
可以使用以下命令来安装 Nginx:
sudo apt-get install nginx
配置反向代理
在 Nginx 配置文件中添加以下内容,实现反向代理:
-- -------------------- ---- ------- ------ - ------ --- ----------- ---------- -------- - - ---------- ---------------------- ---------------- ---- ------ ---------------- --------- ------------- - -
然后重启 Nginx 服务:
sudo service nginx restart
现在就可以通过 http://localhost
访问 Node.js 应用了。
配置负载均衡
Nginx 还可以实现负载均衡功能,可以将请求分发到不同的 Node.js 进程中。
在 Nginx 配置文件中添加以下内容,实现负载均衡:
-- -------------------- ---- ------- -------- ----------- - ------ --------------- ------ --------------- ------ --------------- - ------ - ------ --- ----------- ---------- -------- - - ---------- ------------------- ---------------- ---- ------ ---------------- --------- ------------- - -
这里我们将请求分发到了端口号为 3000、3001、3002 的三个 Node.js 进程中。
然后重启 Nginx 服务,就可以测试负载均衡效果了。
总结
利用 PM2 和 Nginx,我们可以非常方便地实现 Node.js 进程的横向扩展,提高应用的性能和稳定性。同时,当我们需要部署在多台服务器上时,Nginx 还可以实现请求的负载均衡,将请求分发到不同的服务器上,从而进一步提高系统的性能和可靠性。
示例代码:https://github.com/huashan017/node-nginx-pm2-demo
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647711bf968c7c53b03a21d3