Node.js集群vs多个Docker容器

据我所知,Docker容器使用多个线程,Node.js应用程序只使用一个线程。 通过运行类似于处理Node.js集群的pm2 ,我可以利用Docker容器可用的所有内核。

这是否意味着我可以通过对Node.js进程进行集群来更好地利用每个Docker实例? 如果是这样,这是不是比每个容器简单运行一个单线程的Node.js实例更受欢迎?

一个担心的是,如果这有可能造成Docker容器扩大或缩小其运行的CPU数量的副作用。

直截了当地说,看起来好像多个容器比集群支持的单个容器要好得多。 这并不确定,但请检查: 使用多个Docker容器VS标准节点集群时的性能和可靠性 。

首先,你基本上不需要pm2来运行节点集群。 节点带有一个内置的集群模块 ,以利用多核心机器。 另外,缩小实例并没有真正的影响,除非您对工作人员进行硬编码。 请参阅集群模块中的示例代码,了解如何使用集群产生工作人员。

如果你正在讨论在另一个docker组件中集成NodeJS,我不认为这会给你一个额外的提升。 像你说的NodeJS运行在一个单独的线程,所以无论是pm2(我实际使用它)或docker将在分配负载方面具有相同的效果。

NodeJS有一个networking工作者的概念来处理如何处理传入的请求,但即使是一个不那么快的服务器将处理数百个请求,因为是一个非阻塞体系结构。

我认识到我仍然需要挖掘Docker,但是我没有时间,但是我要做的是每个服务器有一个docker映像(虚拟的或物理的),然后让pm2运行多个节点的内部实例它。

原因是我希望Docker为我处理依赖关系,我希望pm2能够处理集群pipe理,因为它有很酷的function,例如当内存到达目标时自动重启或者重启一个错误的节点