Node.js 在 Kubernetes 上横向扩展

标签 node.js docker kubernetes horizontal-scaling

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

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

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

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

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

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

最佳答案

NodeJS cluster机制对于允许 NodeJS 更有效地使用多个核心很有用,因此根据您的代码,它可能会让您受益,但它高度依赖于您的代码和各种依赖项以及它们与集群一起工作(或不工作)的效果。

作为一般实践,如果您可以将容器分解为可以在 kubernetes 中作为 Pod 运行的良好并行化工作,那么我建议您采用以下流程来看看什么适合您:

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

从这里开始,您就有了一个基线,您可以使用 Kubernetes 水平扩展该基线,以验证您想要实现的 1000 个用户并发基线。 2017 年 Kubecon 上有一篇关于此过程的精彩演讲,名为 Load Testing Kubernetes: How to optimize your cluster resource allocation in production

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

根据您在代码中所做的操作,启用集群可能需要大量的重新工作,因为它想要利用自己的工作概念,并且不清楚您正在使用哪些框架以及它们是否使用将合理地适合该结构。

关于Node.js 在 Kubernetes 上横向扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48140983/

相关文章:

对象克隆和 eval() 的 JavaScript 问题

node.js - 如何将 base64 编码的内存图像作为文件参数发布

node.js - Node - GraphQL - Ad.user 字段类型必须是输出类型,但得到 : undefined

docker - microsoft .net core 2.2 sdk docker容器可以用于构建2.1和2.2目标项目吗

Node.js POST 请求在 Postman 中永远挂起

macos - Mac 上的 Boot2Docker - 返回 bsdthread_register 错误

docker - 如何使用 `docker images`命令按大小对我的Docker镜像进行排序?

nginx - K8s Ingress服务返回503,在Pod日志中什么也没有

kubernetes - Liveness/Readiness 探针如何与 Pod 通信?

kubernetes - 使用 Kubernetes 时是否需要管理节点级操作系统更新?