并发

在 Knative serving 中,每个修订版本都会根据处理所有传入请求所需的容器实例数量而自动扩缩。

处理请求的容器实例越多,占用的 CPU 和内存就越多,因而产生的费用也越高。当需要启动新容器实例时,请求可能需要更多时间进行处理,从而降低服务的性能。

为了让您获得更多控制权,Knative serving 提供并发设置,用于指定给定容器实例可以同时处理的请求数量上限。

并发值

默认情况下,Knative serving 容器实例可以同时接收多个请求(最多 80 个)。请注意,与之相比,函数即服务 (FaaS) 解决方案(如 Cloud Run 函数)的并发设置是固定的,即 1。

虽然您应该使用默认的并发值,但如果需要,您可以降低最大并发数。例如,如果您的代码无法处理并行请求,请将并发设置为 1

指定的并发值为最大值,如果实例的 CPU 已被充分利用,则 Knative serving 可能不会向给定容器实例发送这么多请求。

下图展示了并发设置如何影响处理传入并发请求所需的容器实例数:

并发图表

何时将并发设置限制为一次处理一个请求

您可以限制并发设置,以确保一次只有一个请求发送到每个正在运行的容器实例。在下列情况下,建议您考虑执行此操作:

  • 每个请求都会使用大部分可用 CPU 或内存。
  • 您的容器映像并非设计用于同时处理多个请求,例如,如果您的容器依赖于两个请求无法共享的全局状态。

请注意,将并发请求数设置为 1 可能会对扩缩性能造成负面影响,因为许多容器实例都将需要启动才能处理急剧增加的传入请求。

案例

以下指标展示了一个应用场景,其中 400 个客户端每秒向一个 Knative serving 服务发出 3 个请求,该服务的最大并发设置为 1。顶部的绿线表示一段时间内的请求数,而底部蓝线表示开始处理请求的容器实例数量。

并发设置为 1

以下指标显示 400 个客户端每秒向一个 Knative serving 服务发出 3 个请求,该服务的最大并发设置为 80。顶部的绿线表示一段时间内的请求数,而底部蓝线表示开始处理请求的容器实例数量。请注意,处理相同请求量所需的实例要少得多。

并发设置为 80

后续步骤

如需管理 Knative serving 服务的并发,请参阅设置并发

要优化并发设置,请参阅关于调整并发设置的开发提示