自动扩缩#

SkyServe 为您的服务提供了开箱即用的自动扩缩功能。

固定副本数#

在服务 YAML 中,要启动的副本数量在 service 部分的 replicas 字段中指定

service:
  readiness_probe: /
  replicas: 2

# ...

在这种情况下,SkyServe 将启动服务的 2 个副本。但是,这种部署是固定的,无法根据动态流量进行调整。SkyServe 提供了自动扩缩功能,可帮助您根据流量对服务进行扩容和缩容,如下所示。

启用自动扩缩#

以下是启用服务自动扩缩的最小示例

service:
  readiness_probe: /
  replica_policy:
    min_replicas: 2
    max_replicas: 10
    target_qps_per_replica: 2.5

# ...

在此示例中,SkyServe 将

  • 最初启动服务的 2 个副本 (min_replicas)

  • 如果流量高,则逐渐扩容,最多 10 个副本 (max_replicas)

  • 如果流量低,则逐渐缩容,最少 2 个副本 (min_replicas)

副本数量将始终在 [min_replicas, max_replicas] 范围内。

自动扩缩基于服务的 QPS(每秒查询数)进行。SkyServe 将扩缩您的服务,以便最终每个副本每秒接收大约 target_qps_per_replica 个查询。此值可以是浮点数;例如

  • 如果每个副本的 QPS 高于 2.5,SkyServe 将启动更多副本(但不会超过 10 个副本)

  • 如果每个副本的 QPS 低于 2.5,SkyServe 将缩减副本(但不会少于 2 个副本)

具体来说,当前目标副本数量计算如下

current_target_replicas = ceil(current_qps / target_qps_per_replica)
final_target_replicas = min(max_replicas, max(min_replicas, current_target_replicas))

提示

replicasreplica_policy.min_replicas 的快捷方式。这两个字段不能同时指定。

提示

target_qps_per_replica 可以是任何正浮点数。如果在一个副本中处理一个请求需要两秒钟,我们可以使用 target_qps_per_replica=0.5

扩缩延迟#

SkyServe 不会立即扩容或缩容。相反,SkyServe 只会在服务 QPS 在一段时间内高于或低于目标 QPS 时才会扩容或缩容您的服务。这是为了避免过于激进的扩容和缩容。

默认的扩容延迟为 300 秒,缩容延迟为 1200 秒。您可以通过指定 upscale_delay_secondsdownscale_delay_seconds 字段来更改扩缩延迟

service:
  readiness_probe: /
  replica_policy:
    min_replicas: 2
    max_replicas: 10
    target_qps_per_replica: 3
    upscale_delay_seconds: 300
    downscale_delay_seconds: 1200

# ...

如果您希望更激进的扩缩,请将这些值设置得更低,反之亦然。

缩容至零#

SkyServe 支持缩容至零。

如果您的服务可能会长时间没有流量,请考虑使用 min_replicas: 0

service:
  readiness_probe: /
  replica_policy:
    min_replicas: 0
    max_replicas: 3
    target_qps_per_replica: 6.3

# ...

当系统没有流量时,服务将缩减所有副本,从而节省空闲副本的成本。从零扩容时,将忽略扩容延迟,以便更快地启动服务。

提示

如果设置了缩容至零,访问端点的客户端应确保具备重试机制,以便能够等待副本被配置并就绪,即在没有可用副本时启动新副本。