首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Docker容器和Node.js集群

Docker容器和Node.js集群
EN

Stack Overflow用户
提问于 2015-02-17 02:28:29
回答 3查看 12.1K关注 0票数 32

我有一个运行Node.js的应用程序接口服务器,它使用它的集群模块,测试看起来相当不错。现在我们的IT部门想要使用Docker容器,这让我很高兴,但除了玩玩之外,我从来没有真正使用过它。但我有一个想法,Node.js应用程序在单个Docker进程中运行,因此集群模块并不是最好的,因为单个Docker进程可能是设置的慢点,直到请求被集群模块在该进程中拆分。

那么,一个正在运行的Docker容器集群能够动态地启动和停止它们,这比使用Node.js的集群模块更重要,对吗?

如果我有一个容器集群,使用Node.js的集群模块能给我带来什么好处吗?api端点返回的时间比.5sec少(通常要少得多)。

我使用的是MySQL (我相信它是一个单一的服务器,目前没有更多),所以没有任何理由使用数据完整性解决方案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-17 02:48:44

您必须进行测量才能确定,但我的预感是使用node的集群模块运行是值得的。它将以最少的额外开销获得更高的CPU利用率。无需管理额外的容器(启动、停止、监控)。此外,集群工作人员具有高效的通信机制。在我看来,最合理的进化(不要跳过步骤)是:

  1. 1容器、1节点process
  2. 1容器、多个群集节点

容器,每个容器都有多个节点工作进程

票数 20
EN

Stack Overflow用户

发布于 2017-02-05 17:58:00

使用Docker时,我认为最好的解决方案是让每个容器的进程尽可能少,因为容器是轻量级的;您不希望进程尝试使用多个CPU。因此,在容器中运行集群不会增加任何价值,而且可能会导致延迟恶化。

在这里,https://medium.com/@CodeAndBiscuits/understanding-nodejs-clustering-in-docker-land-64ce2306afef#.9x6j3b8vw查德·罗宾逊概括地解释了这个想法。

Kubernetes、Rancher、Mesos和其他容器管理层处理负载平衡。它们在内部提供了“调度”(在不同的CPU和机器之间移动这些Docker容器切片,以便在集群中获得良好的使用)和“网络”(对这些容器的入站请求进行负载平衡)层。

更新

我认为添加链接Why it is recommended to run only one process in a container?是值得的,人们可以在这里分享他们的想法和经验,但主要来自Jon有一些有趣的观点:

假设你给一个容器一个单一的责任(单个进程、函数或关注点):好主意Docker将其命名为“关注点”;)

  • 横向扩展容器更容易。
  • 它可以在不同的应用程序问题中重复使用,与在整个应用程序环境中进行相比,故障排除是一件轻而易举的事情。此外,日志记录和报告可以更准确,detailed.
  • Upgrades/Downgrades可以逐步和完全controlled.
  • Security可以应用于特定的资源和在不同的级别。
票数 23
EN

Stack Overflow用户

发布于 2020-03-18 21:14:59

我有一个带有4个逻辑核心的系统,我在我的机器上以及安装在同一台机器上的docker上运行了以下代码。

代码语言:javascript
复制
const numCPUs = require('os').cpus().length;
console.log(numCPUs)

这行代码在我的机器上打印4,在docker容器中打印2。这意味着如果我们在docker容器中使用集群,那么只有2个实例在运行。因此,docker容器看不到与实际机器相同的内核。同时,在集群模式下运行5个docker容器,得到10个机器实例,最终由具有4个逻辑核心的操作系统内核管理。

因此,我认为最好的方法是在群模式下使用多个docker容器实例,并禁用node.js集群。这应该会带来最好的性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28547993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档