【问题标题】:Using pm2 Inside of an Auto-Scaling Environment在 Auto-Scaling 环境中使用 pm2
【发布时间】:2017-03-26 01:17:27
【问题描述】:

我计划使用 AWS EC2 容器服务来托管一组公开 REST API 的自动扩展 Node.js + Express 实例。我看过多篇文章告诉我应该使用pm2 而不是forever.js 以确保我的应用程序在崩溃时重新启动,我可以顺利重新加载应用程序等。

但是,对于容器内的pm2 应该使用什么配置,我有点困惑。由于这些实例将自动扩展,我是否仍应在“集群模式”下运行进程管理器?我想确保我充分利用了我的实例,我似乎无法找到任何关于在这样的自动缩放环境中是否需要集群的明确答案(只是 pm2 带有负载-平衡器和缩放技术本身)。

【问题讨论】:

    标签: node.js amazon-web-services docker amazon-ec2 pm2


    【解决方案1】:

    在任何情况下,我都会在 pm2 上使用 systemd,因为它现在在大多数 Linux 发行版上都是原生的,并且实际上少了一个步骤(使用 pm2,您仍然需要使 pm2 守护程序成为服务)。

    至于运行集群等,我认为这在很大程度上取决于您的 Node 应用程序在做什么。因此,我可能会部署不使用它的容器,将其作为容器而不是内部进行扩展,并进行一段时间的分析。这使每个容器内的内容尽可能简单,并让 EVS 服务管理器完成其工作。

    当大多数人使用集群模块时,他们会为每个 CPU 内核创建一个或两个工作器。鉴于容器与主机上的任何其他容器共享 CPU 内核,您似乎不会因为额外的复杂性而受到太大影响。

    【讨论】:

    • 这是有道理的。我没有考虑 systemd - 我将不得不调查它
    • 希望有机会改进这个答案,如果给出 - 的人会善意地表达他或她的麻烦。
    • 好吧,这并不是我所需要的,但我认为这是我所问问题的正确答案。谢谢!
    • @nmagerko 想详细说明,还是提出另一个问题?
    • 哎呀,如果它以这种方式出现,我不是那个投反对票的人。我这么说的原因是因为我将在负载均衡器后面运行 Docker 容器,而且似乎在容器中使用进程管理器是不好的做法(刚刚发现)。