一尘不染

部署生产Node.js服务器

node.js

我已经编写了一个Node.js应用程序,我希望它可以在我们的生产机器上运行。这似乎是一个很普遍的要求,但我找不到合适的解决方案。是否存在用于部署生产Node.js应用程序的既定解决方案?

该应用程序很简单(<100
LOC),但是需要非常高效,可靠并且可以连续运行数年而无需重新启动。它将在大型站点上运行,每秒有数十个连接。(该应用程序不用作网络服务器,它只有JSON
API)

这是我考虑过的方法,但我仍然不确定:

使用框架(例如Express)

由于该应用程序需要高性能且非常简单,因此我想避免以框架形式添加膨胀。

使用以下命令启动服务器nohup

这里的主要问题是异常处理,我们(显然)不希望整个服务器由于异常而崩溃。据我了解,将整个应用程序包装在一个try {} catch {}循环中将无济于事,因为Java解释器在发生异常后处于不可预测的状态。那是对的吗?

使用永远的东西

我已经在我们的FreeBSD机器上安装了Forever,这非常容易出错。最终催生了无尽的进程,这些进程无法从Forever中永久杀死。我不得不kill -9跑回机器,我对在Forever上运行生产应用程序没有太大的信心。看来Upstart(类似的工具,但更通用)不会在FreeBSD上运行。

托管解决方案(例如Heroku,Rackspace,Amazon EC2等)

这可能是最简单的解决方案,但对于其他Web服务器,我们已经拥有了不错的硬件。出于财务考虑,这没有任何意义。

当然必须为此解决一些问题?我想念什么吗?


阅读 250

收藏
2020-07-07

共1个答案

一尘不染

  • 除非您想自己处理会话,Cookie,中间件等,否则,您应该真正使用框架(我建议使用类似Express的东西,因为它已经过实战测试)。快递真的很轻。
  • 使用nohup启动服务器:您不应该这样做,只需使用常规的“ node”命令启动它即可。Express也将路由包裹在try-catch中,因此您的服务器不会在路由中崩溃。但是,如果您的服务器确实存在严重问题,则不必担心重新启动服务器(此外,如果至少有2-3个进程,那么只有一个进程会死掉,因此,至少还有1-2个进程会消失,而用户不会感觉不到)。
  • 为了进行监视,我个人更喜欢操作系统级别的功能,例如UpstartMonit
  • 托管解决方案:由于您已经拥有了自己的严肃硬件,因此无需在其他方面投入资金。只需使用负载平衡器(可能是nginx或node-http-proxy)来代理东西。
2020-07-07