Node.js集群与多个Docker容器

时间:2017-10-30 07:27:18

标签: javascript node.js multithreading docker load-balancing

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

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

如果由于Docker容器可能会扩大或缩小其运行的CPU数量而导致副作用,则会产生副作用。

3 个答案:

答案 0 :(得分:6)

直截了当地说,看起来多个容器的性能远远好于具有群集支持的单个容器。这不是决定性的,但请查看:Performance and reliability when using multiple Docker containers VS standard Node cluster

答案 1 :(得分:0)

首先,您基本上不需要pm2来运行节点集群。节点附带内置clusters module以利用多核机器。此外,除非您对工作人员进行硬编码,否则缩小实例并不会产生任何影响。请参阅clusters模块中的示例代码,了解如何使用集群生成worker。

答案 2 :(得分:0)

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

NodeJS有一个Web工作者的概念来处理它如何处理传入的请求,但即使是不那么快的服务器也会处理数百个请求,因为它是一种非阻塞架构。

我知道我仍然需要挖掘我想要的Docker但是我没有时间,但我要做的是每个服务器(虚拟或物理)有1个docker镜像然后让pm2运行里面有几个节点实例。

原因是我希望Docker为我处理依赖项,我希望pm2能够处理集群管理,因为它具有很酷的功能,例如当内存到达目标时自动重启或重启错误的节点