概述
cluster
cluster模块的作用
众所周知,node.js执行是单线程的,一旦出现了未捕获的异常,应用就容易崩溃。故,node就出现了cluster模块。cluster可以master-worker模式开启多进程。 有负载均衡的处理请求,提高系统的性能。
cluster模块的使用
- 引入cluster模块
- 根据master-worker进程分别进行不同的处理,master主进程fork()worker进程,worker进程处理请求。
- master进程和worker进程通过send和监听message进行通信
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cKGPo6xc-1655347140891)(https://wos.58cdn.com.cn/IjGfEdCbIlr/ishare/9f96bdde-fe7a-4077-bee3-174e99673a1cimage.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jm2TfZ0u-1655347140892)(https://wos.58cdn.com.cn/IjGfEdCbIlr/ishare/a9fc5940-0d7c-494f-a45f-f7111288ee4bimage.png)]
cluster模块的一些疑问与解答
1.cluster模块使用的集群模式方案是什么?
集群模式一般有两种
- 一个node实例开启多个端口,通过反向代理服务向各端口服务器进行转发。
- 一个node实例开启多个进程监听同一个端口,通过负载均衡分配请求。
cluster就采用的第2种方案,master-worker方案。
2.cluster模块为什么可以多个进程监听一个端口?
其实是node.js的cluster模块的listen方法做了额外处理。其实此端口并未受到所有进程的监听,只有master进程监听。
worker进程在listen的时候,会向master进程注册该worker,若是第一次监听到该端口下的worker,master进程创建一个socket链接,并绑定监听端口。监听请求。与子进程通过ipc(进程间通信),将scoket(链接句柄)传递过去。
- cluster负载均衡的方案是什么?
node.js 中使用了roundrobin负载均衡策略。它的原理就是一种无状态的轮询策略。
curIndex = (curIndex + 1)% size
假定每台服务器的硬件资源、处理性能都是相同的,根据进程数量,依次分配,直到所有进程都处理完了,在开始重新计算分配。
pm2
pm2是什么?
pm2是一个带有负载均衡能力的node进程管理工具
为什么选择pm2?
pm2和其他node进程工具相比
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mENXlvWp-1655347140893)(https://wos.58cdn.com.cn/IjGfEdCbIlr/ishare/7d527fe8-26b5-434d-89ab-b92d9cbefbc3image.png)]
pm2的特性
- 后台运行
普通node启动,关闭终端后就结束进程。pm2后台运行,终端关闭不影响 - 自动重启
可以监听文件改动,自动重启 - 停止不稳定的进程
限制不稳定的重启的次数,达到上限就停止进程。 - 0s停机重启
集群模式下,可以达到重启时不停止服务。 - 简单日志管理
可以收集日志,便于检查错误 - 自动负载均衡
cluster模式下,会自动使用轮询的方式达到负载均衡,从而减轻服务器的压力。
7.提供实时接口
pm2插件提供实时的接口,返回服务器与进程的信息 - 集成管理
多个进程,不同环境,可以统一管理。
pm2使用
1.命令行
- 启动
$ pm2 start app.js # 启动app.js应用程序
$ pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应用实例
# 4个应用程序会自动进行负载均衡
$ pm2 start app.js --name=“api” # 启动应用程序并命名为 “api”
$ pm2 start app.js --watch # 当文件变化时自动重启应用 - 信息
$ pm2 list # 列表 PM2 启动的所有的应用程序
$ pm2 monit # 显示每个应用程序的CPU和内存占用情况
$ pm2 show [app-name] # 显示应用程序的所有信息 - 日志
$ pm2 logs # 显示所有应用程序的日志
$ pm2 logs [app-name] # 显示指定应用程序的日志 - 停止重启
$ pm2 stop all /0 # 停止所有的/ id为 0的应用程序
$ pm2 restart all # 重启所有应用
$ pm2 reload all # 重启 cluster mode下的所有应用
$ pm2 delete all /0 # 关闭并删除/ id为 0所有应用
- 配置文件
- 使用:pm2 ecosystem生成配置文件
- 配置
- pm2 start ecosystem.config.js
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pOkGzJff-1655347140893)(https://wos.58cdn.com.cn/IjGfEdCbIlr/ishare/1da7d268-82e7-419f-9354-dcbfe9d99bc0image.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9xZbtq4n-1655347140893)(https://wos.58cdn.com.cn/IjGfEdCbIlr/ishare/f967de2e-eb59-4878-8e1b-1069ed53ad1dimage.png)]
pm2使用的一些实例
- pm2 ls
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uaZM2ORU-1655347140893)(8)]
2.pm2 monit
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7BOmTlSl-1655347140894)(9)]
pm2 架构
pm2 主要有4部分构成,satan.js,god.js,cluster,rpc远程过程调用。
- santan.js提供了程序的退出,杀死等方法
- god.js 负责维护进程的正常运行,异常退出时保证重启。god进程启动后,一直运行,相当于cluaster中的master进程,守护worker进程的正常运行。
- cluster负责开启cluster模式,进行负责均衡。
- rpc远程过程调用。说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。同一机器不同进程间的方法调用也属于rpc的作用范畴。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qxA3w6P4-1655347140894)(https://wos.58cdn.com.cn/IjGfEdCbIlr/ishare/acaab601-09ac-43ce-bb13-52259c7f8828image.png)]
pm2 执行流程
以pm2 start index.js -i 4 为例
- 每次输入命令行就会执行一次satan程序
- 判断god.js是否在运行,无运行,使用daemon启动god,建立god和satan之间的rpc链接
- 若开启cluster模式,则god在启动时,会配置cluster,并且监听cluster中的事件
- 调用daemon中的prepare方法。调用claster.fork生成多个worker,来完成集群的启动。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FEqeNZpd-1655347140895)(https://wos.58cdn.com.cn/IjGfEdCbIlr/ishare/e682175f-8e5b-42df-b3ad-c3e4a1ed7140image.png)]
最后
以上就是可爱战斗机为你收集整理的node中cluster与pm2clusterpm2的全部内容,希望文章能够帮你解决node中cluster与pm2clusterpm2所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复