Docker容器和Node.js集群

Mit*_*ens 22 node.js docker

我有一个运行Node.js的api服务器正在使用它的集群模块,测试看起来非常好.现在我们的IT部门想要转向使用我很高兴的Docker容器,但除了玩游戏外我从未真正使用它.但我有一个想法,Node.js应用程序在单个Docker进程中运行,因此集群模块实际上并不是最好的,因为单个Docker进程可能是设置的慢点,直到请求在该进程中被拆分由集群模块.

那么运行能够在运行中启动和停止它们的Docker容器集群比使用Node.js的集群模块更正确吗?

如果我有一个容器集群,那么使用Node.js的集群模块能得到什么吗?api端点返回的时间少于0.5秒(通常相当少).

我正在使用MySQL(相信它是单个服务器,目前没有更多),因此不应该有任何理由使用数据完整性解决方案.

Pet*_*ons 16

你必须要测量才能确定,但​​我的预感是运行节点的集群模块是值得的.它会以最少的额外开销为您提供更多的CPU利用率.没有额外的容器需要管理(启动,停止,监控).此外,集群工作人员拥有有效的沟通机制.在我看来,最合理的进化(不要跳过步骤):

  1. 1个容器,1个节点进程
  2. 1个容器,几个集群节点工作者
  3. 几个容器,每个容器有几个节点工作者

  • 我想知道每个人对下面这篇文章的看法在Docker的上下文中说明以下内容"管理和协调自己的资源的进程不再具有价值.相反,像Kubernetes,Mesos和Cattle这样的管理栈已经普及了这些概念.应该在整个基础设施范围内管理资源." 并且"在这种类型的环境中,尝试使用太多CPU内核的进程可能会成为麻烦制造者." https://medium.com/@CodeAndBiscuits/understanding-nodejs-clustering-in-docker-land-64ce2306afef (4认同)
  • 我做了一个项目,删除了node.js集群模块,只是在容器级别进行了缩放,很好.它认为"尝试使用太多CPU核心"的概念可能会产生误导.即使启用了集群模块,节点也会为每个CPU核心启动一个工作进程,甚至内核也会分配CPU负载.一般来说,我同意"Docker中可能没有集群",但在特定环境中进行实际测量可能是有益的. (4认同)

tio*_*mno 13

我认为使用Docker时最好的解决方案是尽可能减少每个容器的进程数,因为容器很轻; 您不希望进程尝试使用多个CPU.因此,在容器中运行群集不会添加任何值,并且可能会导致更糟糕的延迟.

在这里https://medium.com/@CodeAndBiscuits/understanding-nodejs-clustering-in-docker-land-64ce2306afef#.9x6j3b8vw Chad Robinson一般性地解释了这个想法.

Kubernetes,Rancher,Mesos和其他容器管理层处理负载平衡.它们提供"调度"(在不同的CPU和机器周围移动这些Docker容器片以在集群中获得良好的使用)和内部的"网络"(对这些容器的入站请求负载平衡)层.

更新

我认为值得添加链接为什么建议在容器中只运行一个进程?人们分享他们的想法和经历,但主要来自Jon,有一些有趣的观点:

只要您对容器承担单一责任(单个流程,功能或关注):好主意Docker将此命名为"关注";)

  • 水平缩放容器更容易.
  • 它可以在不同的项目中重复使用.
  • 与在整个应用程序环境中执行相比,识别问题和故障排除是轻而易举的.此外,日志记录和报告可以更准确和详细.
  • 升级/降级可以逐步完全控制.
  • 安全性可以应用于特定资源和不同级别.

  • 我认为理想的解决方案与其说是Nodejs Web应用程序中的一个问题,不如说是一个进程,因为多个子进程控制着您一次可以处理的_requests_数量。混合2个不同的应用程序不是一个好习惯,但是多个子进程会使您的应用程序更稳定,并允许一个进程失败并重新启动,而无需重新安排整个容器的时间。 (3认同)