返回介绍

集群模式 Cluster Mode

发布于 2024-04-14 00:45:03 字数 2541 浏览 0 评论 0 收藏 0

集群模式

集群模式 允许联网的 Node.js 应用程序(http(s)/tcp/udp 服务器)在所有可用的 CPU 上扩展,无需任何代码修改。 这极大地提高了应用程序的性能和可靠性,具体取决于可用的 CPU 数量。 在引擎盖下,这使用了 Node.js 集群模块 ,以便扩展应用程序的子进程可以自动共享服务器端口。 要了解更多信息,请参阅有关集群模块的官方 Node.js 文档中的 工作原理

集群模式

用法

要启用集群模式,只需传递 -i <instances> 选项:

pm2 start app.js -i max

max 表示 PM2 将自动检测可用 CPU 的数量并运行尽可能多的进程

或者通过 js/yaml/json 文件

module.exports = {
  apps : [{
    script    : "api.js",
    instances : "max",
    exec_mode : "cluster"
  }]
}

注意:您需要将 exec_mode 设置为 cluster 以便 PM2 知道您想要在每个实例之间进行负载平衡,默认情况下它不会

然后启动进程文件:

pm2 start processes.json

-i 或 instances 选项可以是:

  • 0/max 将应用程序分布在所有 CPU 上
  • -1 将应用程序分布在所有 CPU 上 - 1
  • number 将应用程序分布在 number 个 CPU 上

重新加载

与终止并重新启动进程的 restart 相反, reload 实现了 0 秒停机时间 重新加载。

要重新加载应用程序:

pm2 reload <app_name>

或者:

pm2 reload process.json
pm2 reload process.json --only api

如果重新加载系统未能重新加载您的应用程序,超时将回退到经典重启。

优雅关机

在生产环境中,您可能需要等待处理完剩余的查询或关闭所有连接,然后再退出应用程序。 在 PM2 重新加载上下文 上,它可以转换为非常长的重新加载或不起作用的重新加载(回退到重新启动),这意味着您的应用程序在退出时仍然有打开的连接。 或者,您可能需要关闭所有数据库连接、清除数据队列或其他任何操作。

要优雅地关闭应用程序,您可以捕获 SIGINT 信号(PM2 退出时发送的第一个信号)并执行操作以等待/清除所有这些状态:

process.on('SIGINT', function() {
   db.stop(function(err) {
     process.exit(err ? 1 : 0);
   });
});

阅读有关正常关机的更多信息 功能。

无状态化你的应用程序

确保您的 应用程序是无状态的 意味着没有本地数据存储在进程中,例如会话/websocket 连接、会话内存及相关。 使用 Redis、Mongo 或其他数据库在进程之间共享状态。

关于如何编写高效、生产就绪的无状态应用程序的另一个资源是 十二要素应用程序宣言

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文