在同一Kubernetes节点上多次复制Node.js Kubernetes服务器pod有意义吗?

在同一Kubernetes节点上多次复制Node.js Kubernetes服务器pod有意义吗?,node.js,kubernetes,google-kubernetes-engine,scaling,Node.js,Kubernetes,Google Kubernetes Engine,Scaling,我们有一个应用程序,可以处理可能需要几分钟才能返回响应的请求。将此应用程序放在一个pod中并在同一个节点中复制多次,这样我们就可以在一个新线程上处理每个请求(考虑到nodejs是单线程的),这有意义吗?这里的用例有点不稳定。按照您的说法,您的应用程序是单线程应用程序,并且您希望在新请求发出后立即增加pod,但前提是前一个pod正忙或已锁定,最简单的说法是,如果前一个pod正忙,则新pod将随新请求一起提供 Kubernetes是容器的协调器,在Kubernetes上部署单片应用程序不仅降低了Ku

我们有一个应用程序,可以处理可能需要几分钟才能返回响应的请求。将此应用程序放在一个pod中并在同一个节点中复制多次,这样我们就可以在一个新线程上处理每个请求(考虑到nodejs是单线程的),这有意义吗?

这里的用例有点不稳定。按照您的说法,您的应用程序是单线程应用程序,并且您希望在新请求发出后立即增加pod,但前提是前一个pod正忙或已锁定,最简单的说法是,如果前一个pod正忙,则新pod将随新请求一起提供

Kubernetes是容器的协调器,在Kubernetes上部署单片应用程序不仅降低了Kubernetes所能做的一切,而且还带来了大量部署和自动化问题的开销

另外,当您从一个整体(=单线程)脱离到一个(微型)面向服务的体系结构时,您可以为每个服务创建一个独立的事件循环。因为每个节点进程都将在容器中独立运行

我建议你考虑一下你的建筑设计应用程序,把它们分解成多线程,然后重新访问库伯内斯。

但是,引用相同的Linux shell就是Linux shell。您可以让它工作,下面的内容可以是一个前进的方向

战略解决方案:您可以为部署声明一个HPA[Horizontal Pod Autoscaler],标记为--max replications=xx,然后您需要使用请求指标编写作业,无论何时有对服务的请求,部署都应该自动缩放,并同样地取消缩放。此外,一旦请求结束,您将不得不缩小规模。您应该使用HPA的apiVersionv2beta2


此外,我认为您必须使用HPA的v2beta2API版本,因为您必须将请求计数保持为一元,这样请求不会生成5XX,因为如果未设置此类度量,kubernetes服务将向同一pod发送请求

当它需要几分钟时,它在做什么?是否存在对外部数据库、计算节点或其他事物的严重依赖?(您的代码中是否包含大量的
承诺
异步
)因此,如果我想运行nodejs应用程序的多个实例来利用kube节点上的所有核心,该怎么办?比如说8个内核,在同一个kube节点中复制nodejs应用程序pod 8次有意义吗?还是让noejs appA单线程应用程序的1个pod启动8个实例更好?在您的情况下,pod将被视为一个实例。一个吊舱可以旋转8个实例?这将是一个包含8个相同图像的容器的多容器吊舱,这将是一个糟糕的做法,甚至不值得一个测试环境。但是,为同一部署使用不同的副本是一种可行的做法。但问题是如何停止kubernetes服务,即如果一个pod已经在服务某个请求并且处于锁定状态,那么该请求将如何路由到另一个pod。只有当每个吊舱的最大请求设置为1时,HPA才可能这样做。