Knative 并发背后的推理
Reasoning behind Knative concurrency
我最近开始探索 Knative,我正在尝试了解并发和自动缩放的工作原理。我理解(目标)并发是指对于给定的修订,可以同时调度到单个 Pod 的请求数。
但是,我不确定我是否理解并发值大于 1 的影响。当 N 个请求被调度到同一个 Pod 时会发生什么?它们是否会以 FIFO 顺序一次处理一个?是否会产生多个线程来并行服务它们(可能竞争 CPU 资源)?
我很想设置 concurrency=1 并依靠自动缩放通过多个 Pods 处理多个请求,但我想这不是最好的做法。
提前致谢
containerConcurrency
是 Knative 基础设施的参数,指示您的容器一次可以处理多少请求。
在 AWS Lambda 和其他一些功能即服务产品中,每个实例只会处理一个请求。这可能更易于管理,但某些语言(例如 Java 和 Golang)可以使用线程请求模型轻松地同时支持多个请求。 Cloud Foundry 和 App Engine 等平台支持这种更大的并发,但不支持代码转换的“功能”模型。
Knative 介于这两者之间;由于您可以自带容器,因此您可以构建一个像 Lambda 期望的单线程应用程序容器并将 containerConcurrency
设置为 1,或者您可以创建一个多线程容器并将 containerConcurrency
设置得更高。
我最近开始探索 Knative,我正在尝试了解并发和自动缩放的工作原理。我理解(目标)并发是指对于给定的修订,可以同时调度到单个 Pod 的请求数。
但是,我不确定我是否理解并发值大于 1 的影响。当 N 个请求被调度到同一个 Pod 时会发生什么?它们是否会以 FIFO 顺序一次处理一个?是否会产生多个线程来并行服务它们(可能竞争 CPU 资源)?
我很想设置 concurrency=1 并依靠自动缩放通过多个 Pods 处理多个请求,但我想这不是最好的做法。
提前致谢
containerConcurrency
是 Knative 基础设施的参数,指示您的容器一次可以处理多少请求。
在 AWS Lambda 和其他一些功能即服务产品中,每个实例只会处理一个请求。这可能更易于管理,但某些语言(例如 Java 和 Golang)可以使用线程请求模型轻松地同时支持多个请求。 Cloud Foundry 和 App Engine 等平台支持这种更大的并发,但不支持代码转换的“功能”模型。
Knative 介于这两者之间;由于您可以自带容器,因此您可以构建一个像 Lambda 期望的单线程应用程序容器并将 containerConcurrency
设置为 1,或者您可以创建一个多线程容器并将 containerConcurrency
设置得更高。