×

并发性决定了应用程序每个副本在任何给定时间可以处理的并发请求数。并发性可以配置为软限制硬限制

  • 软限制是目标请求限制,而不是严格执行的边界。例如,如果出现突然的流量激增,则可能会超过软限制目标。

  • 硬限制是严格执行的请求上限。如果并发性达到硬限制,则多余的请求将被缓冲,并且必须等到有足够的空闲容量才能执行这些请求。

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

添加软目标和硬限制意味着自动缩放器将并发请求数的目标设置为软目标,但对最大请求数施加硬限制。

如果硬限制值小于软限制值,则软限制值将被调低,因为没有必要将请求数的目标设置为实际可以处理的请求数。

配置软并发目标

软限制是目标请求限制,而不是严格执行的边界。例如,如果出现突然的流量激增,则可能会超过软限制目标。您可以通过在规范中设置autoscaling.knative.dev/target批注,或使用带有正确标志的kn service命令来为您的 Knative 服务指定软并发目标。

步骤
  • 可选:在Service自定义资源的规范中,为您的 Knative 服务设置autoscaling.knative.dev/target批注

    示例服务规范
    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: showcase
      namespace: default
    spec:
      template:
        metadata:
          annotations:
            autoscaling.knative.dev/target: "200"
  • 可选:使用kn service命令指定--concurrency-target标志

    $ kn service create <service_name> --image <image_uri> --concurrency-target <integer>
    创建具有 50 个请求并发目标的服务的示例命令
    $ kn service create showcase --image quay.io/openshift-knative/showcase --concurrency-target 50

配置硬并发限制

硬并发限制是严格执行的请求上限。如果并发性达到硬限制,则多余的请求将被缓冲,并且必须等到有足够的空闲容量才能执行这些请求。您可以通过修改containerConcurrency规范,或使用带有正确标志的kn service命令来为您的 Knative 服务指定硬并发限制。

步骤
  • 可选:在Service自定义资源的规范中,为您的 Knative 服务设置containerConcurrency规范

    示例服务规范
    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: showcase
      namespace: default
    spec:
      template:
        spec:
          containerConcurrency: 50

    默认值为0,这意味着一次允许流入服务一个副本的并发请求数没有限制。

    大于0的值指定一次允许流入服务一个副本的请求的确切数量。此示例将启用 50 个请求的硬并发限制。

  • 可选:使用kn service命令指定--concurrency-limit标志

    $ kn service create <service_name> --image <image_uri> --concurrency-limit <integer>
    创建具有 50 个请求并发限制的服务的示例命令
    $ kn service create showcase --image quay.io/openshift-knative/showcase --concurrency-limit 50

并发目标利用率

此值指定自动缩放器实际目标的并发限制的百分比。这也被称为指定副本运行的热度,这使自动缩放器能够在达到定义的硬限制之前进行扩展。

例如,如果containerConcurrency值设置为 10,而target-utilization-percentage值设置为 70%,则当所有现有副本的平均并发请求数达到 7 时,自动缩放器将创建新的副本。编号为 7 到 10 的请求仍然发送到现有副本,但会启动其他副本以预期在达到containerConcurrency值后需要这些副本。

使用目标利用率百分比批注配置的示例服务
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: showcase
  namespace: default
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/target-utilization-percentage: "70"
...