Node.js 在 Kubernetes 上横向扩展

Thi*_*elo 6 horizontal-scaling node.js docker kubernetes

我使用 Docker 在 node.js 上构建了一个应用程序,但我不确定如何在 Kubernetes 集群上扩展它,以便充分利用我的集群硬件。

从性能的角度来看,以下哪个更好:

集群我的节点应用程序并根据需要运行尽可能多的容器

或者

只需根据需要运行尽可能多的容器而无需集群?

当我说集群时,我的意思是这个https://nodejs.org/api/cluster.html

我的应用程序是一个由 mongoDB 支持的简单 CRUD Api。我们估计它将有 1000 个并发用户。我们的集群有 3 个节点。

hec*_*ckj 5

的NodeJS集群机制是有益的,允许的NodeJS更有效地比单核心使用更大的,所以要根据您的代码,可能你受益,但它是高度依赖于你的代码和各种依赖关系,以及如何好他们的工作(或没有)与聚类。

作为一般实践,如果您可以将容器分解为可以在 kubernetes 中作为 pod 运行的很好的并行工作,那么我建议将以下过程作为一个过程,看看哪些对您有用:

  1. 设置一个包含您的代码的 pod,并对其运行负载测试。使用 Kubernetes 从 cAdvisor 获得的数据来表征您的 pod 喜欢拥有多少资源(cpu 和内存)。
  2. 根据您在上面看到的内容设置 CPU 和内存的资源限制。
  3. 运行负载测试以验证您的单个 Pod 在规模方面的处理能力

然后,您就有了一个基线,您可以在其中使用 Kubernetes 进行水平扩展,以验证您想要实现的 1000 个用户并发基线。在 2017 Kubecon 上有一个关于这个过程的很好的演讲,称为负载测试 Kubernetes:如何优化生产中的集群资源分配

一旦有了基线,就可以利用代码中的集群运行原型,然后与非集群版本进行比较。如果您这样做,我会仔细检查您为 CPU 设置的任何限制是否大于 1 个核心,否则您将在 NodeJS 运行时之外进行自我限制以访问多个核心,这将违背使用的目的聚类。

根据您在代码中所做的工作,启用集群可能需要进行大量的返工,因为它希望利用自己的工作程序概念,并且不清楚您正在使用哪些框架以及它们是否适合合理进入那个结构。