自动扩展#

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 不会立即进行扩展或缩减。相反,只有当您的服务的 QPS 在一段时间内高于或低于目标 QPS 时,SkyServe 才会对您的服务进行扩展或缩减。这是为了避免过于频繁地进行扩展和缩减。

默认的扩展延迟为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

# ...

当系统没有流量时,服务将缩减所有副本,并在空闲副本上节省成本。当从零扩展时,为了更快地启动服务,扩展延迟将被忽略。

提示

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