我是靠谱客的博主 可爱战斗机,最近开发中收集的这篇文章主要介绍node中cluster与pm2clusterpm2,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

cluster

cluster模块的作用

众所周知,node.js执行是单线程的,一旦出现了未捕获的异常,应用就容易崩溃。故,node就出现了cluster模块。cluster可以master-worker模式开启多进程。 有负载均衡的处理请求,提高系统的性能。

cluster模块的使用

  1. 引入cluster模块
  2. 根据master-worker进程分别进行不同的处理,master主进程fork()worker进程,worker进程处理请求。
  3. 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(链接句柄)传递过去。

  1. 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的特性

  1. 后台运行
    普通node启动,关闭终端后就结束进程。pm2后台运行,终端关闭不影响
  2. 自动重启
    可以监听文件改动,自动重启
  3. 停止不稳定的进程
    限制不稳定的重启的次数,达到上限就停止进程。
  4. 0s停机重启
    集群模式下,可以达到重启时不停止服务。
  5. 简单日志管理
    可以收集日志,便于检查错误
  6. 自动负载均衡
    cluster模式下,会自动使用轮询的方式达到负载均衡,从而减轻服务器的压力。
    7.提供实时接口
    pm2插件提供实时的接口,返回服务器与进程的信息
  7. 集成管理
    多个进程,不同环境,可以统一管理。

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所有应用
  1. 配置文件
  • 使用: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使用的一些实例

  1. pm2 ls
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uaZM2ORU-1655347140893)(8)]
    2.pm2 monit
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7BOmTlSl-1655347140894)(9)]

pm2 架构

pm2 主要有4部分构成,satan.js,god.js,cluster,rpc远程过程调用。

  1. santan.js提供了程序的退出,杀死等方法
  2. god.js 负责维护进程的正常运行,异常退出时保证重启。god进程启动后,一直运行,相当于cluaster中的master进程,守护worker进程的正常运行。
  3. cluster负责开启cluster模式,进行负责均衡。
  4. 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 为例

  1. 每次输入命令行就会执行一次satan程序
  2. 判断god.js是否在运行,无运行,使用daemon启动god,建立god和satan之间的rpc链接
  3. 若开启cluster模式,则god在启动时,会配置cluster,并且监听cluster中的事件
  4. 调用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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部