gpt4 book ai didi

node.js - 如何在 Node.js 中实现零停机重新部署

转载 作者:太空宇宙 更新时间:2023-11-03 23:34:19 26 4
gpt4 key购买 nike

实现 Node.js 应用程序零停机的最简单方法是什么?

我有一个应用程序需要执行以下重新部署步骤:

  • npm 安装
  • node_modules/.bin/bower install
  • node_modules/.bin/gulp

这些操作的结果是由名为 buildgulpfile.js 目录生成的可立即运行的应用程序。在此目录中,我有一个当前正在运行的同一应用程序的实例(当前通过 forever 启动,如下所示 - forever start server.js)。

据我所知,通过forever模块不可能实现零停机,所以我决定选择另一种方式来实现。

我看到了pm2但我发现它非常复杂(如果你不这么认为,请证明我错了)。

我还看到了naught但我什至无法通过 naught start server.js 启动我的应用程序——它甚至不会在 stdout/stderr 中打印任何内容。

我还看到了up-time但我不明白 - 当我运行 gulp 时,它将如何处理应该替换当前正在运行的实例当前工作的目录中的文件的情况?

最佳答案

关于在构建期间处理替换的文件:如果 Node.js 应用程序使用这些文件,则所有更改将在进程重新启动时应用(因为这些文件已加载到内存中),浏览器前端文件也可以缓存在应用程序内存中实现类似的行为(仅在重新启动或/和缓存失效时应用更改)。

我们在集群模式下使用 pm2。

pm2 start app.js -i

上述命令在所有可用 CPU 核心上以集群模式启动 app.js

零停机重启:

pm2 Graceful重新加载全部

此命令会按顺序重新启动所有进程,因此,如果您有多个进程启动并正在运行,则服务器在重新启动期间始终会请求至少一个进程。如果您只有一个 app.js 进程,您可以以集群模式启动它并运行 pm2 scale app.js 2 (再启动一个进程),然后运行 ​​pm2 GracefulReload all,然后 pm2 scale app.js 1(删除之前启动的进程)。

虽然我认为应用程序重新启动不是零停机部署的主要问题,但我们还没有设法处理数据库迁移,因此需要完全关闭应用程序才能应用数据库更改。此外,当部署期间用户获取新版本的浏览器前端文件时,浏览器前端文件也可能会出现问题,但 AJAX 请求是由旧版本的服务器进程处理的,在这种情况下,粘性 session 和 API 版本控制可以解决问题。

关于node.js - 如何在 Node.js 中实现零停机重新部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34450088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com