跳至内容

配置并发

并发决定了在任何给定时间,应用程序每个副本可以处理的并发请求数量。

对于每个修订版本并发,您必须为 软限制 配置 autoscaling.knative.dev/metricautoscaling.knative.dev/target,或为 硬限制 配置 containerConcurrency

对于全局并发,您可以设置 container-concurrency-target-default 值。

软与硬并发限制

可以设置并发限制。

注意

如果同时指定了软限制和硬限制,则将使用较小的值。这可以防止自动扩展器具有硬限制值不允许的目标值。

软限制是目标限制,而不是严格强制的边界。在某些情况下,特别是如果突然出现大量请求,则可能超过此值。

硬限制是强制执行的上限。如果并发达到硬限制,剩余的请求将被缓冲,并且必须等到有足够的可用容量才能执行这些请求。

警告

仅当您的应用程序有明确的用例时,才建议使用硬限制配置。指定较低的硬限制可能会对应用程序的吞吐量和延迟产生负面影响,并且可能会导致额外的冷启动。

软限制

  • 全局键:container-concurrency-target-default
  • 每个修订版本注释键:autoscaling.knative.dev/target
  • 可能的值:整数。
  • 默认值:"100"

示例

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/target: "200"
apiVersion: v1
kind: ConfigMap
metadata:
 name: config-autoscaler
 namespace: knative-serving
data:
 container-concurrency-target-default: "200"
apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
  name: knative-serving
spec:
  config:
    autoscaler:
      container-concurrency-target-default: "200"

硬限制

硬限制是在修订版本规范上使用 containerConcurrency 字段每个修订版本指定的。此设置不是注释。

在自动扩展 ConfigMap 中没有全局设置硬限制,因为 containerConcurrency 对自动扩展之外的事情有影响,例如对请求的缓冲和排队。但是,可以在 config-defaults.yaml 中为修订版本的 containerConcurrency 字段设置默认值。

默认值为 0,表示对允许流入修订版本的请求数量没有限制。大于 0 的值指定允许同时流入副本的请求的精确数量。

  • 全局键:container-concurrency(在 config-defaults.yaml 中)
  • 每个修订版本规范键:containerConcurrency
  • 可能的值:整数
  • 默认值:0,表示无限制

示例

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    spec:
      containerConcurrency: 50
apiVersion: v1
kind: ConfigMap
metadata:
 name: config-defaults
 namespace: knative-serving
data:
 container-concurrency: "50"
apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
  name: knative-serving
spec:
  config:
    defaults:
      container-concurrency: "50"

目标利用率

除了之前解释的文字设置之外,并发值还可以通过使用目标利用率值来进一步调整。

此值指定自动扩展器应该实际针对先前指定目标的百分比。这也被称为指定副本运行的热度,这会导致自动扩展器在达到定义的硬限制之前进行扩展。

例如,如果 containerConcurrency 设置为 10,目标利用率值设置为 70(百分比),则当所有现有副本的平均并发请求数达到 7 时,自动扩展器将创建新的副本。第 7 到第 10 个请求仍将发送到现有副本,但这允许在预计需要时启动其他副本,以防达到 containerConcurrency 限制。

  • 全局键:container-concurrency-target-percentage
  • 每个修订版本注释键:autoscaling.knative.dev/target-utilization-percentage
  • 可能的值:浮点数
  • 默认值:70

示例

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
  namespace: default
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/target-utilization-percentage: "80"
    spec:
      containers:
        - image: ghcr.io/knative/helloworld-go:latest
apiVersion: v1
kind: ConfigMap
metadata:
 name: config-autoscaler
 namespace: knative-serving
data:
 container-concurrency-target-percentage: "80"
apiVersion: operator.knative.dev/v1alpha1
kind: KnativeServing
metadata:
  name: knative-serving
spec:
  config:
    autoscaler:
      container-concurrency-target-percentage: "80"

我们使用分析和 Cookie 来了解网站流量。有关您使用我们网站的信息将与 Google 共享,用于该目的。 了解更多.