如何安全地重新启动接收大量流量的节点应用程序?

时间:2017-03-11 00:54:40

标签: node.js pm2

例如,在Python世界中,如果因任何原因停止运行,您将使用uWSGI或Gunicorn重新启动Python Web应用程序,例如内存泄漏,意外的运行时错误等。但是这样做的方式是不丢弃连接(所以没有502s)。

看看Node的选项,似乎PM2是一个受欢迎的选择,但我有两个问题:

  1. 是否可以对连接排水做出相同的保证(请不要502)?
  2. 当我看到PM2之前,它似乎在我的应用程序中导致显着的性能下降,其中每毫秒的延迟计数(100秒的添加ms)。
  3. 所以我的问题是,性能是一个严肃的考虑因素,我们不能在重新启动时丢弃连接,Node的uWSGI和Gunicorn等价物是什么?

1 个答案:

答案 0 :(得分:1)

以下是一些策略:

  1. 将node.js群集与N个工作进程一起使用。然后,您可以重新启动任何单个工作进程,而不会影响整体可用性。

  2. 在多个群集前使用负载均衡器。然后暂时将负载均衡器配置为仅向一个群集发送流量。解除配置的集群完成所有打开的连接后,您可以重新启动该集群中的所有进程。

  3. 为了获得更大的灵活性,请在不同的计算机上使用多个群集。这样,您甚至可以在不中断整体可用性的情况下关闭服务器以进行硬件维护。

  4. 如果您在多个群集进程(例如数据库)之间拥有资源,那么您还需要为它们提供冗余,以便能够不间断地重新启动它们。

    当然,当然,您必须确保将系统的某些部分停止服务以进行重新启动或维护仍然会留下足够的服务容量,因此您通常会在整体服务负载较低时执行此操作(最长时间为凌晨4点)用户群)。

    PM2就是这样一种工具,它允许您执行此处推荐的部分内容(例如群集和无缝重启群集的一部分)。还有其他工具。