Knative 并发背后的推理

问题描述

我最近开始探索 Knative,我正在尝试了解并发和自动缩放的工作原理。我理解(目标)并发是指可以同时为给定修订版调度到单个 Pod 的请求数。

但是,我不确定我是否理解并发值大于 1 的影响。当 N 个请求被调度到同一个 Pod 时会发生什么?它们会按 FIFO 顺序一次处理一个吗?是否会产生多个线程来并行服务它们(可能会争夺 cpu 资源)?

我很想设置 concurrency=1 并依靠自动缩放来处理通过多个 Pod 的多个请求,但我想这不是最好的做法。

提前致谢

解决方法

containerConcurrency 是 Knative 基础架构的参数,指示您的容器一次可以处理多少请求。

在 AWS Lambda 和其他一些功能即服务产品中,每个实例只会处理一个请求。这可以更简单地管理,但某些语言(例如 Java 和 Golang)使用线程请求模型可以轻松地同时支持多个请求。 Cloud Foundry 和 App Engine 等平台支持这种更大的并发性,但不支持代码转换的“函数”模型。

Knative 介于两者之间;由于您可以自带容器,因此您可以构建一个像 Lambda 期望的单线程应用程序容器并将 containerConcurrency 设置为 1,或者您可以创建一个多线程容器并将 containerConcurrency 设置为更高。