docker 在自动缩放环境中使用pm2

h5qlskok  于 2022-12-11  发布在  Docker
关注(0)|答案(2)|浏览(99)

我计划使用AWS EC2容器服务来托管一组公开REST API的Node.js + Express示例的自动扩展。我看过多篇文章,告诉我应该使用pm2而不是forever.js,以确保我的应用程序在崩溃时重新启动,我可以顺利地重新加载应用程序,等等。
但是,我有点困惑,我应该使用什么配置与容器内的pm2。由于这些示例将自动缩放,我应该仍然运行在“集群模式”的进程管理器?我想确保我得到了我的示例的最大利用率,我似乎找不到任何明确的答案来说明在这样的自动扩展环境中是否需要群集(只是pm2本身附带了一个负载平衡器和扩展技术)。

wfsdck30

wfsdck301#

在任何情况下,我都会在pm2上使用systemd,因为它现在在大多数Linux发行版上都是原生的,而且实际上少了一个步骤(使用pm2,您仍然需要使pm2守护进程成为一个服务)。
至于运行集群等,我认为这在很大程度上取决于你的Node应用在做什么。因此,我可能会部署不使用它的容器,作为容器而不是内部进行扩展,并进行一段时间的分析。这使每个容器内部的事情尽可能简单,让EVS服务管理器完成它的工作。
当大多数人使用集群模块时,他们会为每个CPU核心制造一个或两个工作者。假设一个容器与主机上的任何其他容器共享CPU核心,那么似乎你并没有因为额外的复杂性而得到太多的好处。

fjnneemd

fjnneemd2#

我们在AWS EC2集群中也遇到了同样的情况。我们创建了1个负载平衡器和2个服务器,这些服务器具有许多CPU和内存来管理我们所有的应用程序。每个node.js应用程序都有自己的容器和所需的最小内存(例如1GB)。
在每个容器中,我们有PM2,它有内存限制来重新启动每个进程(防止内存泄漏),并且对容器的CPU或内存没有限制。每个应用程序在容器中至少有2个示例(两个服务器通常有4个示例)。
我还写了一个小的PM2插件,根据负载自动缩放容器内的应用程序,它可以帮助我们将应用程序缩放到最大CPU-1。所以,你可以尝试使用它https://www.npmjs.com/package/pm2-autoscale并分享反馈。
如果集群没有足够的功率,我们在AWS集群内提供自动扩展配置。

相关问题