在 Knative serving 中,每个修订版本都会根据处理所有传入请求所需的容器实例数量而自动扩缩。当修订版本未收到任何流量时,它默认会缩容到零个容器实例。但是,如果需要,您可以使用实例数下限设置来更改此默认值,以将实例指定为保持空闲或“备用”状态。
安排的实例数受以下因素的影响:
在某些情况下,您可能需要限制可启动的容器实例总数,以实现成本控制,或者更好地兼容您的服务使用的其他资源。例如,您的 Knative serving 服务可能会与只能处理一定数量的并发打开连接的数据库交互。
关于容器实例数上限
您可以使用容器实例数上限设置来限制可并行启动的实例总数,如设置容器实例数上限中所述。
超出实例数上限
正常情况下,修订版本创建新实例进行扩容,以处理传入的流量负载。但是,如果您设置了实例数上限,在某些情况下将没有足够的实例来满足流量负载需求。在这种情况下,传入请求可排队等候长达 60 秒的时间。在这 60 秒的时间范围内,如果某实例处理完请求,则可以处理队列中的请求。如果在 60 秒的时间范围内没有实例可用,则请求将失败并在 Cloud Run 上显示 429
错误代码。
扩容保证
实例数上限是一种数量上限。设置上限并不意味着您的修订版本可以扩容到指定的容器实例数量。它只意味着在任何时间点容器实例数量不得超过此上限。
流量高峰
在某些情况下,例如流量快速激增时,Knative serving 在短时间内创建的实例数量可能略多于指定的实例数量上限值。如果您的服务无法承受此暂时性行为,您可能需要考虑安全边际因素,设置一个较低的实例数上限。
部署
部署新修订版本时,Knative serving 会逐渐将流量从旧修订版本迁移到新修订版本。因为实例数上限是针对每个修订版本设置的,所以部署后的一段时间内,实际的实例数可能会暂时超出指定的上限。
空闲实例和最大限度地减少冷启动
只有在实例处理请求时,系统才会使用 Kubernetes 资源,但这并不意味着 Knative serving 会在处理完所有请求后立即关闭实例。为了最大限度地降低冷启动产生的影响,Knative serving 可能会使某些实例保持空闲状态。如果突然遇到流量高峰,这些实例可以立即处理请求。
例如,某个容器实例处理完请求后,可能会在一段时间内保持空闲状态,以防需要处理其他请求。空闲容器实例可能会保留资源,例如打开的数据库连接。但是,对于 Cloud Run,CPU 将不可用
如需使空闲实例永久可用,请使用 min-instance
设置。
后续步骤
- 如需管理 Knative serving 服务的实例数量上限,请参阅设置容器实例数量上限。
- 要管理每个容器实例同时处理的请求数量上限,请参阅设置并发。
- 要优化并发设置,请参阅关于调整并发设置的开发提示。
- 如需指定空闲实例继续运行,以便最大限度地缩短处理第一批请求的延迟时间或冷启动时间,请参阅使用
min-instance
启用空闲实例。