配置并发¶
并发是指应用程序的每个副本在任何给定时间可以处理的同时请求数量。
对于每个修订版本的并发,您必须为 软限制 配置 autoscaling.knative.dev/metric 和 autoscaling.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"
硬限制¶
硬限制是使用 Revision spec 上的 containerConcurrency 字段按 Revision 指定的。此设置不是注解。
autoscaling ConfigMap 中没有硬限制的全局设置,因为 containerConcurrency 对 autoscaling 之外的其他方面也有影响,例如请求的缓冲和排队。但是,可以在 config-defaults.yaml 中为 Revision 的 containerConcurrency 字段设置默认值。
默认值为 0,这意味着对允许进入 Revision 的请求数量没有限制。大于 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 - 按 Revision 的注解键:
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"