【问题标题】:nodejs - how to ensure my application is reliable all the timenodejs - 如何确保我的应用程序始终可靠
【发布时间】:2017-09-30 20:27:09
【问题描述】:
我一直在为我的服务器使用 forverjs,但由于某种原因服务器停止了并且服务器没有再次重新启动。 foreverjs可靠吗?
我应该使用任何其他库吗?
发现有很多库,如 pm2、nodemon、upstart、systemd、nginx。哪一个应该确保我的应用程序一直运行。这些工具还可以处理大量请求吗?
【问题讨论】:
-
我喜欢 pm2,但我也建议 monit 进行监控(停止服务的电子邮件,但我将节点进程重新启动到 pm2,monit 也适用于所有“非节点”)。除此之外,我发现这一切都是为了让你的代码记录正确的错误,这样你就可以防止同样的事情重复发生。在不知道错误的情况下,您可以坐在那里挠头。 “我当然希望这不会再次发生!”。
标签:
node.js
nginx
npm
pm2
forever
【解决方案1】:
nodemon 是一个不错的选择,你可以结合使用 forever 和 nodemon using,
forever start -c nodemon app.js
另外以我的经验永远是很靠谱的,试试看
forever logs app.js
看看究竟是什么导致了错误
【解决方案2】:
您的问题中有多个问题需要分析。
foreverjs可靠吗?
forever 是一个非常受欢迎的软件包。 As seen on GitHub,它有 75 个贡献者和 636 个提交。这个问题主要是基于意见的,但是 9/10(可能是 10/10)有经验的开发人员会说它是可靠的出于它的目的(我在下面展开)。
我应该使用任何其他库吗?
可靠性是通过坚固的软件设计实现的,而不仅仅是您选择的软件包。我多年来一直使用forever 和pm2 生产流程,没有任何问题。它们包括强大的可靠性功能,例如在应用程序崩溃时尝试重新启动。包不应该修复代码中的终端错误。
发现有很多库,如 pm2、nodemon、upstart、systemd、nginx。
哪一个可以确保我的应用程序一直运行。
这可以通过阅读他们的 GitHub 描述找到。我使用nodemon 来快速测试编写的代码。例如,我启动了nodemon 进程,它开始了我的Node.js 进程。当我编辑我的代码并按保存时,Node.js 进程会自动停止并使用新代码重新启动。 nodemon 不应单独用于长时间运行的生产服务器,因为它会在您退出 shell 时停止。 pm2 和 forever 是有效的库,如有必要,您可以调查 upstart、systemd 和 nginx。
关于@Kalana Demel 的回答,我在上面的解释中考虑使用forever 运行nodemon 作为使用forever。
如何确保我的应用程序始终可靠
对于您的问题的总体答案,您应该编写测试以确保您的代码是可靠的。如果您编写了有效的单元和集成测试,那么选择一个包来运行该过程将是微不足道的(并且与可靠性无关),因为您不应该期望它崩溃。
【解决方案3】:
pm2 在这些情况下是不错的选择,我个人在所有 node.js 服务器中都使用 pm2,与其他相比,它提供了许多更重要的功能。
它的最大优点之一是可以轻松地与 keymetrics/newrelic 集成以分析服务器。
pm2 也会给你 cpu/memory 使用率,你甚至可以配置重启限制和间隔。